计网基础-TCP拥塞控制的方法

 

上篇文章讲的是拥塞的成因和代价

该篇,我们将学习如何进行拥塞拥塞控制

 


拥塞控制基本原理:

成因:太多的发送方以太快的速度发送了太多的数据

方法一(在传输层,端系统自己判断,TCP即采用此种方式):控制数据、网络的负载,管制发送方的发送速率

方法二(在网络层,路由器网络辅助方式):暂不考虑,可自行查询ATM ABR(available bit rate)拥塞控制、RM(resource management) cells相关知识

 


 

TCP拥塞控制

Sender限制发送速率?CongWin窗口!

LastByteSent - LastByteAcked <= CongWin拥塞窗口

rate = CongWin/RTT Bytes/sec

 

CongWin拥塞窗口

- 动态调整以改变发送速率rate?加性增乘性减,慢启动!

- 反映所感知到的拥塞控制

 

如何感知网络拥塞?Loss事件!

- 接收到3个Ack

- timeout超时

发生以上任意一种Loss事件后,发送方就要降低速率

 

如何合理地动态地调整发送速率?加性增乘性减,慢启动!

- 加性增-乘性减:AIMD

- 慢启动:SS

 

加性增乘性减AIMD

原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss

方法:

additive increase:每个RTT将CongWin增大一个MSS——拥塞避免

multiplicative decrease:发生loss后将CongWin减半

 

慢启动SS

原因:当TCP连接刚开始创建的时候,初始值一般设置为1,很小,假如使用线性增长(加性增),则需要很长时间才能增长到一个可用的带宽,会造成浪费

方法(快速启动->):

初始时,CongWin=1,每个RTT将CongWin翻倍(收到每个ACK时进行操作)

初始速率虽然很慢,但增长速率很快攀升

 

改进:线性增长和加性增长进行切换?Threadhold变量!

Q:不可能一直指数增长,我们应该在某一个时间改为线性增长,那么何时应该把指数增长切换为线性增长(即进入拥塞避免阶段)?

A:当CongWin达到loss事件前值的1/2时,如下图第4sec第12sec的时候

注意,在第9sec的时候,一个从1开始,一个从6开始,为什么呢?

- 原版本:乘性减,直接置为1

- Reno版本:减为(前值的)一半

 

Loss事件时使用的两种手段

- 3个重复的ACK:CongWin切为一半然后线性增长

- Timeout事件:CongWin直接置为1,指数增长,达到threadhold时,再线性增长

 

 

 

 

初始时,CongW=1

posted @ 2018-06-23 10:51  pharaohx9  阅读(526)  评论(0)    收藏  举报