第五章 运输层

 

 

运输层协议概述

运输层为应用层进程之间的通信提供服务。

运输层是用户功能中的最低层,面向通信部分的最高层(由下至上:物理层,数据链路层,网络层,运输层)。

区分:运输层提供应用进程间的逻辑通信;网络层为主机之间的通信服务

运输层的两个主要的协议:

用户数据报协议UDP;传输控制协议TCP。

运输协议数据单元是指两个对等运输实体在通信时传送的数据单位TPDU。TCP传送的协议数据单元是TCP报文段,UDP传送的协议数据单元是UDP用户数据报(不同于IP数据报)。物理层传送的协议数据单元是比特;数据链路层传送的协议数据单元是帧;网络层传送的协议数据单元是IP数据报或分组。

UDP和TCP的区别:                                                                                                                                   UDP传送数据前不需要先建立连接。收到UDP报文后下,不需要给出任何确认。不提供可靠交付,但是是一种最有效的工作方式,适用于直播通信。                                                                          TCP提供可靠的,面向连接的运输服务,不提供广播或多播服务,开销比较多,提供一对一的单播协议。

使用UDP和TCP的典型应用和应用层协议:

运输层的端口:

在运输层使用协议端口号,通常简称为端口。把端口设为通信的抽象终点。

TCP/IP运输层端口的标志:                                                                                                                端口用一个16位端口号进行标志,允许有65536个不同的端口号。端口号只具有本地意义,只是为了标志本计算机应用层中的各进程,在互联网中不同计算机的相同端口号没有联系。

 

常用熟知端口(背!会考!):

用户数据报协议UDP

UDP只在IP的数据报之上增加了一些功能:复用和分用;差错检测。

复用:将UDP用户数据报组装成不同的IP数据报发送到互联网;                                                      分用:根据UDP用户数据报首部中的目的端口号,将数据报分别传送到相应的端口,以便应用进程到端口读取数据。

UDP的主要特点:

  • 无连接,发送数据前不需要建立连接。
  • 使用尽最大努力交付,即不保证可靠交付。
  • 面向报文,UDP一次传送和交付一个完整的报文。发送方UDP对应用层交下来的报文既不合并也不拆分,按照原样发送;接收方UDP对IP层交上来的UDP用户数据报去除首部后就原封不动地交付上层应用进程,一次交付一个完整的报文。
  • 没有拥塞控制:网络出现的拥塞不会使源主机的发送速率降低,很适合多媒体通信的要求。
  • 支持一对一,一对多,多对一,多对多等交互通信。
  • 首部开销小,只有8个字节。
  • 简单方便但不可靠。

 UDP的首部格式:

  •  源端口:源端口号,在需对方回信时使用,不需要时可用全0;
  • 目的端口:目的端口号,终点交付报文时必须使用;(学会根据源端口和目的端口判断时客户端发给服务器端还是服务器端发给客户端,服务器端0~49151,客户端49152~65535) 
  • 长度:UDP用户数据报的总长度,最小为8(仅有首部);
  • 检验和:检测UDP整个用户数据报在传输中是否有错,有就丢弃。

可靠传输

在理想传输条件下,不需要采取任何措施就能够实现可靠传输。但实际网络都不具备理想传输条件,必须使用一些可靠传输协议,在不可靠的传输信道实现可靠传输。

理想传输条件的特点:

  • 传输信道不产生差错
  • 不管发送方以多块的速度发送数据,接收方总是来得及处理收到的数据

停止等待协议(自动的ARQ自动重传请求):

早期的网络链路非常不可靠,该协议为数据链路层的一个协议,现在的网络里不再使用。

每发送完一个分组就停止发送,等待对方确认。在收到确认后再发送给下一个分组。全双工通信的双方既是发送方也是接收方。假设仅考虑A发送数据,而B接收数据并发送确认,因此A叫做发送方,B叫做接收方。

无差错情况:

 

出现差错的情况:

1.B接收M1时检测出了差错,就丢弃M1,其他什么也不做,不通知A收到有差错的分组;        2.M1在传输过程中丢失了,这时B什么也不知道什么也不做。                                                       这两种情况下B不会发送任何信息。

