概念
滑动窗口是两台主机间传送数据时的缓冲区。每台TCP /IP 主机支持两个滑动窗口,
一个用于接收数据, 另一个用于发送数据。窗口尺寸表示计算机可能缓冲的数据量大小。
1. 滑动窗口工作过程
TCP 协议通过采用滑动窗口的方式控制数据流的传输。在传输层中, 数据按照一定的
格式打成大小相同的包。每一个滑动窗口中包含一定数目的数据包, 滑动窗口的大小可以
进行调整。每台网络上的主机维护一个发送窗口和一个接收窗口。发送方一次可发送相当于滑动窗口大小的数据包数目, 并在每个数据包前添加包头信息, 然后等待接收方返回确认信息。由于TCP 是面向连接的协议, 可以保证数据传输的完整性和准确性, 当传输过程中发生丢包时, 接收方会要求发送方从断点处重传数据。
当TCP 从应用层中接收到数据时, TCP 将一个带序列号的报头加入数据包并将其交给
IP, 由IP 将它发送到目标主机。
当每一个数据包传送时, 源主机设置重发计时器, 描述在重新发送数据包前将等待
ACK 的时间。在一般情况下, 当第一次发送失败后, 重发计时器的重试时间将设置为前一
次的两倍。在发送窗口中有每一个数据包的备份, 直到收到ACK。
当数据包到达目的主机接收窗口, 它们按照序列号放置。当目的主机接收到连续的数
据段时, 就向源主机发送一个关于数据的认可( ACK) 的应答报文, 其中带有当前窗口尺寸。一旦源主机接收到数据包并认可, 发送窗口将进行滑动。如果在重发计时器设定的时
间内, 源主机没有接收到对现存数据的认可, 数据将重新传送。重发数据包将加重网络和源主机的负担。下面通过应用实例来了解其作用吧。
“ 三次握手”的例子描述了一个典型的TCP 传输过程。TCP 可使用称为滑动窗口的方法获得更好的TCP 传输性能。在TCP“ 三次握手”的过程中, 两台主机交换传输窗口大小, 接收主机把它的接收窗口大小设置成和发送主机的传输窗口大小一致。窗口大小表明任何一次所能传输段的最大个数。窗口大小是通过TCP 协议的格式中“ 窗口”字段, 在传输给目标主机的每一个报文中给出的。
发送主机通过创建一个发送窗口, 以设置它的最大传输规模。例如, 如果发送主机设置
发送窗口的大小是6, 如下图1所示,
这意味着发送主机一次最多可连续发送6 个数据段, 此时必须得到目标主机确认后, 才能继续发送后续的数据段。
( 1) 第一次连续发送6 个数据段后( 即1 至6 段) , 发送主机必须等待接收主机的确认。
假如接收主机只收到段1, 2 和5, 则接收主机发回包含有序列号为3 的段进行确认, 确认的是1 和2 段。此时, 发送主机的滑动窗口向右滑过两个确认的段, 7 和8 段出现在滑动窗口中。如图2 所示。
( 2 ) 发送主机又连续发送6 个数据段( 即3 至8 段) 。假定这6 段均被正确收到, 接收
主机发回包含有序列号为9 的段进行确认, 即表示9 段前的数据段均已正确收到, 期待第9段的发送。此时, 发送主机的滑动窗口向右滑过6 个确认的段, 9 至14 段出现在滑动窗口中, 如图3 所示。
通过上例可以看出, 借助于滑动窗口能够提高TCP 数据的传输性能。因为TCP 无须对
每一数据段进行确认, 只需要对发送一个窗口宽度的段确认一次。
小结
滑动窗口的大小对网络性能有很大的影响。如果滑动窗口过小, 则需要在网络上频繁
的传输确认信息, 占用了大量的网络带宽; 如果滑动窗口过大, 对于利用率较高、容易产生丢包现象的网络, 则需要多次发送重复的数据, 这同样耗费了网络带宽。
决定滑动窗口大小的因素, 包括网络的带宽、可靠性以及需要传输的数据量。