linux 环境,
1)tc qdisc add dev eth0 root netem delay 100ms 10ms
将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送, 所有的包
2) tc qdisc add dev eth0 root netem delay 100ms 10ms 10%
将 eth0 网卡的传输设置为: 10%的包有延时, 延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。
3) tc qdisc add dev eth0 root netem loss 1% 3%
丢包率设置为1% ~ 3%
在实际环境上,client 都是连server的某一个端口的
client --------tcp-------server, 如果想模拟丢包或者延时,可以在client 与 server 之间添加一个tcp 代理, 如nginx
|-------------------------------- -------|
client ---tcp----|--nginx-------tcp'-----------server |
|---------------------------------------|
那可以在nginx host上设置网络参数,使得server接收的数据是丢包的或者是延时的。
最理想是在client上设置,但是如果是并发测试,这个就会比较麻烦, 使用nginx 设置,可以方便控制。
网络流量的控制通常发生在输出网卡处, 所以 在nginx 收包没有流量控制, 在转发tcp 包到server的时候可以做流量控制。
下行 从server 到 client 没有做流量控制。
上面简单介绍的qdisc 并不能精确控制流量, 想要流量控制的更加细致,需要了解TC的一些原理和概念
◆ 为网卡配置一个队列;
◆ 在该队列上建立分类;
◆ 为每个分类建立过滤器
本文 以HTB(HierarchicaIToken Bucket)类型队列 描述。
Ⅰ) 创建HTB 队列
tc qdisc add dev em4 root handle 1: htb default 2 // equal
tc qdisc add dev em4 root handle 1:0 htb default 2
为网卡 eth0创建htb 类型的根队列,队列的句柄为1:0,所有未分类的流量都将分配给类别1:2
Ⅱ) 为这个根队列创建相对应的类别
tc class add dev em4 parent 1:0 classid 1:1 htb rate 40mbit ceil 40mbit
tc class add dev em4 parent 1:0 classid 1:2 htb rate 40mbit ceil 40mbit
tc class add dev em4 parent 1:0 cllassid 1:3 htb rate 20mbit ceil 20mbit
rate 40mbit”表示系统将为该类别确保带宽最小40mbit,
”ceil 40mbit”,表示该类别的最高可占用带宽为40mbit
Ⅲ 为各个类别设置过滤器
tc filter add dev em4 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:1
tc filter add dev em4 prtocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:2
tc filter add dev em4 protocol ip parent 1:0 prio 1 u32 match ip dport 23 oxffff flowid 1:3
example:
tc qdisc add dev em4 root handle 1:0 prio
tc qdisc add dev em4 parent 1:2 handle 40: netem loss 1% delay 5ms
tc filter add dev em4 protocol ip parent 1:0 u32 match ip dport 14100 0xffff flowid 1:2
父队列为root, 队列 handler 1:0, 类型为 prio。 prio 队列在缺省下默认有3个类1:1 1:2 1:3 ,
当数据包进入PRIO队列规则后,根据你给的过滤器设置选择一个类,
这些类仅包含纯FIFO队列规则而没有更多的内部结构。你可以把它们替换成你需要的任何队列规则
在example 中将类 1:2 规则替换为了队列规则。

在Linux环境中,可以使用`tc`命令模拟弱网环境,如延迟、丢包等。通过设置`netem`,可以在网卡上调整延迟时间和丢包率。此外,对于更精细的流量控制,可以使用HTB(Hierarchical Token Bucket)创建队列、分类和过滤器,以实现不同服务的带宽限制。例如,针对HTTP、SMTP和Telnet设置不同的流量规则。
2363

被折叠的 条评论
为什么被折叠?



