PING命令详解,端到端的延时测试工具

还是我之前的观点,越基础的东西有时越难于解释 。今天我们说说网工常用的PING.
任何靠 IT 行业讨饭吃的人,无论在哪个范畴工作,都一定懂得 Ping 这个指令 。差不多任何作业系统都具备 Ping 这命令,用来做简单的 Troubleshooting 。但究竟 Ping 在背后帮我们做了些什麽呢?本篇文章就从 Ping 说起,并会涉及关于端到端的理论 。
众所周知,Ping 的作用是发讯息给一个设备,要求对方回应,从而知道对方的状态,是生是死?也可以凭它回应的速度和成功率来判断网络状态 。为啥叫 Ping 呢?我翻查过一些资料,原来和另一门科学有着莫大关系 - 声纳探测!所谓声纳探测就是潜艇在水底发出声波,声波遇到障碍物时反弹给潜艇,于是潜艇就可以知道障碍物的位置了,而这个方法就是叫 Ping 。声纳探测的 Ping 操作上与网络的 Ping 很类似,所以当初程式人员把这工具命名为 Ping 实在很有心思!
 

PING命令详解,端到端的延时测试工具

文章插图
 
 
 
Ping 是一个程序,这程序所发出的包就叫做 ICMP Packet 。ICMP 结构简单,被包在 IP Packet 里面,每个 ICMP 都包含一些简单的讯息 。
 
PING命令详解,端到端的延时测试工具

文章插图
 
任何设备收到 Echo Request 通常都会回应 (Echo Reply),除非故意做了设定不回应 (例如:Firewall 设定) 或者 ICMP Traffic 被 Access-List 之类挡下来 。当发送方收到对方回应後就可以计算出一些结果 。
 
PING命令详解,端到端的延时测试工具

文章插图
 
RTT
Ping 通常会做多次 Echo Request,并记录每一个 Echo Request 与 Echo Reply 之间的时间差,这个时间差称为 Round Trip Time (RTT),也可称 End-to-end Delay 。每一个 Ping 的 RTT 都不同,所以在 Ping 的 Result 中会看到最大(max)丶最小(min)和平均(avg) RTT 等数据 。
丢包率 (Packet Loss %)
Ping 不一定每次都成功,刚才说过,失败的原因可能是 Destination Unreachable 或者 Time Exceeded 。也可能是 Timeout,即过了一定时间也收不到对方回应 。Packet Loss % 就是收不到回应的机率,极具参考价值,是反映网络是否稳定的重要指标 。
TTL
Ping 送出 Packet 时会设定一个 TTL (Time to Live) 的数值,预设 TTL 值各作业系统有所不同 。Packet 每次被 Route,Packet 里面的 TTL 值都会被减 1 。当 Packet 到达目的地时只要看看 Packet 的 TTL 就知道 Packet 经历过多少个 Hop 才到达 。如不幸 TTL 在传送中途被扣减至 0 仍未到达目的地,则会被丢弃 。而丢弃 Packet 的 Router 会回应 Time Exceeded,这样发 ICMP 的一方就知道原因是 TTL 被减至 0 了 。
端到端的延时
 
PING命令详解,端到端的延时测试工具

文章插图
 
试想想,当你发 ICMP 给一台设备,该设备可能在世界的另一端,Packet 到达目的地需要一点时间,而这段时间名为 End-to-end Delay 。在网络的角度来看,构成 End-to-end Delay 的因素主要有以下 4 个:
Processing Delay
当一个 Packet 到达 Router 时,Router 需要进行运算去找出 Packet 应该被送到那里,称为Routing Decision 。而这运算的时间就是 Processing Delay 。Processing Delay 的长短取决于Router 的作业系统丶运算速度甚至硬体结构等 。
Queuing Delay
透过Routing Decision,Router 决定了 Packet 的出口,就会把 Packet 移送到该 Interface,这时 Packet 会在 Interface 的 Output Queue 排队,等待被处理,等待的时间就是 Queuing Delay 了 。Queuing Delay 的长短则要看当时网络的状况,简单来说就是前面有多少 Packet 在排队 。而且 Output queue 是有相应机制的,即是说如果发现 queue buffer 即将爆满,有些 Packet 会被丢弃,不一定是队尾的 Packet 被丢弃,可以在整条 Queue 里面抽一些 Packet 弃掉来腾出空间,这就是 Packet Drop 。不过,这涉及 QoS 的设定,本文暂时不展开 。
Transmission Delay
有幸生存下来的 Packet 就会慢慢移至 Output Queue 的最前头,Interface 会把 Packet 一个一个的送上传送媒介 (就是网络线啦) 。但 Interface 不能疯狂地把 Packet 送走,它只能按预先设定好的速度来送出 。
因此,如果要在 100Mbps Bandwidth 的 Interface 送出一个 1500 Bits 的 Packet,其 Transmission Delay 就是: 1500 bits / 100 Mbps = 15 ns
Propagation Delay
Packet 终于上路了,变成电子讯息或光讯息在传送媒介上高速行走 。有多高速?如果用 Copper Cable 的话,电子讯息在铜线上传送速度约为每秒 2 x 10的8次方 公尺,如果使用光纤线,光的速度为每秒 3 x 10的8次方 公尺 。假设用光纤线传送 10 公里,Propagation Delay 为: 10 km / 3 x 10的8次方 ms = 33.36 ns


推荐阅读