gpt4 book ai didi

linux - 使用 tc 模拟特定端口上的网络延迟

转载 作者:可可西里 更新时间:2023-11-01 02:33:44 28 4
gpt4 key购买 nike

我正在尝试使用 ubuntu 上的 tc 命令模拟来自源端口 7000 的 tcp 数据包的固定时间延迟。我使用的命令是:

sudo tc qdisc add dev eth1 root handle 1: prio
sudo tc qdisc add dev eth1 parent 1:1 handle 2: netem delay 3000ms
sudo tc filter add dev eth1 parent 1:0 protocol ip u32 match ip sport 7000 0xffff flowid 2:1

这个过滤器似乎没有造成任何延迟,有人可以指出我哪里出错了吗?另外,有没有什么方法可以 ping 一个端口或做一些等效的事情来测试延迟?

谢谢!

最佳答案

试试这个:

sudo tc qdisc add dev eth1 root handle 1: prio priomap 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sudo tc qdisc add dev eth1 parent 1:2 handle 20: netem delay 3000ms
sudo tc filter add dev eth1 parent 1:0 protocol ip u32 match ip sport 7000 0xffff flowid 1:2

解释:

  • 将全零 priomap 添加到 prio,以便所有常规流量都流经单个波段。默认情况下,prio 根据数据包的 DSCP 值将流量分配到不同的频段。这意味着一些与您的过滤器不匹配的流量最终可能会与延迟的流量属于同一类。
  • 将 netem 分配给其中一个类 - 1:2
  • 最后,添加您的过滤器,以便它将流 ID 1:2 分配给匹配的数据包。这可能是你出错的地方。您需要将过滤器分配给 classful prio qdisc 的 1:2,而不是 classless netem。

为了测试此设置,我将过滤器更改为 dport 80 而不是 sport 7000,并对 运行 wget checkip.amazonaws.com,耗时 6 秒(TCP Syn 延迟 3 秒,HTTP GET 延迟 3 秒):

malt@ubuntu:~$ wget -O - checkip.amazonaws.com
--2016-10-23 06:21:42-- http://checkip.amazonaws.com/
Resolving checkip.amazonaws.com (checkip.amazonaws.com)... 75.101.161.183, 54.235.71.200, 107.20.206.176, ...
Connecting to checkip.amazonaws.com (checkip.amazonaws.com)|75.101.161.183|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10
Saving to: ‘STDOUT’

- 0%[ ] 0 --.-KB/s X.X.X.X
- 100%[===========================================================>] 10 --.-KB/s in 0s

2016-10-23 06:21:48 (3.58 MB/s) - written to stdout [10/10]

但与其他端口的连接(例如 443 - HTTPS、22 - SSH 等)要快得多。您还可以运行 sudo tc -s qdisc show dev eth1 以确保 netem 处理的数据包数量有意义。

关于linux - 使用 tc 模拟特定端口上的网络延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40196730/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com