问题描述
业务上有客户投诉,某服务工作不正常,具体表现为在客户的环境下,此服务请求及相应缓慢,但是处于某种原因并不能拿到该客户的网络情况。
前期研究中,对此服务进行压力测试,服务访问量远超业务峰值亦无法重现此问题,经客户配合后,得出客户的网络延迟较高,网络抖动较为严重。
为了优化用户体验,提升服务质量,需要在内网开发环境中设置一个弱网环境
解决思路
使用WANem在内网中搭建一个“网关”,使进行测试的流量“通过”这个网关,在此网关中进行延迟、丢包、损坏包等操作,进而构建弱网环境,复现问题。
步骤
配置虚拟机
是否需要双网卡
自己搭建WANem而不是使用同事搭建好的环境的原因在于,同事只给WANem配置了一张网卡,且WANem存在bug,不能指定对某个IP进行规则添加(理论上是可以的,但是在实践中碰壁),以至于丢包丢到web控制台无法控制,在自己搭建过程中,使用的版本是WANem,惊讶地发现竟然带着LXDE,一切都省力起来了。
假如开放给他人使用,需要额外添加网卡,仅做前期探索或测试可以不添加。
配置
我分配给这台虚拟机的配置是1核CPU 1GRAM 8G HDD
,后面发现分多了,其实512M RAM + 4G HDD就够了,使用CD LIVE的话,甚至不需要磁盘。
启动
挂载完WANem镜像后直接启动,我是用的版本并不需要像其他版本一样在以下界面敲回车。
进入LXDE之后,设置网络(可选)。
公司网络IP MAC绑定,不能使用DHCP
在此处编辑连接,随后在以下位置连接网络(是的,不会主动连接)。
在已经打开的Midori中,选择Advanced Mode,进行简易的弱网环境配置,如下图。
上图中的eth0是将要设置的网卡,点击start后,即可开始配置网络情况。
简单介绍一下以上配置
针对单个IP的rule在我的实践中依旧没有成功
如果愿意帮忙可以留言,博主会发送具体情况,感激不尽
参数 | 含义 |
---|---|
Packet Limit | 用来设置包的队列大小,默认为1000,当队列超过1000时,超过的包将被丢弃 |
Symmetrical network | 对称网络,选中为Yes的时候,应用网络的规则将在数据包来回的方向上都生效 |
Choose BW | 从快速列表选择带宽 |
Specify BW | 自定义带宽 |
Delay | 延时,这里设置的是单向的延时 |
Jitter | 抖动 |
Correlation | 相关性,用来设置这个包的延迟时间与上一个包的时间的相关度 |
Loss | 丢包率 |
Correlation | 相关性,以一定的概率发生突发的大量的丢包,但平均丢包率不会超过Loss定义的值 |
Duplication | 重包率,以一定概率生成某个包的多份拷贝,并按随机时间到达目标端 |
Correlation | 相关性,类似Loss的 |
Packet reordering | 包重排序率,按概率将包的顺序打乱,gap用来确定包重排序的个数,不设置更接近真实的环境 |
Corruption | 错包率,按概率产生噪音,即格式错误的包 |
Idle timer Disconnect | 空闲断开定时器,当网络空闲时,按设定的时间对Type定义的协议断开连接 |
Random Disconnect | 按Type随机断开 |
MTTF | 平均失效前时间,用Low和High定义两个极值 |
MTTR | 平均恢复前时间 |
IP source address | 匹配的源IP地址 |
IP source subnet | 源IP地址的子网 |
IP dest address | 匹配的目标IP地址 |
IP dest subnet | 匹配的目标IP地址的子网 |
配置客户端
在测试客户端设置路由的下一跳
1 | # 删除原来默认的下一跳 |
至此,测试客户端默认将以WANem为网关,进行网络通信。
ICMP报文的奇怪现象
在完成以上操作后,ping命令发出的ICMP包并未丢包,延迟也极低,但是在此环境下的业务测试可以证实WANem的配置已生效。推测原因可能是客户端是ARM架构的嵌入式设备,系统经过精简,可能存在bug,等有多余资源分配虚拟机后,在对此现象在X86上用正常发行版进行测试
事后又看了一眼路由表,发现ping的地址的网关并不是WANem的网关,强行修改后,一切正常。