A如何知道B是否正确收到了M1呢?超时重传:A为每一个已发送的分组设置一个超时计时器,A只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组M2,若A在超时计时器规定时间内没有收到B的确认,就认为分组错误或丢失,就重发该分组。

“确认丢失”:若B所发送的对M1的确认丢失了,那么A在设定的超时重传时间内不会收到确认,因此A在超时计时器到期后重传M1.假定B收到了A重传的分组,这时B应采取两个行动:丢弃这个重复分组M1,不向上层交付;向A发送确认。

停止等待协议的信道利用率:当往返时间RTT远远大于分组发送时间TD时,信道利用率会非常低

 

 提高传输效率:流水线传输,在收到确认之前,发送发连续发出多个分组。连续ARQ协议和滑动窗口协议采用流水线传输方式

连续ARQ协议:

发送窗口:发送方维持一个发送窗口,位于发送窗口内的分组都可被连续发送出去,而不需要等待对方的确认。

发送窗口滑动:发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

累计确认:接收方对按需到达的最后一个分组发送确认,表示:到这个分组为止的所有分组都已正确收到了。

 

 累计确认优点:容易实现,即使对某个分组的确认丢失也不用重传。缺点:不能向发送方反映出接收方已经正确收到的所有分组

 连续ARQ协议采用Go-Back-N(回退N):表示需要再退回来重传已发送过的N个分组。当通信线路质量不好时,连续ARQ协议会带来负面影响。

传输控制协议TCP

TCP概述

TCP是面向连接的运输层协议,在无连接的,不可靠的IP网络服务之上提供可靠交付的服务。为此在IP的数据报服务基础之上增加了保证可靠性的一些列措施。

TCP最主要的特点:

  • TCP是面向连接的运输层协议;
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的;
  • TCP提供可靠交付的服务
  • TCP提供全双工通信
  • 面向字节流:TCP中的流指流入或流出进程的字节序列,虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据报看成仅仅是一连串的无结构的字节流。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。

TCP的连接:

TCP把连接作为最基本的抽象。TCP连接的端点称为套接字或插口,套接字=(IP地址:端口号)

同一个IP地址可以有多个不同的TCP连接(一台主机同时访问多台服务器),同一个端口号也可以出现在多个不同的TCP连接中。

TCP报文段的首部格式

TCP虽然是面向字节流的,但TCP传输的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它的首部中各字段的作用。

TCP报文段首部的前20个字节是固定的,后面有4n字节是根据需要而增加的选项。因此,TCP首部的最小长度是20字节。

 源端口和目的端口:各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能通过端口实现。

序号:占4字节。TCP连接中传送的数据流中的每一个字节都有一个序号,序号字段的值则指的是本报文段所发送的数据第一个字节的序号。

确认号:占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号=N,则表明到序号N-1为止的所有数据都已正确收到。

数据偏移(即首部长度):占4位,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。以4字节为计算单位。

保留:占6位,保留为今后使用,目前应置为0。

紧急位URG:控制位,当URG = 1时,表明紧急指针字段有效,告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

确认ACK:控制位。只有当ACK = 1时,确认号字段才有效。当ACK=0时,确认号无效。

推送PSH:控制位。接收TCP收到PSH=1的报文段后,就尽快(即“推送”前进)交付接收应用进程,而不再等到整个缓存都填满后再交付。

复位RST:控制位。当RST = 1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。

同步SYN:控制位。SYN = 1表示这是一个连接请求或连接接收报文段。SYN=1,ACK=0表明这是一个连接请求报文段;SYN=1,ACK=1表明这是一个连接接收报文段。

终止FIN:控制位。用来释放一个连接。FIN=1表明此报文段的发送端的数据已发送完毕,并要求释放运输链接。

窗口:占2字节。窗口值告诉对方:从本报文段首部的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。窗口值经常在动态变化。

检验和:占2字节。检验和字段检验的范围包括首部和数据两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

紧急指针:占2字节。在URG=1时,指出本报文段中的紧急数据的字节数,指出了紧急数据的末尾在报文段中的位置。

