了解ping延迟

时间:2015-10-13 18:18:41

标签: python network-programming delay ping mininet

使用Mininet和OpenFlow上课。我想做的是为ping数据包添加一些延迟。我有一个基本的python脚本,它将添加带宽和延迟约束,如下所示:

self.addLink(host1, switch1, bw=10, delay='10ms')
self.addLink(host2, switch1, bw=10, delay='10ms')
self.addLink(host3, switch1, bw=10, delay='10ms')

现在,令我困惑的是每个ping数据包的时间对我来说似乎有点奇怪。 没有延迟,我的数据包看起来像这样:

mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=1.22 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=1.51 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=1.53 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=1.27 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=1.25 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=0.760 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=1.04 ms
^C
--- 10.0.0.2 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6013ms
rtt min/avg/max/mdev = 0.760/1.230/1.534/0.247 ms

我期待延迟为每个数据包添加10毫秒'但是当我以10毫秒的延迟运行ping时,我得到以下输出:

mininet> h1 ping h2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=85.1 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=46.3 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=43.5 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=43.9 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=42.3 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=43.1 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=45.0 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=43.2 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=45.5 ms
64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=44.5 ms
64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=43.3 ms
^C
--- 10.0.0.2 ping statistics ---
11 packets transmitted, 11 received, 0% packet loss, time 10019ms
rtt min/avg/max/mdev = 42.373/47.836/85.146/11.851 ms

我无法看到数据包被明确延迟了#10;'

我的数据包时间有这么大的值是否有原因?是因为当我对它们进行ping操作时,交换机和两台主机都会增加延迟,因此会增加时间吗?

2 个答案:

答案 0 :(得分:1)

我说你做的是你给EACH主机增加了10ms的延迟,所以对h1h2都是如此,因此做数学:从{{1}传递10ms } h1,从switch1传递到switch1 10毫秒,从h2传递到h2的响应时间为10毫秒,从{{1}传递10毫秒} switch1switch1。似乎对我来说是合法的。

答案 1 :(得分:0)

在h1和h2之间有两个链路,每个链路延迟10ms。所以它需要大约20ms的数据包才能在一个方向上传播。所以往返大约需要40ms。

由于ping由一对数据包组成 - ICMP Echo Request(由源发送)和ICMP Echo reply(由目标发送),因此所有ping的延迟时间约为40毫秒第二个。

第一次ping延迟时间较长的原因有点棘手。对于在LAN中交换IP级消息的一对主机(例如,通过交换机),它们必须知道彼此的MAC地址。在第一个数据包之前,h1不知道h2的MAC,因此必须解决它。该分辨率由一对数据包组成 - 由h1发送的ARP请求和由h2发送的ARP响应。这些消息也在LAN中传输40ms。只有收到响应后,才能发送第一个ICMP数据包。这就是你如何得到80毫秒的延迟。