還是我之前的觀點(diǎn),越基礎(chǔ)的東西有時(shí)越難于解釋。今天我們說(shuō)說(shuō)網(wǎng)工常用的PING.
任何靠 IT 行業(yè)討飯吃的人,無(wú)論在哪個(gè)范疇工作,都一定懂得 Ping 這個(gè)指令。差不多任何作業(yè)系統(tǒng)都具備 Ping 這命令,用來(lái)做簡(jiǎn)單的 Troubleshooting。但究竟 Ping 在背后幫我們做了些什麼呢?本篇文章就從 Ping 說(shuō)起,并會(huì)涉及關(guān)于端到端的理論。
眾所周知,Ping 的作用是發(fā)訊息給一個(gè)設(shè)備,要求對(duì)方回應(yīng),從而知道對(duì)方的狀態(tài),是生是死?也可以憑它回應(yīng)的速度和成功率來(lái)判斷網(wǎng)絡(luò)狀態(tài)。為啥叫 Ping 呢?我翻查過(guò)一些資料,原來(lái)和另一門(mén)科學(xué)有著莫大關(guān)系 - 聲納探測(cè)!所謂聲納探測(cè)就是潛艇在水底發(fā)出聲波,聲波遇到障礙物時(shí)反彈給潛艇,于是潛艇就可以知道障礙物的位置了,而這個(gè)方法就是叫 Ping。聲納探測(cè)的 Ping 操作上與網(wǎng)絡(luò)的 Ping 很類(lèi)似,所以當(dāng)初程式人員把這工具命名為 Ping 實(shí)在很有心思!
Ping 是一個(gè)程序,這程序所發(fā)出的包就叫做 ICMP Packet。ICMP 結(jié)構(gòu)簡(jiǎn)單,被包在 IP Packet 里面,每個(gè) ICMP 都包含一些簡(jiǎn)單的訊息。
任何設(shè)備收到 Echo Request 通常都會(huì)回應(yīng) (Echo Reply),除非故意做了設(shè)定不回應(yīng) (例如:Firewall 設(shè)定) 或者 ICMP Traffic 被 Access-List 之類(lèi)擋下來(lái)。當(dāng)發(fā)送方收到對(duì)方回應(yīng)後就可以計(jì)算出一些結(jié)果。
RTT
Ping 通常會(huì)做多次 Echo Request,并記錄每一個(gè) Echo Request 與 Echo Reply 之間的時(shí)間差,這個(gè)時(shí)間差稱(chēng)為 Round Trip Time (RTT),也可稱(chēng) End-to-end Delay。每一個(gè) Ping 的 RTT 都不同,所以在 Ping 的 Result 中會(huì)看到最大(max)丶最小(min)和平均(avg) RTT 等數(shù)據(jù)。
丟包率 (Packet Loss %)
Ping 不一定每次都成功,剛才說(shuō)過(guò),失敗的原因可能是 Destination Unreachable 或者 Time Exceeded。也可能是 Timeout,即過(guò)了一定時(shí)間也收不到對(duì)方回應(yīng)。Packet Loss % 就是收不到回應(yīng)的機(jī)率,極具參考價(jià)值,是反映網(wǎng)絡(luò)是否穩(wěn)定的重要指標(biāo)。
TTL
Ping 送出 Packet 時(shí)會(huì)設(shè)定一個(gè) TTL (Time to Live) 的數(shù)值,預(yù)設(shè) TTL 值各作業(yè)系統(tǒng)有所不同。Packet 每次被 Route,Packet 里面的 TTL 值都會(huì)被減 1。當(dāng) Packet 到達(dá)目的地時(shí)只要看看 Packet 的 TTL 就知道 Packet 經(jīng)歷過(guò)多少個(gè) Hop 才到達(dá)。如不幸 TTL 在傳送中途被扣減至 0 仍未到達(dá)目的地,則會(huì)被丟棄。而丟棄 Packet 的 Router 會(huì)回應(yīng) Time Exceeded,這樣發(fā) ICMP 的一方就知道原因是 TTL 被減至 0 了。
端到端的延時(shí)
試想想,當(dāng)你發(fā) ICMP 給一臺(tái)設(shè)備,該設(shè)備可能在世界的另一端,Packet 到達(dá)目的地需要一點(diǎn)時(shí)間,而這段時(shí)間名為 End-to-end Delay。在網(wǎng)絡(luò)的角度來(lái)看,構(gòu)成 End-to-end Delay 的因素主要有以下 4 個(gè):
Processing Delay
當(dāng)一個(gè) Packet 到達(dá) Router 時(shí),Router 需要進(jìn)行運(yùn)算去找出 Packet 應(yīng)該被送到那里,稱(chēng)為Routing Decision。而這運(yùn)算的時(shí)間就是 Processing Delay。Processing Delay 的長(zhǎng)短取決于Router 的作業(yè)系統(tǒng)丶運(yùn)算速度甚至硬體結(jié)構(gòu)等。
Queuing Delay
透過(guò)Routing Decision,Router 決定了 Packet 的出口,就會(huì)把 Packet 移送到該 Interface,這時(shí) Packet 會(huì)在 Interface 的 Output Queue 排隊(duì),等待被處理,等待的時(shí)間就是 Queuing Delay 了。Queuing Delay 的長(zhǎng)短則要看當(dāng)時(shí)網(wǎng)絡(luò)的狀況,簡(jiǎn)單來(lái)說(shuō)就是前面有多少 Packet 在排隊(duì)。而且 Output queue 是有相應(yīng)機(jī)制的,即是說(shuō)如果發(fā)現(xiàn) queue buffer 即將爆滿(mǎn),有些 Packet 會(huì)被丟棄,不一定是隊(duì)尾的 Packet 被丟棄,可以在整條 Queue 里面抽一些 Packet 棄掉來(lái)騰出空間,這就是 Packet Drop。不過(guò),這涉及 QoS 的設(shè)定,本文暫時(shí)不展開(kāi)。
Transmission Delay
有幸生存下來(lái)的 Packet 就會(huì)慢慢移至 Output Queue 的最前頭,Interface 會(huì)把 Packet 一個(gè)一個(gè)的送上傳送媒介 (就是網(wǎng)絡(luò)線啦)。但 Interface 不能瘋狂地把 Packet 送走,它只能按預(yù)先設(shè)定好的速度來(lái)送出。
因此,如果要在 100Mbps Bandwidth 的 Interface 送出一個(gè) 1500 Bits 的 Packet,其 Transmission Delay 就是: 1500 bits / 100 Mbps = 15 ns
Propagation Delay
Packet 終于上路了,變成電子訊息或光訊息在傳送媒介上高速行走。有多高速?如果用 Copper Cable 的話,電子訊息在銅線上傳送速度約為每秒 2 x 10的8次方 公尺,如果使用光纖線,光的速度為每秒 3 x 10的8次方 公尺。假設(shè)用光纖線傳送 10 公里,Propagation Delay 為: 10 km / 3 x 10的8次方 ms = 33.36 ns
-
光纖
+關(guān)注
關(guān)注
19文章
3918瀏覽量
73193 -
ICMP
+關(guān)注
關(guān)注
0文章
52瀏覽量
14931 -
Ping
+關(guān)注
關(guān)注
0文章
69瀏覽量
15981
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論