选项:长度可变,最长可达40字节。TCP最初只规定了指一种选项,即最大报文段长度MSS。MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字段”。MSS是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段,所以MSS是“TCP报文段长度减去TCP首部长度”。MSS不能太小,否则网络利用率低;不能太大,否则开销增大,IP层传输时要分片,终点要重组,分片传输出错时要重传整个分组。MSS应尽可能的大,只要在IP层传输时不在分片。默认值是536个字节,互联网上所有主机都必须能接收不超过576字节的数据报。

TCP可靠传输的实现

  • TCP连接的每一端都必须设有两个窗口:一个发送窗口和一个接收窗口;
  • TCP的可靠传输机制用字节的序号进行控制。TCP所有的确认都是基于字节序号而不是基于报文段;
  • TCP两端的四个窗口经常处于动态变化之中;
  • TCP连接的往返时间RTT也不是固定不变的,需要使用特定的算法估算较为合理的重传时间。

以字节为单位的滑动窗口:

  • TCP使用流水线传输和滑动窗口协议实现高效、可靠传输。
  • TCP的滑动窗口是以字节为单位的。
  • 发送方A和接收方B分别维持一个发送窗口和一个接收窗口(共4个)。
  • 发送窗口:在没有收到确认的情况下,发送方可以连续把窗口内的数据全部发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。
  • 接收窗口:只允许接收落入窗口(范围)内的数据。

发送窗口:

A根据B给出的窗口值及ack,构造出自己的发送窗口(暂时不考虑拥塞)。发送窗口里面的序号表示允许发送的字节的序号。窗口越大,发送方就可以在收到对方确认之前连续发送更多的数据,因而可能获得更高的传输效率。

 A未收到确认的原因有:B未发送;B已发送但还未到达A。为保证可靠传输,A只能认为B还没有收到这些数据。A经过一段时间后(由超时计时器控制)就重传这部分数据,重新设置超时计时器,直到收到B的确认为止。如果A按序收到落在发送窗口内的确认号,就使发送窗口向前滑动,并发送新的数据。

发送缓存与发送窗口:发送方的应用进程把字节流写入TCP发送缓存。暂时存放发送应用程序传送给发送方TCP准备发送的数据和TCP已发送但尚未收到确认的数据。发送窗口通常只是发送缓存的一部分。缓存中的字节数 = 发送应用程序最后写入缓存的字节序号 - 最后被确认的字节序号(比确认号小1)。

 接收缓存与接收窗口:接收方的应用进程从TCP接收缓存中读取尚未被读取的字节。暂时存放按序到达但尚未被应用程序读取的数据和为按序到达的数据。

 强调:

  • 发送窗口是根据接收窗口设置的,但在同一时刻,发送窗口并不总是和接收窗口一样大,因为有一定的时间滞后。
  • TCP标准没有规定对不按序到达的数据应如何处理,通常是先临时存放在接收窗口中,等到字节流所缺少的字节收到后,再按序交付上层的应用进程。
  • TCP要求接收方必须有累计确认的功能,以减小传输开销,接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。但接收方不应过分推迟发送确认,否则会导致发送方不必要的重传,捎带确认实际上并不经常发生。

超时重传时间的选择:

TCP发送方在规定的时间内没有收到确认就要重传已发送的报文段。但重传时间的选择是TCP最复杂的问题之一。互联网环境很复杂,IP数据报所选择的路由变化很大,导致运输层的往返时间RTT的变化也很大。

不能太短,否则会引起很多报文段的不必要重传,使网络负荷增大;不能过长,会使网络的空闲时间增大,降低了传输效率。

 

选择确认SACK:

若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,使用选择确认SACK告知发送方只传送缺少的数据。

TCP流量控制

利用滑动窗口实现流量控制:

流量控制:让发送方的发送速率不要太快,使接收方来得及接受。利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

持续计时器:只要TCP连接的一方收到对方的零窗口通知,就启动该持续计时器。若持续计时器的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),对方在确认这个探测报文段时给出当前窗口值。若窗口仍然是零,收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。

TCP的传输效率:

