1、第5章 传输层,第5章 传输层,5.1 传输层的基本功能5.2 用户数据报协议UDP5.3 可靠传输原理5.4 传输控制协议TCP5.5 TCP可靠传输机制5.6 TCP流量控制机制5.7 TCP拥塞控制机制5.8 TCP计时器管理 5.9 TCP连接管理,5.1传输层的基本功能,5.1.1 传输层概述5.1.2 传输层与上下层的关系5.1.3 端口的概念5.1.4 网络环境中的应用进程的标识,5.1.1传输层概述,网络层及以下的各层实现了网络中主机之间的数据通信,实现了IP数据报从一个网络终端到另一个网络终端的的传输功能。但人们最终的网络应用方式并不是主机到主机的IP分组传输,而是实现两端主
2、机上两个通信应用进程之间端到端的远程通信。如下图所示。,通过IP分组端到端的传输功能并不能直接提供两个应用进程之间的通信,主要原因如下:1)只能通过IP数据报的目的IP地址将其正确传输到某个物理终端,但无法通过目的IP地址将其正确地传送给对应的应用进程。2)IP数据报在传输过程中,每一跳路由器只检验它的首部,并不检查其数据字段,因此,即使数据报中的数据在传输过程中出错,网络层是既不知晓,也不作任何处理。网络层并不提供任何有关传输可靠性的功能,只是一种不可靠的、尽最大努力交付的数据报服务。3)网络层无论在传输IP数据报前,还是在传输的过程中均不会对双方终端的状态及互连双方终端的互连网络的状态进行
3、监测。,必须在应用进程和网络层之间引入一个功能层,实现以下功能。1)提供用于鉴别应用进程的信息,使其和IP地址一起实现应用进程之间的通信,而不是终端主机之间的通信。2)实现两个应用进程之间的可靠传输。3)根据双方终端的状态及互连双方终端的互联网络的状态及时调整两个应用进程之间的通信过程。,该层叫做传输层,其提供的功能有端口、差错控制、流量和拥塞控制等。TCP/IP协议结构中,用作传输层的协议有两个,分别:是用户数据报协议UDP(User Datagram Protocol)传输控制协议TCP(Transmission Control Protocol)其结构如下图所示。,传输层是网络协议体系结
4、构中最复杂一层。它提供应用进程之间端到端的交换数据的机制。它屏蔽了网络层及以下各层实现技术的差异性,弥补网络层所能提供的服务的不足,使得应用层在完成各种网络应用系统时只需要使用传输层提供的端-端进程通信服务,而不需要考虑互联网络数据传输的细节问题。,5.1.2 传输层与上下层的关系,传输层的最高目标是向用户(一般指应用进程)提供有效、可靠且价格合理的服务。为了达到这一目标,传输层需要使用网络层所提供的服务。传输层完成这一工作的硬件和软件称为传输实体(Transport Entity)。传输实体可能在操作系统内核中,或在一个单独的进程内,也可能包含在网络应用的程序库中,或是位于网络接口卡上。网络
5、层、传输层和应用层的逻辑关系如图所示。,5.1.3 端口的概念,IP数据报中包含源和目的IP地址。 传输层利用端口是来标识应用层的不同进程。 两个应用进程进行通信,不但要知道双方的IP地址,还要知道双方的端口号。,传输层与应用层的接口上用一个16位的地址来表示端口号。端口号用来标识本计算机应用层中的各进程。16位的端口号可允许有216个端口号,因此可以标识本地216个不同的应用进程。端口号必须要具有本地唯一性,即同一个物理终端上运行的两个应用进程必须具有不同的端口号。,一些常用服务器进程的端口号是固定不变的,这些端口被称为熟知端口(well-known port),如下表所示。 除了熟知的端口
6、号,还有注册端口号和临时端口号。,1)熟知端口。范围01023,由ICANN分配控制,不能占用。TCP/UDP给每种服务器程序分配确定的全局端口号,每个客户进程都知道相应的服务器进程的熟知端口号。2)注册端口。范围102449151,ICANN不分配也不控制,可在ICANN注册以防重复。3)临时端口。范围4915265535,这一范围的端口号既不受控制又不需要注册,可以由任何进程使用。客户机程序使用临时端口号,它是由运行在客户机上的TCP/UDP软件随机选取的。,为了在通信时不致发生混乱,必须把端口号和主机的IP地址结合在一起使用。因此,TCP使用“连接”(而不仅仅是“端口”)作为最基本的抽象
7、。一个连接由它的两个端点来标识。这样的端点叫做插口(socket)或套接字。 插口包括IP地址(32 bit)和端口号(16 bit),共48 bit。在整个因特网中,在运输层通信的一对插口必须是惟一的 插口和端口、IP地址的关系如下图所示。,5.1.4 网络环境中的应用进程的标识,TCP/IP协议传输层的寻址方式是通过TCP和UDP的端口来实现的。为了区别不同的网络应用程序,TCP与UDP协议规定用不同的端口号来表示不同的应用程序。,5.2 用户数据报协议UDP,5.2.1 UDP概述5.2.2 UDP数据报格式5.2.3 UDP的主要特点5.2.4 UDP应用实时传输协议,5.2.1 UD
8、P概述,用户数据报协议UDP是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议的主要特征是简单,快捷,UDP协议只能提供端口形式的传输层寻址与一种可选的检验和功能。,UDP是一种面向报文的传输层协议,UDP对于应用程序提交的报文,仅在添加了UDP协议头部构成了一个传输协议数据单元TPDU之后就向下提交给IP层。UDP对应用程序提交的报文既不合并也不拆分,而是保留原报文的长度和格式。 UDP不提供数据报分段、组装,也不提供排序功能,当报文发送之后,是无法得知其是否安全完整到达的。 UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/
9、服务器模式的网络应用都需要使用UDP协议。,5.2.2 UDP数据报格式,用户数据报UDP的首部字段很简单,只有8个字节,由4个字段组成,每个字段都是两个字节。结构如下图所示。,各字段意义如下:1)端口号:包括16位的源端口号和目的端口号。2)长度字段:指整个UDP数据报的长度。3)检验和字段(可选项):防止UDP用户数据报在传输中出错。用来检验整个用户数据报(包括报头)在传输中是否出现差错,UDP校验和包括三个部分:伪报头、UDP报头和应用层数据。在计算检验利时在UDP用户数据报之前要增加12个字节的伪首部。伪首部并不是UDP用户数据报真正的首部。只是在计算检验和时,临时和UDP用户数据报连
10、接在一起。伪首部既不向下传送,也不向上递交。,使用伪首部是为了验证UDP数据报是否传送到正确的目的进程。UDP数据报的目标地址应该包括两部分:目的主机IP和目的端口号。UDP数据报本身只包含目的端口号,由伪报头补充目的主机的IP地址部分。UDP伪报头来自于IP报头,因此在计算UDP校验和之前,UDP首先必须从IP层获取有关信息。UDP数据报发送方、接收方计算校验和时都加上伪报头信息。假如接收方检查校验和后正确,则在一定程度上说明UDP数据报到达了正确主机上的正确端口。在UDP/IP协议结构中,UDP校验和是保证数据正确性的唯一手段。,伪首部,源端口,目的端口,长 度,检验和,数 据,首 部,U
11、DP长度,源 IP 地址,目的 IP 地址,0,17,IP 数据报,字节,4,4,1,1,2,12,2,2,2,2,字节,发送在前,数 据,首 部,UDP 用户数据报,伪首部,源端口,目的端口,长 度,检验和,数 据,首 部,UDP长度,源 IP 地址,目的 IP 地址,0,17,IP 数据报,字节,4,4,1,1,2,12,2,2,2,2,字节,发送在前,数 据,首 部,UDP 用户数据报,用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。,伪首部,源端口,目的端口,长 度,检验和,数 据,首 部,UDP长度,源 IP 地址
12、,目的 IP 地址,0,17,IP 数据报,字节,4,4,1,1,2,12,2,2,2,2,字节,发送在前,数 据,首 部,UDP 用户数据报,在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。,计算 UDP 检验和的例子,10011001 00010011 153.1900001000 01101000 8.10410101011 00000011 171.300001110 00001011 14.1100000000 00010001 0 和 1700000000 00001111 1500000100 00111111 10870000000
13、0 00001101 1300000000 00001111 1500000000 00000000 0(检验和)01010100 01000101 数据01010011 01010100 数据01001001 01001110 数据01000111 00000000 数据和 0(填充)10010110 11101101 求和得出的结果01101001 00010010 检验和,153.19.8.104,171.3.14.11,12 字节伪首部,8 字节UDP 首部,7 字节数据,按二进制反码运算求和将得出的结果求反码,全 0 17 15 1087 13 15 全 0数据 数据 数据 数据数据
14、 数据 数据 全 0,请注意:进行反码运算求和时,最高位有进位 2,这个 2 应当加到最低位。,5.2.3 UDP的主要特点,用户数据报协议UDP只在IP的数据报服务之上增加了端口和无差错检测的功能。虽然UDP用户数据报只能提供不可靠的交付,但UDP在某些方面有其特殊的优点,例如: 1)发送数据之前不需要建立连接,因而减少了开销和发送数据之前的时延。 2) UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持具有许多参数的、复杂的连接状态表。 3)UDP用户数据报只有8个字节的首都开销,比TCP的20个字节的首部要短。,4 )由于UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发
15、送速率降低。这对某些实时应用是很重要的。5)吞吐量不受拥塞控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。,5.2.4 UDP应用,虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议RIP中封装路由数据包。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。,UDP广泛用在多媒体应
16、用中。如,大多数因特网电话软件产品都运行在UDP之上。实时传输中应用需要对UDP的不可靠传输进行适当的改进以减少数据的丢失。在这种情况下,应用进程本身可在不影响应用的实时性的前提下增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文。,5.2.5可靠传输原理,在传输层,可靠传输包括四个方面的内容:差错控制顺序控制丢失控制重复控制,(1)差错控制网络必须能将数据正确无误地从源端传送到目的端。但是,数据在传输过程中可能会发生错误。因此,必须采取差错控制措施,保证数据的可靠传输。处理机制差错检测数据重传,(2)顺序控制在发送方,传输层将其从上层接收的数据单元送入其下层。在接收方,传输层能将一次
17、传输的不同数据段按时间的顺序送到其上层。实现机制分段与重组 序号,(3)丢失控制当数据被分段传输时,一段可能在传输的过程中被丢失。传输层协议需要确保一次通信的所有段都会到达目的地。处理机制接收方传输层协议根据序号检测出丢失的段,并要求发送方重传。,(4) 重复控制传输层协议需要保证任何一个数据段都不会重复发送给接收目标。处理机制传输层协议根据序号能够检测重复的段并丢弃。,5.4 传输控制协议TCP,5.4.1 TCP概述5.4.2 TCP数据段格式5.4.3 TCP的主要特点,5.4.1 TCP概述,TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,它在不可靠的网络服务上提供可靠的、
18、面向连接的端到端传输服务。,TCP采用套接字(Socket)机制创建和管理连接。TCP连接是全双工的。 TCP连接的两端主机都可以同时发送和接收数据。由于TCP支持全双工的数据传输服务,这样确认可以在反方向的数据流中传输。TCP连接是点对点的。TCP连接只发生在两个进程之间,一个进程发送数据,同时另一个进程接收数据,因此TCP不支持广播和多播。,TCP连接是面向字节流的。TCP实体可以根据需要合并或分解应用进程数据。 由于发送进程和接收进程产生和消耗的速度并不一样,因此TCP需要缓存来存储数据。在每一个方向上都有缓存,即发送缓存和接收缓存。另外,在发送数据前还需要将字节流分割成报文段,报文段的
19、长度可以是不等的。,5.4.2 TCP数据段格式,一个TCP报文段分为首部和数据两部分,如下图所示。,TCP首部,20 字节的固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,32 bit,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,TCP 数据部分,TCP 首部,TCP 报文段,IP 数据部分,IP 首部,发送在前,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认
20、 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,源端口和目的端口字段各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,序号字段占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
21、。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,确认号字段占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,数据偏移占 4 bi
22、t,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位不是字节而是 32 bit 字(4 字节为计算单位)。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,保留字段占 6 bit,保留为今后使用,但目前应置为 0。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确
23、认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,紧急比特 URG 当 URG 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,确认比特 ACK 只有当 ACK 1 时确认号字段才有效。当 ACK 0 时,确认号无效。,TCP首部,20字节固定首
24、部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,推送比特 PSH (PuSH) 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24
25、 31,填 充,复位比特 RST (ReSeT) 当 RST 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,同步比特 SYN 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变)
26、,源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,终止比特 FIN (FINal) 用来释放一个连接。当FIN 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,窗口字段 占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节
27、。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,检验和 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,
28、序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,紧急指针字段 占 16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,选项字段 长度可变。TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MS
29、S 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”,MSS 是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。,TCP首部,20字节固定首部,目 的 端 口,数据偏移,检 验 和,选 项 (长 度 可 变),源 端 口,序 号,紧 急 指 针,窗 口,确 认 号,保 留,FIN,SYN,RST,PSH,ACK,URG,比特 0 8 16 24 31,填 充,填充字段 这是为了使整个首部长度是 4 字节的整数倍。,5.4.3 TCP的主要特点,TCP协议的特点主要表现:1)支持面向连接的传输服务UDP是一种可
30、实现最低传输要求的传输层协议,而TCP则是一种功能完善的传输层协议。面向连接对提高系统数据传输的可靠性是很重要的。应用程序在使用TCP传输数据之前,必须在源进程端口与目的进程端口之间建立一条传输连接。每个TCP连接唯一地使用双方插口号来标识,因此每个TCP连接为通信双方的一次进程通信提供服务。,2) 支持字节流的传输TCP协议建立在不可靠的网络层IP协议之上,IP协议不能提供任何可靠性机制,因此TCP的可靠性完全由自己来实现。由于TCP在传输过程中将应用程序提交的数据看成是一连串的、无结构的字节流,因此接收方应用程序数据字节的起始与终结位置必须由应用程序自己确定。,3)支持全双工服务TCP运行
31、通信双方的应用程序在任何时候都可以发送数据。通信双方都设置有发送和接收缓冲区,应用程序将要发送的数据字节提交给发送缓冲区,数据字节的实际发送过程由TCP协议来控制,而接收方在接收到的数据字节之后也将它存放到接收缓冲区,高层应用程序在它合适的时间到缓冲区中读取数据。,4)支持同时建立多个并发的TCP连接TCP协议支持同时建立多个连接,这个特点在服务器端表现最突出。根据应用程序的需要,TCP协议支持一个服务器与多个客户端同时建立多个TCP连接,也支持一个客户端与多个服务器同时建立多个TCP连接。TCP软件将分别管理多个TCP连接。在理论上,TCP协议可以支持同时建立的上百个甚至上千个这样的连接,但
32、是建立并发连续的数量越多,每条连接共享的资源就会越少。,5)支持可靠传输服务TCP是一种可靠的传输服务协议,它使用确认机制检查数据是否安全、完整地到达、并且提供拥塞控制功能。TCP支持可靠数据通信的关键是对发送和接收的数据字节进行追踪、确认与重传。TCP协议建立在不可靠的网络层IP协议之上,一旦IP协议以及以下层出现传输错误,TCP协议只能进行重传,试图弥补传输过程中出现的问题。因此,传输层传输的可靠性是建立在网络基础上的,同时也会受到它的限制。,5.5 TCP可靠传输机制,TCP发送的报文段是交给IP层传送的。但IP层的网络是分组交换网,只能提供尽最大努力服务,是不可靠的传输。因此,TCP必
33、须采用适当的措施才能使得两个传输层之间的通信变得可靠。TCP可靠传输的目的就是为了保证接收端能够正确、按序地向应用进程提交TCP报文。为了实现这一目标,TCP采用分段、确认应答和重传这三种机制。,(1)分段发送端TCP进程对传输给接收端TCP进程的一串字节流中的每一个字节都分配一个序号,接收端TCP进程根据序号对接收到的错序的段重新进行排序。应用数据被TCP协议组织(分段或拼接)成最合适发送的数据块,添加上TCP协议头部形成报文段(Segment)。每一个TCP首部携带一个用于标识该段数据的32位序号,该序号是发送端TCP进程分配给该段数据的第一个字节的序号,如下图所示。,(2)确认应答TCP
34、可靠传输过程采用连续ARQ协议,即使用以字节为单位的滑动窗口(sliding-windows protocol)协议来控制字节流的发送、接收、确认与重传过程。窗口就是缓存的一个子集,它用来暂时存放从应用进程传递来并准备发送的数据。TCP能够发送的数据量由窗口协议定义。在TCP报文段首部的窗口字段写入的数值,就是当前给对方设置的发送窗口的数值的上限。当一个连接建立时,连接的每一端分配一个缓存来保存输入的数据,并将缓存的大小发送给另一端,当数据到达时,接收方发送确认,其中包含接收方本身剩余的缓冲区大小。任何时刻,剩余的缓冲区空间的大小即为窗口的大小,其单位是字节。规定这个尺寸的一种表示法叫做一个窗
35、口的通告,接收方在发送的每一确认中都含有一个窗口通告。,为了讲述TCP可靠传输原理的方便,我们讨论发送方的流量控制,即讨论仅限于以字节为单位的发送窗口。1)发送缓存上图表示,编号200以前的字节是已经发送和已经被确认的,发送端可以重用这部分位置。字节200202已发送出去,但是没有被确认,发送端必须在缓存中保存这些字节,以便在它们丢失或受损伤时重传这些字节。字节203211在缓存中(由进程产生的),但还没有发送出去。,2)接收缓存上图为接收缓存示意图。应当注意,接收进程下一个要消耗的字节是字节194。接收端期望从发送端接收字节200(这个字节已经发送出去但还没有收到)。现在接收端还能够再存储多
36、少字节?如果接收缓存的总容量是N而已经占用了M个位置,那么现在只能再接收N-M个字节。这个数值就叫做接收窗口。例如,如果N=13,M=6,则表示接收窗口的值是7。,3)发送窗口如果发送端创建的窗口(即发送窗口)小于或等于接收窗口,那么这时发送端就进行了流量控制。这个窗口包括已发送的字节和为被确认的字节,以及可以发送的字节。下图给出了具有发送窗口的发送缓存。,4)发送窗口的滑动假定发送端又发送了2B,然后收到接收端来的确认(期望接收字节203),而接收窗口的大小不变(仍为7)。发送端这时就可以滑动它的窗口,而原来字节200203所占的位置可以再次使用。在此期间,发送端又发送了2个字节,发送端可以发送字节205209(再发送5个字节)。 如下图所示。,5)发送窗口的扩展如果接收进程消耗数据的速度比它们接收的速度快,那么接收窗口就扩展(缓存有更多空出来的位置)。这种情况可以通知给发送端,使发送端增大(扩展)其窗口值。如下图所示。接收端确认又收到2个字节ACK=205(期望接收字节205),同时通知发送端接收窗口的值增大到9。与此同时,发送进程又产生4个字节(发送缓增加了字节211215),发送端TCP又发送5个字节(发送窗口中的205209)。,