系列文章
TCP详解(三):TCP流量控制——Flow Control
TCP详解(四):TCP拥堵控制——Congestion Control
本篇目录
cogestion window与sender window的含义
什么是TCP拥堵控制
在上一篇文章TCP详解(三):TCP流量控制——Flow Control中我们提到,为了避免TCP发送方发送数据的速度超出接收方的处理能力,通过receiver window表明接收方的接收能力。
不过TCP发送方发送的数据包并不是一步直达接收方,而是跋山涉水,途经多个网络节点,最终抵达接收方。发送方发送的数据量虽然通过receiver window可以保证不超出接收方的处理能力,但有可能超出网络承载的能力,依然会造成数据包丢失。
TCP拥堵控制机制就是避免TCP发送方抛出的数据量超出网络承载的能力,以及当出现网络拥堵后进行调整以消除拥堵。
TCP拥堵控制机制的实现
cogestion window与sender window的含义
congestion window用来表明当前网络能够不受限制地连续接收的数据量大小。sender window表示TCP发送方能够不受限制地连续向网络抛出的数据量大小。由于TCP发送方发送的数据不仅受到接收方数据处理能力的限制,还受网络承载能力的限制,所以sender window的值为二者的最小值。
Sender window size = Minimum (Receiver window size, Congestion window size)
三大举措实现拥堵控制
TCP拥堵控制通过分阶段,不同应对措施的方式实现:
- 慢启动——Slow Start
- 拥堵规避——Congestion Avoidance
- 拥堵探测——Congestion Detection
①慢启动阶段
TCP数据是被分割成小的数据包(称之为segment)传输的,一个sement携带的最大数据量成为MSS——maximum segment size。在初始阶段即慢启动阶段,congestion window的大小被设置为1 MSS。
congestion window size = maximum segment size(1 MSS)
然后每收到一个ack确认包,congestion window size就增加一个MSS的大小。
实际上,这种增长是以2为底数的指数型增长。因为每“发送/确认”一轮,congestion window的大小加倍。初始值为2的0次方,即1 MSS。
congestion window size = (2)round trip time
congestion window以这种方式迅猛增大,直至达到阈值。阈值的大小等于receiver能够容纳的MSS数目的一半的大小。
slow start threshold(单位:MSS) = (Receiver window size / Maximum Segment Size) / 2
②拥堵规避阶段
在慢启动阶段,congestion window以指数增长达到阈值后,就进入拥堵规避阶段。在拥堵规避阶段,每收到一个ack确认包,congestion window的大小增加一个字节,直至达到receiver window的大小后暂停发送数据。
Congestion window size = Congestion window size + 1
③拥堵探测阶段
拥堵探测阶段指的是在任何时候,一旦触发了数据包重传机制,则说明有可能是因为网络拥堵导致数据包丢失引起的,就要对congestion window进行调整来消除拥堵。引起重传的原因不同,采取的策略不同。
超时重传
TCP发送方每发送一个数据包,都会创建一个与之关联的定时器,如果在定时器超时后仍然没有收到该数据包的ack确认包,将触发重传。这种情况下,因网络拥堵丢包的可能性很大,所以按照如下方式进行调整:
- 将Slow Start Threshold设置为当前congestion window的一半
- 将congestion window设置为1 MSS的大小
- 启动Slow Start流程
连续三次收到同一数据包的ACK确认
当TCP发送方连续三次收到同一数据的ack确认包,会立即触发重传,即使定时器尚未超时,这是接收方主动提出重传数据包的信号。这种情况下,网络拥堵也有一定可能的,所以按照如下方式进行调整:
- 将Slow Start Threshold设置为当前congestion window的一半
- 将congestion window设置为Slow Start Threshold的大小
- 启动拥堵规避流程
总结
- 拥堵控制机制指的是通过congestion window机制限制TCP发送方向网络中发送数据,来避免网络拥堵以及出现拥堵后及时消除的机制
- TCP通过三大举措实现网络拥堵控制:①慢启动 ②拥堵规避 ③拥堵探测
下一篇: TCP详解(五):TCP与UDP的区别