控制TCP发送报文段的时机:三种机制

  1. TCP维持一个变量,它等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去。
  2. 由发送方应用进程指明要求发送报文段,即TCP支持的推送操作。
  3. 发送方的一个计时期限到了,这时就把当前已有的缓存数据装入报文段(长度不超过MSS)发送出去。

发送方糊涂窗口综合征:发送方TCP每次接收到一字节的数据后就发送。发送一个字节需要形成41字节长的IP数据报,效率很低。解决方法:使用Nagle算法。

接收方糊涂窗口综合征:让接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。只要出现这两种情况之一,接收方就发出确认报文,并向发送方通知当前窗口的大小。 

上述两种方法可配合使用,使得在发送方不发送很小的报文段的同时,接收方也不要在缓存刚有了一点小的空间就急忙把这个很小的窗口大小信息通知给发送方。

TCP拥塞控制

拥塞控制的一般原理

在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。这种现象称为拥塞。最坏的结果系统崩溃。

拥塞产生的原因:由许多因素引起,如结点缓存容量太小;链路容量不足;处理机处理速率太慢;拥塞本身会进一步加剧拥塞。总结起来就是对资源总的需求 > 可用资源。增加资源不能解决拥塞,还可能使网络的性能更坏。

拥塞控制与流量控制的区别:拥塞控制的定义是防止过多的数据注入到网络中,避免网络中的路由器或链路过载。拥塞控制是一个全局性的过程,涉及到所有主机、路由器,以及与降低网络传输性能有关的所有因素。流量控制是抑制发送端发送数据的速率,以使接收端来得及接收。流量控制是点对点通信量的控制,是个端到端的问题。

 开环控制:在设计网络时,事先考虑周全,力求工作时不发生拥塞。力争避免发生拥塞。但一旦这个系统运行起来就不再中途进行改正了。

闭环控制:基于反馈环路的概念。根据网络当前运行状态采取相应控制措施。在发生拥塞后采取措施进行控制,减少拥塞。

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

调整:调整过于频繁,会使系统产生不稳定的振荡;过于迟缓不具有任何实用价值。选择正确的时间常数是相当困难的。

TCP的拥塞控制方法

TCP采用基于滑动窗口的方法进行拥塞控制,属于闭环控制方法。TCP发送方维持一个拥塞窗口cwnd。拥塞窗口的大小取决于网络的拥塞程度,并且是动态变化的。发送端利用拥塞窗口,根据网络的拥塞情况调整发送的数据量。发送窗口大小不仅取决于接收方窗口,还取决于网络的拥塞状况。真正的发送窗口值 = Min(接收方通知的窗口值,拥塞窗口值)。

控制拥塞窗口变化的原则:只要网络没有出现拥塞,拥塞窗口就可以再增大一些,以便把更多的分组发送出去,提高网络的利用率。但只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,缓解网络出现的拥塞。

发送方判断拥塞的方法:隐式反馈。超时重传计时器超时表明网络已经出现了拥塞;收到3个重复的确认预示网络可能会出现拥塞。因为传输差错而丢弃分组的概率很小,因此发送方在超时重传计时器启动时就判断网络出现了拥塞。

TCP拥塞算法控制:

慢开始:

  • 目的:探测网络的负载能力或拥塞控制程度。
  • 算法:由小到大逐渐增大注入到网络中的数据字节,即由小到大逐渐增大拥塞窗口数值。
  • 两个控制变量:拥塞窗口cwnd,初始值为1至2个最大报文段MSS;慢开始门限ssthresh,防止拥塞窗口增长过大引起网络拥塞。
  • 拥塞窗口cwnd增大:在每收到一个对新的报文段的确认,就把拥塞窗口增加最多一个发送方的最大报文段SMSS的数值。每经过一个传输轮次,拥塞窗口就加倍,2^(n-1),n为发送次数。
  • 慢开始门限ssthresh:防止拥塞窗口cwnd增长过大引起网络拥塞。cwnd < ssthresh时使用慢开始算法;cwnd > ssthresh时停止使用慢开始算法,改用拥塞避免算法;cwnd = ssthresh时既可以使用慢开始算法,也可以使用拥塞避免算法。

