網際控制報文協議 ICMP

什麼是ICMP協議

ICMP協議是IP協議的附屬協議,由於IP協議並不提供可靠傳輸,即使數據丟失了也不知道。爲了提高IP數據報的交付成功的機會,在網絡層提供了ICMP協議。在IP丟包的時候ICMP可以告訴源主機丟包的原因.

ICMP的報文作爲IP數據報的數據,加上IP首部組成IP數據報發送出去。ICMP報文格式如圖:
在這裏插入圖片描述

ICMP報文種類

ICMP報文分爲兩種:ICMP差錯報文ICMP詢問報文

ICMP報文的前4個字節是統一的格式,共有三個字段:類型、代碼、校驗和。接着四個字節和ICMP類型有關,最後面是數據字段,長度取決於ICMP報文類型。
在這裏插入圖片描述
在IP數據報的首部、以太網幀首部、傳輸層TCP/UDP首部都存在校驗和

其中IP數據報,以太網幀的首部校驗和只校驗首部。傳輸層和這裏的ICMP首部校驗和將首部和數據部分共同校驗。

ICMP差錯報文

所有的ICMP差錯報告報文都具有同樣的格式。
把收到的需要進行差錯報告的IP數據報的首部和前8個字節提取出來,作爲ICMP報文的數據字段。再加上ICMP報文的前8個字節,就構成了ICMP差錯報告報文。

提取IP數據報數據部分的前8個字節是爲了獲取傳輸層的端口號(對於TCP/UDP),以及傳輸層報文的發送序號(對於TCP)。
在這裏插入圖片描述

ICMP詢問報文

常用的ICMP詢問報文有兩種:回送請求與回答報文時間戳請求與回答報文

1) 回送請求與回答報文,主機或路由器向一個特定的目的主機發出的詢問,收到請求的主機必須給發送請求的主機或路由器發送ICMP回送回答報文。這種詢問用於測試目的站是否可達以及瞭解有關狀態。
2) 時間戳請求與回答報文,請求某個主機或路由器回答當前的日期和時間,可用來進行時鐘同步和測量時間。

ICMP應用舉例

ping應用程序,用於測試兩個主機之間的連通性。ping 使用的就是ICMP詢問報文中的回送請求與回答報文。ping應用程序並不經過傳輸層,而是直接應用層使用網絡層。

windows下測試結果:
在這裏插入圖片描述

traceroute應用,用來跟蹤一個IP數據報從源主機到目的主機的路徑。windows下是tracert命令。

原理:
traceroute 從源主機向目的主機發送一連串的IP數據報,數據報中封裝的是無法交付的UDP數據報。設置第一個IP數據報的TTL=1,當IP數據報到達路徑上的第一個路由器後(第一跳),TTL-=1,由於TTL==0,因此路由器將IP數據報丟棄並向源主機發送ICMP時間超時差錯報告報文。

源主機收到ICMP差錯報告報文後,發送第二個IP數據報,這時TTL=2,同樣經過兩跳後TTL變爲0,路由器將IP數據報丟棄並向源主機發送ICMP時間超時差錯報告報文。

一直重複此步驟,直到TTL的大小可以讓數據遞達目的端。但由於IP數據報中封裝的是不可交付的UDP數據報,因此目的主機向源主機發送ICMP終點不可達差錯報告報文。

這樣,源主機通過每次收到的ICMP報文達到了目的。

主要參考書籍 《計算機網絡第五版》

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