还是我之前的观点,越基础的东西有时越难于解释。今天我们说说网工常用的PING.
任何靠 IT 行业讨饭吃的人,无论在哪个范畴工作,都一定懂得 Ping 这个指令。差不多任何作业系统都具备 Ping 这命令,用来做简单的 Troubleshooting。但究竟 Ping 在背后帮我们做了些什麽呢?本篇文章就从 Ping 说起,并会涉及关于端到端的理论。
众所周知,Ping 的作用是发讯息给一个设备,要求对方回应,从而知道对方的状态,是生是死?也可以凭它回应的速度和成功率来判断网络状态。为啥叫 Ping 呢?我翻查过一些资料,原来和另一门科学有着莫大关系 - 声纳探测!所谓声纳探测就是潜艇在水底发出声波,声波遇到障碍物时反弹给潜艇,于是潜艇就可以知道障碍物的位置了,而这个方法就是叫 Ping。声纳探测的 Ping 操作上与网络的 Ping 很类似,所以当初程式人员把这工具命名为 Ping 实在很有心思!
Ping 是一个程序,这程序所发出的包就叫做 ICMP Packet。ICMP 结构简单,被包在 IP Packet 里面,每个 ICMP 都包含一些简单的讯息。
任何设备收到 Echo Request 通常都会回应 (Echo Reply),除非故意做了设定不回应 (例如:Firewall 设定) 或者 ICMP Traffic 被 Access-List 之类挡下来。当发送方收到对方回应後就可以计算出一些结果。
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 了。
端到端的延时
试想想,当你发 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