拥塞避免:

  • 目的:让拥塞窗口cwnd缓慢地增大,避免出现拥塞。
  • 拥塞窗口cwnd增大:每经过一个往返时间RTT(不管在此期间收到了多少确认),发送方的拥塞窗口cwnd=cwnd+1.
  • 具有加法增大AI特点,使拥塞窗口cwnd按线性规律缓慢增长。
  • 拥塞避免并非完全避免拥塞,而是让拥塞窗口增长的缓慢些,使网络不容易出现拥塞。

当网络出现拥塞时:无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(重传定时器超时),①ssthresh = cwnd/2;②cwnd = 1;③执行慢开始算法。目的是迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

 快重传算法:

  • 目的:让发送方尽早知道发生了个别报文段的丢失。
  • 发送方只要连续收到三个重复的确认,就立即重传(即快重传),这样就不会出现超时(如果超时cwnd = 1)。
  • 使用快重传可以使整个网络的吞吐量提高20%。
  • 快重传算法要求接收方立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
  • 快重传并非取消重传定时器,而是在某些情况下可以更早的(更快的)重传丢失的报文段。

快恢复算法:

  • 发送端收到连续三个重复的确认时,不执行慢开始算法,而是执行快恢复算法。
  • 慢开始门限ssthresh = 当前拥塞窗口cwnd / 2;
  • 乘法减小MD拥塞窗口:新拥塞窗口 = 慢开始门限ssthresh;
  • 执行拥塞避免算法,使拥塞窗口缓慢的线性增大。

二者合在一起就是AIMD算法,使TCP性能有明显改进。

主动队列管理AQM

 TCP拥塞控制和网络层采取的策略有密切联系。例如:若路由器对某些分组的处理时间特别长,就可能引起TCP超时,对某些报文段进行重传。重传会使TCP连接的发送端认为在网络中发生了拥塞,但实际上网络并没有发生拥塞。对TCP拥塞控制影响最大的就是路由器的分组丢弃策略。

“先进先出”FIFO处理规则:尾部丢弃策略。当队列已满时,以后到达的所有分组(如果能够继续排队,这些分组都将排在队列的尾部)将都被丢弃。路由器的尾部丢弃往往会导致一连串分组的丢失,这就使发送方出现超时重传,使TCP进入拥塞控制的慢开始状态,结果使TCP连接的发送方突然把数据的发送速率降低到很小的数值。

主动管理队列AQM:不要等到路由器的队列长度已经达到最大值时才不得不丢弃后面到达的分组,而是在队列长度已经到达某个值得警惕的数值时(即当网络拥塞有了某些拥塞征兆时),就主动放弃到达的分组。AQM可以有不同实现方法,其中曾流行多年的就是随即早期检测RED。

 RED对每一个到达的分组都先计算平均队列长度L(AV)。L(AV) < Th(min)时丢弃概率p = 0;L(AV) > Th(max)时丢弃概率p = 1,Th(min) <= L(AV) <= Th(max)时丢弃概率p:0 < p < 1。

TCP的运输连接管理

TCP是面向连接的协议。TCP链接有三个阶段:1.连接建立;2.数据传送;3.连接释放。TCP连接管理就是使TCP连接的建立和释放都能正常地运行。

TCP连接建立过程中要解决地三个问题:要使每一方能够确认对方的存在;要允许双方协商一些参数(如最大窗口值,是否使用窗口扩大选项和时间戳选项以及服务质量等);能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

TCP连接的建立采用客户服务器方式。主动发起连接建立地应用进程叫做客户,被动等待连接建立地应用进程叫做服务器。

TCP的连接建立

TCP建立连接的过程叫做握手。采用三报文握手:在客户和服务器之间交换三个TCP报文段,以防止已失效地连接请求报文段突然又传送到了,因而产生TCP连接建立错误。

 

TCP的连接释放

TCP连接释放过程比较复杂。数据传输结束后,通信的双方都可释放连接。TCP连接释放过程是四报文握手。

 

保活计时器:用来防止TCP连接出现长时期空闲。通常设置2小时。若服务器过了2小时还没有收到客户的信息,它就发送探测报文段。若发送了10各探测报文段(每一个间隔75秒)还没有响应,就假定客户出了故障,因而终止该连接。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值