TCP中拥塞控制

TCP拥塞控制,是防止网络中过多数据注入网络,导致路由器或链路过载。

TCP拥塞控制十一个全局性过程。

几个窗口值:

发送方窗口值:发送方缓冲区大小

接收方窗口值:接收方缓冲区大小

拥塞窗口值:   cwnd,表示网络拥塞情况

通告窗口值:  接收方通过这个值去通知 发送方 调整其发送缓冲区大小

慢启动窗口值:当拥塞窗口值小于这个值时,为防止网络拥塞,要采用慢启动。

传输效率及Nagle算法

       TCP的数据传输分为交互数据流和成块数据流,交互数据流一般是一些交互式应用程序的命令,所以这些数据很小,而考虑到TCP报头和IP报头的总和就有40字节,

如果数据量很小的话,那么网络的利用效率就较低。故交互数据流不实用Nagle 算法。

          Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到

 Nagle算法的规则(可参考tcp_output.c文件里tcp_nagle_check函数注释):

      (1)如果包长度达到MSS,则允许发送;

      (2)如果该包含有FIN,则允许发送;

      (3)设置了TCP_NODELAY选项,则允许发送;

      (4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;

      (5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。

 

当cwnd<ssthresh时,使用慢开始算法。

 

当cwnd>ssthresh时,改用拥塞避免算法。

 

当cwnd=ssthresh时,慢开始与拥塞避免算法任意。

拥塞避免算法:

 

posted @ 2015-09-21 15:19  niupan369  阅读(258)  评论(0编辑  收藏  举报