2011-8-6 18:04:28

来源:互联网 发布:关于来电软件 编辑:程序博客网 时间:2024/05/16 16:05
 

在存在丢包的网络环境下, 接收方的 TCP socket recv buffer, 即通告的接收窗口大小将严重影响TCP整体性能。

 

原因是,

1. TCP快速重传要求接收到三个连续重复的ACK, 在 long fat pipe 的情况下, 接收方在 TCP layer 在提交数据到应用层之前, 必须等待丢失的数据被重传过来. 此时导致后续数据在接收方 buffer 中堆积, 从而造成通告窗口减小. 发送方不能发送超过 cwnd 和接收方通告窗口大小的数据. 因而, 发送方在发送丢失的数据段之后, 很可能由于接收方通告窗口大小的限制而不能继续发送新的数据, 造成TCP效率下降.

 

2. 同时, 如果接收方 TCP socket recv buffer 比较小, 将造成通告窗口过小, 从而引起 TCP 控制参数 ssthresh 急剧减小到 0.5 倍的通告窗口大小, 而如果是TCP超时引起的重传, 则 cwnd 被设置为 1, 从而开始慢启动, 但是由于 ssthresh 过小, 使发送方 TCP 过早进入 congestion avoidance 状态, 而减小发送报文增加速度, 从而更加拖慢TCP效率.

 

解决的办法是适当增加接收方 TCP socket recv buffer 大小. 为防止应用程序忘记设置, 应适当增加系统默认 TCP socket recv buffer 大小.

原创粉丝点击