流量控制

 
TCP 还提供了流量控制机制。流量控制功能通过调整会话过程中两个服务之间的数据流速率,帮助实现 TCP 的可靠传输。当源主机被告知已收到数据段中指定数量的数据时,它就可以继续发送更多的数据。
 
TCP 报头中的“窗口大小”字段指出了在收到确认信息之前可以传输的数据量。初始窗口大小应在会话创建阶段通过三次握手来确定。
 
TCP 反馈机制将根据网络和目的设备所能支持的最大容量(以不丢失数据为前提)将数据传输速率调整到最大。通过对传输速率的管理,TCP 尝试确保收到全部数据且将数据重发率降到最低。
 

 
请参看图中对窗口大小和确认消息的简易展示。在本例中,TCP 会话的初始窗口大小为 3000 字节。此会话的发送方在传输 3000 字节后等待这些数据的确认消息,以便继续传输更多数据段。
 
一旦发送方收到接收方发送的确认消息,它就可以传送另外 3000 字节的数据段。
接收确认信息出现延迟时,发送方将不再发送任何会话数据段。如果网络拥堵,或者接收主机资源紧张,延迟时间可能就更长。延迟时间越长,该会话过程的有效传输速率越低,而数据传输速率的降低有助于缓解资源紧张的状态。
减小窗口大小
 
我们也可以通过动态窗口大小来控制数据流量。当网络资源受到限制时,TCP 可以减小窗口的大小,这样,目的主机就需要更加频繁地确认所接收的数据段。由于源主机需要更加频繁地等待数据确认,这便可以大大降低传输的速率。
 
TCP 目的主机将窗口大小值发给源主机,表明它在该会话过程中准备接收的字节数。如果目的主机由于缓冲内存受限需要降低通信速率,那么它向源主机发送的确认信息中可以包含一条较小的窗口大小值。
 
如右图所示,如果目的主机发生拥堵,它可以向源主机发送包含较小窗口大小的数据段。图中显示,其中一个数据段丢失了。目的主机将返回数据段的 TCP 报头中的窗口字段值由 3000 减为 1500,即将窗口大小改为 1500。
 
如果在传输过程中没有发生数据丢失或者资源受限,目的主机将增加窗口大小值。由于此时只需发送少量的确认信息,因此该方式减少了网络的开销。窗口大小将持续增加,直至有数据丢失,然后窗口大小又将随之减少。
 
TCP 中这种增减窗口大小值的动态运动不断进行,直至达到每个 TCP 会话的最佳窗口大小。在高效网络中,由于不丢失数据,窗口大小可能会相当大;而在基础架构紧张的网络中,窗口大小就会很小。
 
链接
 
在 RFC 2581 中可以查阅到更多关于 TCP 拥堵管理的内容。文件地址为:
 
http://www.ietf.org/rfc/rfc1035.txt