在课堂上开始使用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我期望延迟‘添加10ms到每个数据包’,然而,当我运行ping时,我得到了以下输出,延迟为10ms:
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我看不到数据包已经显式地延迟了'10ms‘
为什么我的数据包时间会有这么大的值?是不是因为交换机和两台主机在我time它们时都增加了延迟,因此时间增加了?
发布于 2015-10-14 02:22:29
我想说的是,您已经为每个主机添加了10毫秒的延迟,因此对h1和h2都是如此,因此进行了数学运算:从h1传递到switch1的延迟为10毫秒,从switch1传递到h2的延迟为10毫秒,响应从h2传递到switch1的延迟为10毫秒,从switch1传递到<代码>D9的延迟为10毫秒。在我看来是合法的。
发布于 2015-10-14 23:28:37
在h1和h2之间有两条链路,每条链路都有10毫秒的延迟。因此,数据包在一个方向上传输大约需要20毫秒。所以一次往返大约需要40毫秒。
由于ping由一对数据包组成- ICMP Echo Request (源发送)和ICMP Echo reply (目标发送),因此从第二个ping开始的所有ping都会有大约40ms的延迟。
第一次ping延迟较长的原因稍微复杂一些。对于在LAN中交换IP级消息的一对主机(例如,通过交换机),它们必须知道彼此的MAC地址。在第一个数据包之前,h1不知道h2的MAC,所以它必须解析它。该解析由一对数据包组成-由h1发送的ARP请求和由h2发送的ARP响应。这些消息也会在LAN中传输40毫秒。只有收到响应后,才能发送第一个ICMP数据包。这就是为什么你会得到80ms的延迟。
https://stackoverflow.com/questions/33109845
复制相似问题