原先使用NEWT在Windows端搭建一套网络仿真的环境,现在搭建一套更加精确的网络控制器
网络模拟拓扑图
其中,网络控制器需要时一个双网卡的服务器,两个网口eth0和eth1
网桥的搭建
**网桥:**工作在网络链路层,可以连接不同局域网的网络设备
网络控制器中网桥的搭建:
安装网桥搭建工具bridge-utils:
yum install bridge-utils
配置网桥:
brctl addbr br0
brctl addif br0 eno1
brctl addif br0 eno2
ifconfig br0 xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx up
使用brctool show查看配置是否成功:
流量控制模块配置
网桥搭建成功后,现在我们开始流量控制部分
实现工具:
linux2.4以上版本的内核中自带了有netem(net emulation)模块和tc(traffic contrl)模块,前者用于网络仿真,后者用于流量整形控制,都是通过tc命令进行配置
作用:
在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情况
实现流程:
配置命令:
延时
- 固定延时
# tc qdisc add dev eno1 root netem delay 100ms
- 波动性的延时:
tc qdisc change dev eno1 root netem delay 100ms 10ms
将 eno1 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送
ping 一下153机器:
- 进一步加强波动性的延时:
设置相关性为30%:
tc qdisc change dev eno1 root netem delay 100ms 10ms 30%
抖动
设置延时抖动为正态分布:
# tc qdisc change dev eno1 root netem delay 100ms 20ms distribution normal
丢包
- 固定丢包率:
# tc qdisc change dev eno1 root netem loss 10%
ping 一下153机器:
因为ping的时长较短,故丢包率不是很准确
包重复
# tc qdisc add dev eno1 root netem duplicate 1%
将 eno1 网卡的传输设置为随机产生 1% 的重复数据包
包损坏
# tc qdisc add dev eno1 root netem corrupt 0.2%
将 eno1 网卡的传输设置为随机产生 0.2% 的损坏的数据包(内核版本需在 2.6.16 以上)
乱序
- 按照个数
# tc qdisc change dev eno1 root netem gap 5 delay 10ms
每第5个包马上发送,其他的包间隔10ms发送
- 按照百分比
# tc qdisc change dev eno1 root netem delay 10ms reorder 10% 25%
10%的包(相关性为25%)马上发送,其他的包间隔10ms发送
带宽
模拟工具:ethtool
命令:
–s ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off]
- 如设置100M的带宽:
# ethtool -s eno1 autoneg off speed 100 duplex full
- 使用
ethtool eno1
查看网络带宽
- 查询网口收发包统计
ethtool –S eno1
- 将ethtool 设置永久保存在网络设备的方法
ethtool 设置可通过 /etc/sysconfig/network-scripts/ifcfg-ethX 文件保存,从而在设备下次启动时激活选项。
例如:ethtool -s eno1 speed 100 duplex full autoneg off
此指令将eno1设备设置为全双工自适应,速度为100Mbs。若要eno1启动时设置这些参数, 修改文件/etc/sysconfig/network-scripts/ifcfg-eno1,添加如下一行:
ETHTOOL_OPTS=“speed 100 duplex full autoneg off”
问题1:
配置OK后出现网络控制器无法连接外网但可ping通局域网,数据接收端可正常连接外网且能ping通局域网的问题,删除网桥后,网络控制器即可访问外网
是否因为网桥的设置出现问题,尝试删除eno1和eno2网口的ip等信息,尝试将eno1和eno2的ip等设置为手动设置,尝试将linux的防火墙关闭,甚至是重装系统,各种尝试均无解的时候,检测网络控制器ping外网时的路由情况traceroute hostname
,发现只是在本地连网关都没到达,网络控制器的gateway没有设置(奇怪的是,在linux右上角网络设置界面设置了gateway是无效的),使用命令
route -n
可查看路由情况,此时可以使用命令添加默认gateway
route add default gw 172.18.152.1
网络控制器即可成功的访问外网
删除gateway后实验一下是否此时是网络控制器无法访问外网,使用命令
route del default
此时网络控制器无法访问外网,说明是没有默认网关引起的问题,但是好奇的是为何数据接收端的主机是可以进行外网访问,eno1是不需要走默认gateway?