首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解ping延迟

了解ping延迟
EN

Stack Overflow用户
提问于 2015-10-14 02:18:41
回答 2查看 1.3K关注 0票数 1

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

代码语言:javascript
复制
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数据包的时间对我来说似乎有点奇怪。如果没有延迟,我的数据包看起来是这样的:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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它们时都增加了延迟,因此时间增加了?

EN

回答 2

Stack Overflow用户

发布于 2015-10-14 02:22:29

我想说的是,您已经为每个主机添加了10毫秒的延迟,因此对h1h2都是如此,因此进行了数学运算:从h1传递到switch1的延迟为10毫秒,从switch1传递到h2的延迟为10毫秒,响应从h2传递到switch1的延迟为10毫秒,从switch1传递到<代码>D9的延迟为10毫秒。在我看来是合法的。

票数 1
EN

Stack Overflow用户

发布于 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的延迟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33109845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档