我们可能遇到这样的情景:有一些实验需要在广域网环境下(存在一定的延迟、丢包等)完成,但我们不希望花费成本去租借一台云服务器,只希望在虚拟机网络中模拟出广域网的环境,应该如何实现呢?
本文是TCP加速系列总结的一部分 ,我们希望完成TCP加速的实验,这时要求我们的实验环境不仅是一个广域网,还需要是一个存在 一定拥塞 、会发生 一定丢包 的广域网,这种情况下,如果我们不使用模拟环境,而使用真实服务器的话,实验效果就可能受到服务器地理位置、实验时间段等等因素的影响了。
好在,我们可以使用WANem这一稳定、易用的广域网模拟器来解决我们的问题。
简介
WANem基于iptables和tc(Traffic Control)实现,可以实现对网络延迟、丢包率、抖动、噪音等的模拟,使用者可以简单地设定并复现出某个特定的网络环境,因而逐渐替代软件仿真成为新一代的网络测试床。与之具备类似概念的工具有微软的Network Emulator for Windows Toolkit(NEWT)、Linux 2.6自带的Netem等。事实上,此前说的tc(Traffic Control)就是用来控制Netem工作的,因此可以理解为WANem是基于Netem所构建。
安装与访问
WANem类似于一台虚拟机,可以直接 下载 iso文件,并在VMWare中安装。Linux类型选择 其他Linux 64位 即可。
启动之后,可以使用DHCP获取IP,或者手动配置IP;虚拟机会要求你设置口令,你可以使用用户名 perc
和你设置的口令来远程登录到系统上。
成功启动之后,会出现 WANemControl@PERC>
的命令行提示符,使用 help
命令可以查看该命令行支持的命令。
一般来说,你现在就可以在另一台机器的浏览器上使用 http://<WANem IP>/WANem
来访问控制界面了(注意URL大小写)。假如你不知道WANem的IP地址,则使用 exit2shell
命令来返回到Linux命令行中,使用我们熟悉的 ip addr
命令就可以看到WANem的IP。
配置规则
首次进入控制界面时,我们看到的是WANem的 Basic Mode
,这个模式下,我们可以配置 带宽 和 延迟 。
点击导航栏中的 Advanced Mode
进入高级配置,我们看到如下的界面:
界面上已经将各项指标都标识得比较清楚了,因此不多费口舌解释。在上图中,我们已经写好了一条”延迟100ms、随机丢包率20%“的规则。
可以指定我们的规则的适用范围,如果你只希望你配置的规则在两台特定主机之间生效,那么就填写下图红框框出的一行,否则保留原样即可。
使用
保存我们设置好的规则,即刻开始使用它吧。
我们的两台实验机器分别是 CentOS7 192.168.213.128
和 Ubuntu 192.168.213.129
,WANem是 192.168.213.130
。
首先可以使用 iperf3
来测试一下两台机器之间的网络情况(理所当然地好)。
在Ubuntu上运行 iperf3 -s
命令:
在CentOS上运行 iperf3 -c 192.168.213.129
命令,该工具将会自动测试从客户端到服务端的带宽情况:
接着,我们引入WANem。在CentOS上添加路由,使得它到Ubuntu的所有流量都要经过WANem。
再次使用 iperf3 -c 192.168.213.129
进行测试,效果很明显:
可以看到,首先由于时延的影响,带宽下降了,其次是产生了一些丢包。
我们可以使用 iperf3 -u -c 192.168.213.129
命令来启用UDP模式,该模式下会统计丢包率,可以看到这里的丢包率跟我们此前设置的 20%
是接近的。
综上所述,有了这个环境,就可以愉快地在局域网中模拟出广域网环境了。
参考资料
[2] Linux网络流量控制工具—Netem - 发卡 - 博客园 (cnblogs.com)
[3] TC(Traffic Control)命令—linux自带高级流控 - 云+社区 - 腾讯云 (tencent.com)
[4] 彭娜.并行TCP在广域网加速系统中的研究与实现[C].中南大学硕士学位论文,2009-05
[5] https://sourceforge.net/projects/wanem/files/Documents/WANemv11-Setup-Guide.pdf/