zoukankan      html  css  js  c++  java
  • 高时延带宽的网络环境下使用Iperf测试网络性能

    先梳理两个概念:

    什么是高时延带宽乘积的网络环境(带宽(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左右

    wKiom1eZj42gJsYuAAEzSVZhR_o940.png

    UDP 100M测试:达到预期结果

    服务端iperf-u -s

    客户端iperf -c 103.16.X.X -b 100M -i 5 -t 60

    wKioL1eZj47DPaRiAAETrTXGYuM099.png

    wKiom1eZj46iL8o_AAHrM3cXkXE452.png

    TCP单线程测试:默认64K窗口,只能达到 2.5Mbps

    服务端iperf-s

    客户端iperf -c 103.16.X.X -i 5 -t 60

    wKioL1eZj4ugi4OcAAFonDc7tB4802.png

    wKiom1eZj4vwdmAOAAGYGr901-k081.png

    TCP单线程测试:默认2M窗口,可达到 70Mbps

    服务端iperf-s -w 2M

    客户端iperf -c 103.16.X.X -w 2M -i 5 -t 60

    wKioL1eZj4yDlJjjAAFeKal7c1w254.png

    wKioL1eZj42Qf3YQAAF1P8jYOLY387.png

     

    利用TCP扩大因子,不光系统要支持,应用软件也要给力。

    linux 2.6.9以上内核, windows vista/2008以上默认支持,只需要关心应用软件即可。

    早期版本系统优化:

    linux

    echo 'net.ipv4.tcp_window_scaling = 1'>>/etc/sysctl.conf

    sysctl -p

    windows XP/2003优化

    打开注册表,进入如下位置

    wKiom1eZj47AEukJAAAU3TMWRMA946.jpg

    添加键值

    wKioL1eZj4_wmhA5AAAV5N1QAGI747.jpg

    实例

    带宽测试通常采用UDP模式,因为能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽作为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用-b 100M进行测试,然后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽作为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好很多,重复测试几次,就能得出稳定的实际带宽。

    UDP模式

    服务器端:

    iperf -u -s
    

    客户端:

    iperf -u -c 192.168.1.1 -b 100M -t 60
    

    在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。

    iperf -u -c 192.168.1.1 -b 5M -P 30 -t 60
    

    客户端同时向服务器端发起30个连接线程,以5Mbps为数据发送速率。

    iperf -u -c 192.168.1.1 -b 100M -d -t 60
    

    以100M为数据发送速率,进行上下行带宽测试。

    TCP模式

    服务器端:

    iperf -s
    

    客户端:

    iperf -c 192.168.1.1 -t 60
    

    在tcp模式下,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。

    iperf -c 192.168.1.1  -P 30 -t 60
    

    客户端同时向服务器端发起30个连接线程。

    iperf -c 192.168.1.1  -d -t 60
    

    进行上下行带宽测试。

  • 相关阅读:
    Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificat
    git快速生成配置sshkey
    快速合并多个git项目到同一目录
    一次性删除docker images中name为none的镜像
    mongo数据库数据库导入、导出
    python下ssh的简单实现
    python操作mysql
    Python的方法解析顺序(MRO)[转]
    python异常处理
    面向对象类成员
  • 原文地址:https://www.cnblogs.com/liqing1009/p/12463952.html
Copyright © 2011-2022 走看看