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回送請求報文。

在這里插入圖片描述

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

ICMP應用實例——Traceroute

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

基於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,到達目的主機,目的主機回復,終止。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM