還是我之前的觀點,越基礎的東西有時越難于解釋。今天我們說說網工常用的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