必做部分

环境准备

cubic测试实现过程

  1. 设置拥塞控制算法为cubic,在客户端与服务端均运行如下命令:sudo sysctl -w net.ipv4.tcp_congestion_control=cubic
  2. 编写发送数据包的脚(run.sh),如下所示:
    #!/bin/bash
    i=0
    while [ $i -le $1 ]
    do
    echo "ping:$i"
    ping -c 10 -s 20000 192.168.140.129 &
    i=$(($i+1))
    done
    
  3. 测试无拥塞情况的吞吐率与RTT
    • 查看服务端局域网地址:ifconfig;得到其ip为192.168.140.129
    • 服务端开启iperf监听:iperf -s
    • 客户端发送请求:命令行终端中输入iperf -c 192.168.140.129ping -c 10 192.168.140.129测试带宽与RTT
    • 结果如图所示:Alt text
  4. 测试有拥塞情况的吞吐率与RTT
    • 要实现链路拥塞,就需要模拟在短时间内发送大量数据包的情况,将脚本参数设置为500,代表500个用户同同时发送请求
    • 运行run.sh脚本,./run.sh 500,同时在另一个命令行终端中输入iperf -c 192.168.140.129测试带宽与RTT,输出结果如下所示
  5. 结果分析
    • 与无拥塞相比,在有拥塞的情况下,带宽明显下降,从原来的2.45Gbits/sec降到1.56Gbits/sec
    • 与无拥塞相比,在有拥塞的情况下,RTT值明显变大,具体比较其平均值,从0.457上升到1.693

reno测试实现过程

  1. 设置拥塞控制算法为reno,在客户端与服务端均运行如下命令: sudo sysctl -w net.ipv4.tcp_congestion_control=reno
  2. 测试无拥塞情况的吞吐率与RTT
    • 查看服务端局域网地址:ifconfig;得到其ip为192.168.140.129
    • 服务端开启iperf监听:iperf -s
    • 客户端发送请求:命令行终端中输入iperf -c 192.168.140.129ping -c 10 192.168.140.129测试带宽与RTT
    • 结果如图所示:Alt text
  3. 测试有拥塞情况的吞吐率与RTT
    • 要实现链路拥塞,就需要模拟在短时间内发送大量数据包的情况,将脚本参数设置为500,代表500个用户同同时发送请求
    • 运行run.sh脚本,./run.sh 500,同时在另一个命令行终端中输入iperf -c 192.168.140.129测试带宽与RTT,输出结果如下所示</br>
  4. 结果分析
    • 与无拥塞相比,在有拥塞的情况下,带宽明显下降,从原来的2.52Gbits/sec降到1.48Gbits/sec
    • 与无拥塞相比,在有拥塞的情况下,RTT值明显变大,具体比较其平均值,从0.399上升到1.622

结论

在拥塞时,会有数据包丢失;cubi相对于reno效果要好一些。

附件