运输层

概述

运输层

3 计网 - 图1 image.png
从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两台主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

实际上在计算机网络中,真正进行通信的实体是通信两端主机中的进程,是这台主机中的一个进程和另一台主机中的一个进程在交换数据,即通信。因此严格地讲,两台主机进行通信就是两台主机中的应用进程互相通信。

从网络层来说,通信的两端是两台主机。IP数据报的首部明确地标志了这两台主机的IP地址。IP协议能够把源主机发送出的分组,按照首部中的目的地址,送交到目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。

从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是位于通信两端中的应用进程之间的通信。因此,运输层的作用是为不同主机中相互通信的应用进程提供逻辑通信。运输层协议又称为端到端协议。

进程之间的通信

image.png
在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。比如上图,设局域网 LAN1 上的主机 A 和局域网 LAN2 上的主机 B 通过互连的广域网 WAN 进行通信。在主机 A 的应用进程 AP1 和主机 B 的应用进程 AP3 通信的同时,应用进程 AP2 也和对方的应用进程 AP4 通信。

图中两个运输层之间有一个双向粗箭头,写明“运输层提供应用进程间的逻辑通信”。“逻辑通信”是指:从应用层来看,只要把应用层报文交给下面的运输层,运输层就可以把这报文传送到对方的运输层(哪怕双方相距很远),好像运输层之间的这种通信就是沿水平方向直接传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接数据的传送是沿着图中上下多次的虚线方向(经过多个层次)传送的。“逻辑通信”的意思是“好像是这样通信,但事实上并非真的这样通信”。
3 计网 - 图4
运输层有一个很重要的功能:复用(multiplexing)和分用(demultiplexing)。图中,一个端口表示一个进程。
复用是指在发送方多个不同的应用进程都可以使用同一个运输层协议传送数据(当然需要加上适当的首部)。
分用是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付给不同的目的应用进程。

注:IP层也有复用和分用的功能。即,在发送方不同协议的数据都可以封装成IP数据报发送出去,而在接收方的IP层根据P首部中的协议字段进行分用,把剥去首部后的数据交付应当接收这些数据的协议。

运输层功能

网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。运输层还具有网络层无法代替的许多其他重要功能:

  • 运输层还要对收到的报文进行差错检测。在网络层,IP 数据报首部中的检验和字段,只检验首部是否出现差错而不检查数据部分。
  • 根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。
  • 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道。

    运输层协议:UDP和TCP区别

    (1)用户数据报协议UDP (User Datagram Protocol):

  • UDP用户数据报

  • UDP在传送数据之前不需要先建立连接。
  • 远地主机的运输层在收到UDP报文后,不需要给出任何确认。
  • 虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。

(2)传输控制协议TCP (Transmission Control Protocol):

  • TCP报文段(segment)
  • TCP则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
  • TCP不提供广播或多播服务。
  • 由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销,如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。

应用和应用层协议主要使用的运输层协议
image.png

端口

TCP/IP体系的应用层常用协议所使用的运输层熟知端口号
3 计网 - 图6

套接字

UDP协议

特点:
无连接

TCP协议

特点:
面向连接
可靠传输

TCP的流量控制

TCP的拥塞控制

拥塞控制的一般原理

拥塞的概念、原因、影响
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞(congestion)。
可以把出现网络拥塞的条件写成如下的关系式:∑对资源的需求 > 可用资源
若网络中有许多资源同时呈现供应不足,网络的性能就要明显变坏,若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。

增加资源,不可以解决网络拥塞的问题
有人可能会说:“只要任意增加一些资源,例如,把结点缓存的存储空间扩大,或把链路更换为更高速率的链路,或把结点处理机的运算速度提高,就可以解决网络拥塞的问题。”其实不然。这是因为网络拥塞是一个非常复杂的问题。简单地采用上述做法,在许多情况下,不但不能解决拥塞问题,而且还可能使网络的性能更坏。

