我正在使用tc qdisc
eth2 接口上的数据包添加延迟,如下所示
sudo tc qdisc add dev eth2 root netem delay 100ms 10ms 25%
然后我对主机进行了 ping 操作并得到了一些结果。终端上的结果显示RTT为74毫秒,而我根据Wireshark时间戳计算出的RTT约为64毫秒。
这表明 Wireshark 会立即向我们显示来自 libpcap 的数据包。 libpcap 位于 NIC 之后,并且只有在 libpcap 看到数据包后才会添加所有 netem 延迟。至于最终结果,ping 程序在 netem 延迟之后(即 100 毫秒以上)看到数据包。
有什么方法可以使用 Wireshark 查看应用层或 netem 延迟后的数据包。
如果 Wireshark 不能做到这一点,有人可以建议我其他选择吗?我知道我可以在我的被测盒子之外使用另一个 Linux 盒子,并将其延迟在外盒子上。但我宁愿避免使用额外的 Linux 机器。
答案1
Wireshark 必须侦听接口,无法看到应用层的数据包。
如果您确实需要像 Wireshark 这样的工具,您可以从虚拟机或容器执行 ping 操作,并(在主机上)让 Wireshark 侦听虚拟接口或将该虚拟机连接到物理接口的网桥。如果您想避免创建虚拟机的负担,您也可以只设置一个 veth 对。
但如果您感兴趣的是时间,那么strace
您当前的配置可能就足够了:
# strace -r -T -e network ping 1.2.3.4
...
0.000113 sendmsg(...) = 64 <0.000032>
0.000055 recvmsg(...) = 84 <0.101680>
64 bytes from 1.2.3.4: icmp_seq=1 ttl=64 time=101 ms
...
尖括号之间是系统调用期间所花费的时间。由于它sendmsg
是即时的(字节直接进入较低的网络层),因此接下来的时间recvmsg
(大致)显示了实际发送和接收 ping 消息(即 RTT)所花费的时间。