TCP拥塞控制
来源:互联网 发布:小甲鱼java 编辑:程序博客网 时间:2024/06/14 02:09
1.真正的窗口大小
发送窗口的大小受两个因素影响:接收方通告的窗口大小和拥塞窗口大小。要考虑处接收方处理用户数据的速度和网络情况。
发送窗口大小=min ( 接收方通告的窗口大小 , 拥塞窗口大小)
即 窗口大小= min (rwnd , cwnd)
2、拥塞策略
关于rwnd在TCP流量控制中讲到了,而控制拥塞窗口的拥塞策略主要分为三部分:慢开始、拥塞避免、拥塞检测
(1)慢开始:指数增大
每当有一个报文段被确认时,拥塞窗口就增加1MSS(MSS:1个最大报文段长度)即:1个ack对应1个MSS的增加
慢开始门限ssthresh:当拥塞窗口大小达到慢开始门限时,进入下一阶段
(2)拥塞避免:加法增大
每当一整个窗口中的报文段都被确认后,窗口大小增加1MSS。即:1个往返时间RTT对应1个MSS的增加。
该阶段按照加法增加窗口大小,直到检测到拥塞为止。
(3)拥塞避免:乘法减小
发生拥塞的标准:发送方需要重传一个报文段。
1) RTO超时重传:
窗口门限设置为当前窗口大小的一半;
把cwnd重新设置为一个报文段(即窗口大小从1开始)
再次进入慢开始阶段
2) 快重传
窗口门限设置为当前窗口大小的一半;
把cwnd设置为门限值(有时会增加三个报文段)
再次进入拥塞避免阶段
无论是RTO超时重传还是受到三个相同ack的快重传,都要讲拥塞窗口的门限设置为当前窗口大小的一半;不同的是RTO从慢开始开始,快重传从拥塞避免开始。原因是:如果计时器超时,表征出现拥塞的可能性更大,某个报文段可能在网络中某处被丢弃而编号排在它后面的报文段也没有任何消息。 快重传出现拥塞的可能性小,某个报文段丢失,但它后面的报文段已经安全到达。
3、例子
慢开始门限ssthresh=16; 最大窗口大小的初始值=32;
(1)慢开始阶段:拥塞窗口的大小从1MSS指数增加,第1个RTT后cwnd=2, 第2个RTT后cwnd=4 ......
在第4个RTT后,拥塞窗口大小为16>=慢开始门限16;开始进入拥塞避免阶段。
(2)拥塞避免阶段:该阶段cwnd按照加法增大,在第8个RTT后 窗口大小为20,检测到拥塞,此时发生了超时重传现象,
(3)拥塞检测:由RTO超时重传的拥塞:拥塞窗口门限=当前窗口门限的一半10,cwnd设置为1,进入慢开始阶段
(4)当RTT=12时,慢开始结束,进入拥塞避免阶段。
(5)在RTT=14后,又检测到拥塞......
- TCP拥塞控制方案
- TCP的拥塞控制
- TCP 网络拥塞控制
- TCP网络拥塞控制
- TCP拥塞控制机制
- Inside TCP: 拥塞控制
- tcp拥塞控制
- TCP拥塞控制
- TCP的拥塞控制
- RFC2581 TCP拥塞控制
- TCP 网络拥塞控制
- TCP拥塞控制机制
- TCP的拥塞控制
- TCP的拥塞控制
- TCP拥塞控制
- TCP拥塞控制算法
- TCP的拥塞控制
- TCP拥塞控制 2
- 单例模式的七种写法
- 【Python】用C语言编写Python模块
- java中不太常见的东西(3)
- BootStrap(三) -- 通过tableExport实现数据导出
- ADG732: 32通道、串行控制、3.5 Ω、1.8 V至5.5 V/±2.5 V、模拟多路复用器
- TCP拥塞控制
- Unity手游UGUI开发之背包界面(MVC)
- 密电码
- 格式化秒,秒转换为: 时 分 秒的格式
- 电商行业
- endianness
- poj 2417 baby_step giant_step 高次同余方程
- 我想知道Java虚拟机是啥
- 代码中设置drawableleft