tc/traffic control 网络控制工具

第一个例子

  1. 增加延时
tc qdsic add dev enp0s3 root netem delay 200ms
  • qdisc : queuing discipline, 当内核需要发送包到某个接口时,它是被送到qdis 配置的队列,然后 内核尽可能去从队列去获取最多的包,然后发送给网络驱动

  • root 表示树行的第一个节点,会影响之后的其他规则

  • netem 网络模拟, 允许添加延时,丢包率,重复包和其他外向数据

  • delay 这个命令可以延时

    1. 在添加规则前
    netbeez.net$ ping google.com
    PING google.com (172.217.6.78) 56(84) bytes of data.
    64 bytes from sfo07s17-in-f78.1e100.net (172.217.6.78):
    icmp_seq=1 ttl=53 time=11.9 ms
    64 bytes from sfo07s17-in-f78.1e100.net (172.217.6.78):
    icmp_seq=2 ttl=53 time=12.0 ms
    1. 添加规则后

      netbeez.net$ ping google.com
      PING google.com (172.217.5.110) 56(84) bytes of data.
      64 bytes from sfo03s07-in-f14.1e100.net (172.217.5.110):
      icmp_seq=1 ttl=53 time=213 ms
      64 bytes from sfo03s07-in-f14.1e100.net (172.217.5.110):
      icmp_seq=2 ttl=53 time=210 ms

可见增加的延时和配置的规则近一致

命令解释

查看规则:

tc qdisc show dev enp0s3

删除所有规则

tc qdisc delete dev enp0s3

添加丢包规则

tc qdisc add dec enp0s3 root netem loss 10%

出口网速限制

tc qdisc add dev enp0s3 root tbf rate 1mbit burst 32kbit latency 400ms

tc 通过 class, filter 进行规则匹配

添加一条限速规则

tc qdisc add dev enp0s3 root handle 1: htb r2q 1
tc class add dev enp0s3 parent 1 : classid 1:1 htb rate 10Mbit //rate 表示限制速率
tc filter add dev enp0s3 parent 1: protocol ip prio 16 u32 match ip dst 192.168.4.5 //dst 表示接收方,支持mask

最后,可以通过iperf 进行测试

上一篇:Kanzi编程基础2 - Kanzi节点读取和属性设置


下一篇:golang os/exec 执行外部命令