为什么我直接 ping 10.0.1.1 和 ping google.com 时得到的 ping 时间不同?

为什么我直接 ping 10.0.1.1 和 ping google.com 时得到的 ping 时间不同?

使用地铁为了收集一些统计数据,如果我运行sudo mtr 10.0.1.1ping 我的路由器,结果看起来很糟糕:

                              My traceroute  [v0.85]
Johns-MacBook-Air.local (0.0.0.0)                         Tue Feb 11 10:11:32 2014
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                          Packets               Pings
 Host                                   Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 10.0.1.1                             0.0%    52   17.1  79.0   1.0 298.9 103.1

但如果我运行sudo mtr google.com,并只看第一跳,它看起来很好:

                              My traceroute  [v0.85]
Johns-MacBook-Air.local (0.0.0.0)                         Tue Feb 11 10:12:55 2014
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                          Packets               Pings
 Host                                   Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 10.0.1.1                             0.0%    40    1.4   1.7   1.4   4.1   0.5
 2. mosca-lan207.gw.monkeybrains.net     0.0%    39   13.7  23.8   5.6 111.4  22.9
 3. grillo.grillo-mosca-10GB.core.monke  0.0%    39    6.0  10.0   5.5  21.7   3.6
 [snip]

为什么会发生这种情况?

答案1

您有一个路由器,它非常擅长路由数据包。但它不是 ping 响应器,因此它不太擅长响应 ping。

路由器响应 ping 比转发数据包需要做更多的工作,而且这些工作都不是路由器优化的。转发数据包通常完全在中断级别进行,使用所有经过高度优化的硬件和软件来尽快完成转发。响应 ping 需要接收数据包、发现它是本地的、安排一些更高级别的代码在进程级别运行、等待该代码运行(因为它与其他长时间运行的进程级函数竞争)、形成回复数据包、将该回复数据包排队,并调度代码以运行该队列。

基本上,路由器有一条快速路径和一条慢速路径。快速路径处理路由。慢速路径处理其他所有事情。

相关内容