路由與交換 入門2 ICMP 1

1. Ping是什麼?

答: Ping是一個診斷網絡連通情況的工具, 用來檢測Internet上遠程目的主機是否可到達.

2. Ping工作原理是什麼?

答: Ping通過向遠程目的主機發送Ping包(即ICMP迴應請求(Echo Request)報文), 遠程目的主機收到此報文後,將回復Echo包(即ICMP 迴應應答(Echo Reply)報文). 發送Ping的主機收到此響應後就知道遠程主機處於在線存活狀態, 可以到達.

3. 爲什麼有Ping?

答: 互聯網是不可靠的, 遠程主機隨時可能處於失效狀態. 用戶經常需要知道遠程主機是否處於在線狀態, 或者診斷網絡是否可用. Ping利用ICMP消息達到此目的, 而且操作簡單.

4. 什麼是ICMP? 它和Ping有什麼關係?

答: ICMP爲Internet控制報文協議, 用於在主機和路由器之間傳遞控制信息, 提供差錯報告和網絡診斷的功能.Ping是常用的ICMP工具,它利用ICMP迴應請求報文和ICMP 迴應應答報文在源和目的主機之間交換信息,用來判斷對端是否在線.

5. 怎麼判定Ping 的成功、失敗?

答: 當發生Ping的主機收到了遠程主機回覆的Echo包時, 就說明Ping成功執行了. 否則, Ping將返回錯誤信息, 例如請求超時, 遠程主機不可達等錯誤信息.

6. Ping失敗了是否說明遠程主機是失效的?

答: 當遠程主機處於失效狀態時, 無法返回Echo包, Ping是失敗的. 但是有時候爲了安全起見, 路由器或者遠程主機關閉了ICMP部分或者全部功能, 導致不回覆Echo包, 這樣Ping的結果也是失敗的. 但是遠程主機是存活的.

7. 爲什麼我們常見到ping的結果是"..!!!"?

答: 我們用"."和"!"來簡單表示Ping的成功和失敗.

"!"表示收到遠端回覆的Echo包, Ping成功.

"."表示沒有收到遠端的Echo包, 等待超時結束, Ping失敗.

8. 什麼是Ping超時?

答: 由於主機發出Ping包後需要等待目的主機回覆的Echo包才能獲知目的主機在線,但在有些情況下Ping會失敗,主機無法收到Echo包,因此主機需要一個等待超時機制以結束本次Ping行爲,即主機發出Ping包後啓動一個定時器,如果在指定時間內沒有收到Echo包,則定時器超時,結束本次操作.

附錄:(趣味知識)

1. ICMP和四層協議UDP/TCP一樣,有自己的頭標, 通過僞頭計算校驗和, 並需要被IP頭標封裝, 但是爲何說ICMP是三層協議?

答: ICMP協議不具備四層協議的特性, 四層協議提供的是數據傳輸服務.ICMP協議通常被認爲是IP的附屬協議, 是IP的組成部分, 主要是用來傳輸一些控制信息, 因此是一個三層協議.雖然ICMP有自己的頭標,但是必須被封裝在IP數據報中才能進行路由.

2. 對同一個目的地址Ping多次, 會發現第一次的RTT值稍大於後續次數的RTT(Round-Trip Time: 往返時延)值,如下:

Host1#ping linjiaen.blog.51cto.com

Pinging linjiaen.blog.51cto.com [118.144.78.36] with 32 bytes of data:

Reply from 118.144.78.36: bytes=32 time=58ms TTL=53

Reply from 118.144.78.36: bytes=32 time=54ms TTL=53

Reply from 118.144.78.36: bytes=32 time=53ms TTL=53

Reply from 118.144.78.36: bytes=32 time=52ms TTL=53

請解釋原因.

答: 在進行第一個Ping操作時, 由於本地主機不知道遠程主機的MAC地址, 因此需要先進性ARP操作. 故增加了TTL時間.

3. 如果試圖Ping一個廣播地址將會怎樣?

答: Ping一個廣播地址是允許的, 如果Ping一個子網的廣播地址, 此子網內的所有主機將回復Echo包. 這樣做的一個目的是希望知道這個子網內當前有哪些主機處於存活狀態, 但是也增加了網絡流量.

由於這個特點, ***常用Ping進行DOS(denial-of-service)***, 例如Smurf attack, 可參考http://en.wikipedia.org/wiki/Smurf_attack.

4. 對同一個目的地址Ping多次, 主機將發送多個Ping包, 於是會收到多個Echo包. 主機是

如何將這些Echo包與之前發送的Ping包進行一一對應的以正確計算每次Ping的RTT值?

答: 迴應請求/迴應應答報文頭標中有一個域爲 Sequence Number (序列號),Ping程序通過此域將每個Echo包與發送的Ping包進行區分和匹配. 實現上序列號常常從1開始增加.

序列號的另外作用是通過它可以查看是否有分組丟失、失序或重複.

5. 在同一臺主機上打開兩個Ping程序, 並同時Ping同一個目的主機, 每個Ping程序將發送

Ping包, 並分別收到Echo包. 主機是如何將這些Echo包與Ping應用程序進行一一對應以正確計算每個Ping程序的RTT值?

答: 迴應請求/迴應應答報文頭標中有一個域爲Identifier(標識符), 主機通過此域區分不同Ping程序的迴應請求/迴應應答報文. Unix實現上把ICMP報文中的標識符域設置爲發送進程的ID號, 這樣即使在同一臺主機上同時運行了多個ping程序實例, ping程序也可以識別出返回的信息.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章