先梳理两个概念:
什么是高时延带宽乘积的网络环境(带宽(Byte/s)*时延>64k字节):
1)卫星传输(时延550ms),带宽1Mbps以上。(1024*1024)/8 *0.6=72090字节。
2)跨国internet访问或国际电路(时延200ms),带宽超过2.6Mbps以上。
3)千兆网络已经很流行了,时延>=1ms,都算。更不要说万兆网络
TCP滑动窗口如何进行流量控制及64K概念。
TCP是一种可靠的面向连接的协议,TCP滑动窗口两作用:提供可靠性,流量控制。这里我们关心的是流量控制。tcp滑动窗口控制在收到确认包前能够最大发送多少字节的TCP数据包,如果收到了将再发送下一组数据。在TCP包头里描述TCP滑动窗口占了16位,刚好是65535也就是64K。默认最大允许发送64K字节的数据包就必须有回应包,否则就等。
在高时延带宽的网络环境下,会有什么问题,如何解决?
TCP这样的特点就导致,虽然带宽富裕,但是单个TCP线程不能把带宽占满。
解决办法:TCP包头里最后一部分是选项字段,当kind=3时,用来给出TCP窗口扩大因子。当新建立TCP连接时,会查找这个选项参数,如果设置了TCP窗口因子(取值范围0~14),就可以突破默认TCP窗口限制,使其支持更大的窗口.相当于2的(16+扩展值)次方,最大2的30次方。
这样在高带宽时延的网络环境下,单TCP会话对带宽利用率将明显改善。
测试环境A端103.38.X.X 主机
B端103.16.X.X主机
两主机之间的带宽大于100M,时延200ms左右
UDP 100M测试:达到预期结果
服务端iperf-u -s
客户端iperf -c 103.16.X.X -b 100M -i 5 -t 60
TCP单线程测试:默认64K窗口,只能达到 2.5Mbps
服务端iperf -s
客户端iperf -c 103.16.X.X -i 5 -t 60
TCP单线程测试:默认2M窗口,可达到 70Mbps
服务端iperf-s -w 2M
客户端iperf -c 103.16.X.X -w 2M -i 5 -t 60
利用TCP扩大因子,不光系统要支持,应用软件也要给力。
linux 2.6.9以上内核, windows vista/2008以上默认支持,只需要关心应用软件即可。
早期版本系统优化:
linux
echo 'net.ipv4.tcp_window_scaling = 1'>>/etc/sysctl.conf
sysctl -p
windows XP/2003优化
打开注册表,进入如下位置
添加键值
from : http://net580.blog.51cto.com/1404195/1831134
No comments:
Post a Comment