tcp 拥塞控制
Posted ts65214
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcp 拥塞控制相关的知识,希望对你有一定的参考价值。
大量的源想以过高的速度发送数据,导致路由器缓存溢出,继而丢包。
速率控制:TCP维护拥塞窗口cwnd变量,发送端未被确认的数据量不能超过cwnd
cwnd代表发送端认为能发送的数据量,流量控制窗口代表接收端能接收的数据量,
实际能发送的数据量是二者的较小值
拥塞检测:隐式检测:超时或者收到三个冗余ack(加上最初的确认一共4个相同的ack)。
显式通知:选择确认(SACK)
显式通知:IP层可以用显示拥塞通知告知TCP发生了拥塞
选择确认:发送方使用第一个选项,表明允许SACK,
接收方使用第二个选项,表明收到的块的起始序号,一次最多4个块
显示拥塞通知(ECN):建立连接时,发送方和接收方都设置了ECE和CWR标志位,表示他们都能使用这些标志位。每个携带TCP的数据包在IP头打上标记,表明它可以携带ECN信号。支持ECN的路由器会在将要拥塞时在数据包上设置拥塞信号,而不是丢弃数据包。接收端IP层看到ECN信号,会通知TCP,TCP接收端使用ECE标志位通知发送端,发送端通过拥塞窗口减少(CWR)标志位告诉接收端它已经收到拥塞信号了。
自适应重传算法:监视每条连接的性能,随时修改超时时间
估计往返时间(RTT):隔段时间测量一下报文段的RTT,然后求加权平均值estimatedRTT。
不测量重传的报文段的ack,因为无法确定ack确认的是哪一个报文段
设置超时时间,即设置重传计时器:
estimatedRTT加上一定的余量,RTT波动大,则余量就设置大一点。
计时器退避:每次超时后将超时时间翻倍(有上限,累计总时间通常4~10分钟),
因为超时可能是由于网络拥塞,而过多的重发会加剧拥塞
收到ack后重启定时器
TCP拥塞控制算法
慢启动:cwnd初始为1个MSS,每收到一个ack,cwnd就增加一个MSS,每经过一个RTT,
发送速率就翻倍。发送速率在慢启动阶段是指数增长的。
超时后将cwnd设置为1个MSS并重新开始慢启动过程,
并将慢启动阈值ssthresh设置为拥塞窗口值的一半,即cwnd/2
此后cwnd等于ssthresh时,进入拥塞避免模式。
当检测到3个冗余ack,TCP执行快速重传并进入快速恢复状态
拥塞避免:cwnd大约为上次拥塞时的一半,
窗口内所有报文段都收到ack后增加一个MSS
超时或收到3个冗余ack时,ssthresh设置为cwnd/2
超时时将cwnd置为1个MSS,
收到3个冗余ack时将cwnd置为cwnd/2,并进入快速恢复状态
快速重传:又称快速恢复,快速恢复是推荐的,不是必须的。
连续收到三个冗余ack,则在超时前可以立即重传该报文段
每收到一个冗余ack,cwnd增加一个MSS。
收到对丢失报文段的ack后,TCP进入拥塞避免状态
超时时将cwnd置为1个MSS,ssthresh设置为cwnd/2,进入慢启动状态
TCP的拥塞控制算法是加法递增乘法递减(AIMD)的,是公平的
初始值早期设置为1个MSS,后来改为4个MSS
以上是关于tcp 拥塞控制的主要内容,如果未能解决你的问题,请参考以下文章