网络拥塞往往是由许多因素引起的。例如:
点缓存的容量太小;
链路的容量不足;
处理机处理的速率太慢;
拥塞本身会进一步加剧拥塞;

例如:当某个结点缓存的容量太小时,到达该结点的分组因无存储空间暂存而不得不被丢弃。现在设想将该结点缓存的容量扩展到非常大,于是凡到达该结点的分组均可在结点的缓存队列中排队,不受任何限制。由于输出链路的容量和处理机的速度并未提高,因此在这队列中的绝大多数分组的排队等待时间将会大大增加,结果上层软件只好把它们进行重传(因为早就超时了)。由此可见,简单地扩大缓存的存储空间同样会造成网络资源的严重浪费,因而解决不了网络拥塞的问题。

又如,处理机处理的速率太慢可能引起网络的拥塞。简单地将处理机的速率提高,可能会使上述情况缓解一些,但往往又会将瓶颈转移到其他地方。问题的实质往往是整个系统的各个部分不匹配。只有所有的部分都平衡了,问题才会得到解决。

拥塞常常趋于恶化。如果一个路由器没有足够的缓存空间,它就会丢弃一些新到的分组。但当分组被丢弃时,发送这一分组的源点就会重传这一分组,甚至可能还要重传多次。这样会引起更多的分组流入网络和被网络中的路由器丢弃。可见拥塞引起的重传并不会缓解网络的拥塞,反而会加剧网络的拥塞。

拥塞控制与流量控制的关系密切,它们之间也存在着一些差别。

所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。但TCP连接的端点只要迟迟不能收到对方的确认信息,就猜想在当前网络中的某处很可能发生了拥塞,但这时却无法知道拥塞到底发生在网络的何处,也无法知道发生拥塞的具体原因。(是访问某个服务器的通信量过大?还是在某个地区出现自然灾害?)

相反,流量控制往往是指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

拥塞控制的一般原理
拥塞控制的前提:网络能够承受现有的网络负荷。
实践证明,拥塞控制是很难设计的,因为它是一个动态问题。
分组的丢失是网络发生拥塞的征兆而不是原因。
在许多情况下,甚至正是拥塞控制本身成为引起网络性能恶化、甚至发生死锁的原因。

开环控制和闭环控制
开环控制:
在设计网络时,事先考虑周全,力求工作时不发生拥塞;
思路:力争避免发生拥塞。
闭环控制:
基于反馈环路的概念;
根据网络当前的运行状态采取相应控制措施;
思路:在发生拥塞后,采取措施进行控制,消除拥塞。

监测网络的拥塞
主要指标有:以下这些指标的上升都标志着拥塞的增长。
由于缺少缓存空间而被丢弃的分组的百分数;
平均队列长度;
超时重传的分组数;
平均分组时延;
分组时延的标准差,等等。

TCP拥塞控制的方法

3 计网 - 图73 计网 - 图8
注:真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)

慢开始(slow-start)
  • 目的:用来确定网络的负载能力或拥塞程度。
  • 算法的思路:由小到大逐渐增大拥塞窗口数值。
  • 两个变量:
    • 拥塞窗口(cwnd):初始拥塞窗口值:2 种设置方法。窗口值逐渐增大。
      • 1 至 2 个最大报文段 (旧标准)
      • 2 至 4 个最大报文段 (RFC 5681)
    • 慢开始门限(ssthresh):防止拥塞窗口增长过大引起网络拥塞。

3 计网 - 图9

横纵轴说明 传输轮次:

  • 发送方给接收方发送TCP数据报文段后,接收方给发送方发发回相应的TCP确认报文段
  • 一个传输轮次所经历的时间其实就是往返时间,往返时间并非是恒定的数值
  • 使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去,并受到了对已发送的最后一个报文段的确认

拥塞窗口 cwnd:

  • 它会随网络拥塞程度,以及所使用的拥塞控制算法动态变化

3 计网 - 图10
注:窗口大小按指数增加,2的n-1次方。

拥塞避免(congestion avoidance)

TCP的连接和释放

应用层