linux下模拟发往多个特定ip或特定端口的数据包延迟

要模拟网络延迟,可以使用linux自带的tc工具。

tc可以限制特定网卡发出的数据包的流量/延迟等,但不能限制收到的数据包。如果想要限制收到的数据包,就只能先虚拟出一块网卡,将接收到的来自特定ip端口的数据重定向到这块虚拟网卡,再限制虚拟网卡发出的数据包的流量/延迟,从而限制本机接收的数据包。

参考以下文章在Linux上为指定IP端口模拟网络收发包延迟_Linux教程_Linux公社-Linux系统门户网站 (linuxidc.com)

本文仅讨论往多个特定ip或特定端口的数据包延迟。

tc分为三个模块:

qdisc队列:默认情况下,包是FIFO的

class分类:比如一类限速10MBps,一类限速20MBps

filte过滤器:用于将特定ip端口划分到特定类里

  • 首先确定网卡,可以用ifconfig命令来看(尽量不要将所有经由此网卡发出的数据包都一起延迟,会连不上网,特别是ssh登录的情况下)
  • 在网卡bond1上添加一条root qdisc,prio是队列的类型:
sudo tc qdisc add dev bond1 root handle 1: prio bands 5

  这条qdisc下设5个class,handle id为1:。在没有filter的情况下,tc从IP协议层收到的包会根据IP包头的TOS(Type of Service)字段进入第1~第3个class(与pfifo_fast规则相同),第4个和第5个class是没用的。

  •  现在给第4个class添加一个5秒延迟的qdisc,这个qdisc的handle id为40:,类的id为1:4
sudo tc qdisc add dev bond1 parent 1:4 handle 40: netem delay 5s
  • 给root qdisc添加一个filter,将发给14100端口的包都送到第4个class:(这个fliter将划分给1:4这个类的数据包,prio是优先级的意思)
sudo tc filter add dev bond1 protocol ip parent 1:0 prio 4 u32 match ip dport 14100 0xffff flowid 1:4
  • 现在给第5个class添加一个5秒延迟的qdisc,这个qdisc的handle id为50:,类的id为1:5;并给该队列添加一个filter,将发给192.168.0.1的包都送到第5个class
sudo tc qdisc add dev bond1 parent 1:5 handle 50: netem delay 5s
sudo tc filter add dev bond1 protocol ip parent 1:0 prio 4 u32 match ip dst 192.168.0.1 flowid 1:5

如果要删除,

sudo tc qdisc del dev bond1 root

这样qdisc下的所有东西都会一起删除

如果要看,

sudo tc -s filter show dev bond1

sudo tc -s qdisc show dev bond1

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值