Ping、Traceroute工做原理

在工做開發過程當中,咱們常常會使用到ping和traceroute。在這裏,咱們將細述其工做原理,讓你在會用的基礎之上理解其內部工做過程。緩存

ICMP應用實例——Ping

Ping 是 ICMP 的一個重要應用,主要用來測試兩臺主機之間的連通性。Ping 的原理是經過向目的主機發送 ICMP Echo 請求報文,目的主機收到以後會發送 Echo 回答報文。Ping 會根據時間和成功響應的次數估算出數據包往返時間以及丟包率。服務器

Ping的完整工做流程:
Ping本質上是ICMP數據包,因此其工做流程就是ICMP數據包的發送與解析流程。
大體流程以下:
構造ICMP數據包-->構造IP數據包-->構造以太網數據幀----物理傳輸到目標主機---->獲取以太網數據幀-->解析出IP數據包-->解析出ICMP數據包-->發送回送應答報文微信

本地主機處理流程:網絡

  1. 在本地,ping命令會構建一個ICMP數據包(構造回送請求報文)
  2. 將該ICMP數據包和目標IP地址給IP協議,IP協議將本地地址做爲源地址,與目的地址等構造IP數據包
  3. 根據本地ARP緩存查找目的地址IP對應的MAC地址,若是緩存中沒有則經過ARP協議找到對應IP的MAC地址。將MAC地址交給數據鏈路層以構造數據幀
  4. 經物理層發送給目的主機

目的主機處理流程:工具

  1. 目的主機接收到數據包
  2. 物理層接收到二進制數據流經數據鏈路層,按照以太網協議解析出數據幀,若是數據幀中的目標MAC地址與本機MAC地址相同,則接收該數據包,不然丟棄該數據包。
  3. 接收到該數據包以後,經網絡層解析出IP數據包,經過IP包頭中的協議字段判斷出是ICMP數據包。以後解析出ICMP數據包,發現是回送請求報文(ping request)後立刻構建一個ICMP回送應答報文(ping reply)
  4. 將封裝好的ICMP數據包經網絡層、數據鏈路層、物理層發送回源主機

因此,Ping的本質其實就是ICMP回送請求報文和回送應答報文。咱們可經過Wireshark抓包工具對Ping進行分析。使用ping命令:測試

在這裏插入圖片描述

本機會向遠端主機發送ICMP回送請求報文。3d

在這裏插入圖片描述

遠端主機收到後會發送回送應答報文:
在這裏插入圖片描述code

ICMP應用實例——Traceroute

Traceroute 是 ICMP 的另外一個應用,用來跟蹤一個分組從源點到終點的路徑。有2種實現方案:基於UDP實現和基於ICMP實現。blog

基於UDP實現traceroute工做原理

在基於UDP的實現中,客戶端發送的數據包是經過UDP協議來傳輸的,使用了一個大於30000的端口號,服務器在收到這個數據包的時候會返回一個端口不可達的ICMP錯誤信息,客戶端經過判斷收到的錯誤信息是TTL超時仍是端口不可達來判斷數據包是否到達目標主機。流程以下:圖片

  1. 源主機向目的主機發送一連串的 IP 數據報(UDP報文)。第一個數據報 P1 的生存時間 TTL 設置爲 1,當 P1 到達路徑上的第一個路由器 R1 時,R1 收下它並把 TTL 減 1,此時 TTL 等於 0,R1 就把 P1 丟棄,並向源主機發送一個 ICMP 時間超過差錯報告報文;
  2. 源主機接着發送第二個數據報 P2,並把 TTL 設置爲 2。P2 先到達 R1,R1 收下後把 TTL 減 1 再轉發給 R2,R2 收下後也把 TTL 減 1,因爲此時 TTL 等於 0,R2 就丟棄 P2,並向源主機發送一個 ICMP 時間超過差錯報文。
  3. 不斷執行這樣的步驟,直到最後一個數據報剛剛到達目的主機,主機不轉發數據報,也不把 TTL 值減 1。可是由於數據報封裝的是沒法交付的 UDP,所以目的主機要向源主機發送 ICMP 終點不可達差錯報告報文。
  4. 以後源主機知道了到達目的主機所通過的路由器 IP 地址以及到達每一個路由器的往返時間。

Linux中的traceroute就是這種實現方式。

基於ICMP實現的tracert工做原理

在這一種實現中咱們不使用UDP協議,而是直接發送一個ICMP回顯請求(echo request)數據包,服務器在收到回顯請求的時候會向客戶端發送一個ICMP回顯應答(echo reply)數據包。流程與上面類似,只是最後判斷結束上爲目標主機(而不是中間通過的主機或路由器)返回一個ICMP回顯應答,則結束。

Windows中的tracert就是這種實現方式。利用Wireshark分析以下:
在cmd下輸入tracert www.baidu.com
在這裏插入圖片描述

每一跳默認發送三個數據包,咱們會看到下面這樣的輸出:
在這裏插入圖片描述
在這裏插入圖片描述

能夠看到TTL逐個遞增,而且最終到達目的主機180.97.33.107,到達目的主機,目的主機回覆,終止。

關注微信公衆號,天天進步一點點!

相關文章
相關標籤/搜索