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时,慢开始与拥塞避免算法任意。
拥塞避免算法:
博客内容只为本人学习所感转载亦或自写,不足或错误之处请大家不吝赐教