目录
第五章 运输层
5.1 运输层协议概述
运输层向他上面的应用层提供提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时,都要使用协议栈中的运输层。
真正进行通信的实体是主机中的应用进程。
运输层有一个很重要的功能——复用和分用。
运输层提供应用进程间的逻辑通信。
网络层为主机之间的通信提供服务,运输层则在网络层的基础上,为应用进程之间的通信提供服务。
运输层协议:
面向连接的传输控制协议TCP和无连接的用户数据报协议UDP。
按照 OSI 的术语,两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元TPDU。但在TCP/IP体系中,则根据所使用的协议是TCP或UDP,分别称之为TCP报文段或UDP用户数据报。
UDP和TCP区别:
UDP在传送数据之前不需要先建立连接。UDP 不提供可靠交付。高效率传输、实时性。
TCP则提供面向连接的服务。TCP不提供广播或多播服务。TCP 提供可靠的、面向连接的运输服务。
运输层的端口:
(1)服务器端使用的端口号。一类是熟知端口号或全球通用端口号,数值为0~1023。
另一类叫作登记端口号,数值为1024~49151。这类端口号是为没有熟知端口号的应用程序使用的。要使用这类端口号必须在IANA按照规定的手续登记,以防止重复。
(2)客户端使用的端口号。数值为49152~65535。由于这类端口号仅在客户进程运行时才动态选择,因此又叫作短暂端口号。这类端口号就是临时端口号。
5.2 用户数据报协议UDP
UDP的特点:
(1)UDP是无连接的。
(2)UDP使用尽最大努力交付。
(3)UDP是面向报文的。UDP一次交付一个完整的报文。应用层必须选择合适大小的报文。
(4)UDP没有拥塞控制。
(5)UDP支持一对一、一对多、多对一和多对多的交互通信。
(6)UDP的首部开销小。
UDP的首部格式:
(1)源端口 源端口号。在需要对方回信时选用。不需要时可用全0。
(2)目的端口 目的端口号。这在终点交付报文时必须使用。
(3)长度 UDP用户数据报的长度,其最小值是8(仅有首部)。
(4)检验和 检测UDP用户数据报在传输中是否有错。有错就丢弃。
5.3 传输控制协议TCP概述
TCP的特点:
(1)TCP是面向连接的运输层协议(三次握手)。
(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)。
(3)TCP提供可靠交付的服务。
(4)TCP提供全双工通信。
(5)面向字节流。TCP中的“流”指的是流入到进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
TCP连接是一条虚连接(也就是逻辑连接),而不是一条真正的物理连接。
TCP并不关心应用进程一次把多长的报文发送到TCP的缓存中,而是根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP发送的报文长度是应用进程给出的)。
TCP把连接作为最基本的抽象。
每一条TCP连接有两个端点。
套接字:端口号拼接到IP地址即为套接字。
套接字socket=(IP地址:端口号)。
5.4 可靠传输的工作原理
停止等待协议:
1.无差错情况
2.出现差错(A->B出错)
超时重传。
注意:
第一,A在发送完一个分组后,必须暂时保留已发送的分组的副本(在发生超时重传时使用)。
第二,分组和确认分组都必须进行编号。
第三,超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。
3.确认丢失和确认迟到(B->A出错)
B-->A的确认丢失,A重传M1,B再次收到M1.此时B应该:
(1)丢弃这个重复的分组M1,不向上层重复交付。
(2)向A发送确认。
像上述的这种可靠传输协议常称为自动重传请求ARQ。
连续ARQ协议:
连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
接收方一般都是采用累积确认的方式。这就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认。
5.5 TCP报文的首部格式
TCP首部的最小长度是20字节。
(1)源端口和目的端口 各占两个字节。
(2)序号 占4字节。序号范围是[0,-1],序号增加到
-1后,下一个序号就又回到0。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。首部中的序号字段值则指的是本报文段所发送的第一个字节的序号。
(3)确认号 占4字节,是希望收到对方下一个报文段的第一个数据字节的序号。
若确认号=N,则表明到序号N-1为止的所有数据都已正确收到。
(4)数据偏移 占4位,实际上是指出TCP报文段的首部长度,最大值是60字节。
(6)紧急URG 当URG=1时,说明紧急指针字段有效。当URG=1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面。
(7)确认ACK 仅当ACK=1时确认号字段才有效。
(8)推送PSH 接收方TCP收到PSH=1的报文段,就尽快地(推送向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
(9)复位RST 当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。
(10)同步SYN 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。SYN置为1就表示这是一个连接请求或者连接接受报文。
(11)终止FIN 用来释放一个连接。
(12)窗口 窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。窗口值作为接收方让发送方设置其发送窗口的依据。
窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化着。
(13)检验和 检验和字段检验的范围包括首部和数据两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
(14)紧急指针 紧急指针仅在URG=1时有意义,他指出本报文段中的紧急数据的字节数。紧急指针指出了紧急数据的末尾在报文段中的位置。
(15)选项 长度可变,最长40字节。
5.6 TCP可靠传输的实现
TCP的滑动窗口是以字节为单位的。
发送缓存用来暂时存放:
(1)发送应用程序传送给发送方TCP准备发送的数据:
(2)TCP已发送出但尚未收到确认的数据。
发送窗口通常只是发送缓存的一部分。发送缓存和发送窗口的后沿是重合的。
接收缓存用来暂时存放:
(1)按序到达的、但尚未被接收应用程序读取的数据;
(2)未按序到达的数据。
注意:
第一,在同一时刻,A的发送窗口并不总是和B的接收窗口一样大。
第二,对于不按序到达的数据应如何处理,TCP标准并无明确规定。TCP通常是把不按序到达的数据先临时在放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
第三,TCP要求接收方必须有累积确认的功能,这样可以减小传输开销。TCP标准规定,确认推迟的时间不应超过0.5秒。
最后再强调一下,TCP的通信是全双工通信。
5.7 TCP的流量控制
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
发送方的发送窗口不能超过接收方给出的接收窗口的数值。TCP的窗口单位是字节,不是报文段。
TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段。
5.8 TCP的拥塞控制
拥塞控制的一般原理:
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制所要做的都有一个前提,就是网络能承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
流量控制往往是指点对点通信量的控制,是个端到端的问题。
拥塞控制是很难设计的,因为它是一个动态的问题。
分组的丢失是网络发生拥塞的征兆而不是原因。
在很多情况下,甚至正是拥塞控制机制本身成为引起网络性能恶化甚至发生死锁的原因。
拥塞控制可以分为开环控制和闭环控制两种方法。
开环控制就是在设计网络时事先将发生拥塞的有关因素考虑周到,力求网络在工作时不产生拥塞。但一旦整个系统运行起来,就不再中途进行改正了。
闭环控制是基于反馈环路的概念,主要有以下几种措施:(1)监测网络系统以便检测到拥塞在何时、何处发生。(2)把拥塞发生的信息传送到可采取行动的地方。(3)调整网络系统的运行以解决出现的问题。
拥塞控制算法:
1.慢开始和拥塞避免
发送方维持一个叫做拥塞窗口cwnd的状态变量。
发送方在①重传计时器超时②收到三个相同(重复)ACK时就判断网络出现了拥塞。
真正的发送窗口值=Min[接收窗口值,拥塞窗口值]。
慢开始门限ssthresh用法如下:
发送方只要一连收到3个重复确认,就可知道现在并未出现网络拥塞,只是接收方少收到一个报文段,因而立即进行重传(“快重传”)。
5.9 TCP的运输连接管理
运输连接有三个阶段:连接建立、数据传送和连接释放。
TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫做客户,被动等待连接建立的应用进程叫做服务器。
TCP的连接建立(三次握手)
TCP的连接释放(四次挥手)