<再看TCP/IP第一卷>關於網絡層及協議細節---ICMP協議幾個要注意的地方


 

在TCP/IP協議族中,ICMP協議是一個介於網絡層和傳輸層中間的一個協議,許多材料都會認為ICMP是網絡層的一個部分,但是ICMP協議的報頭是被包裹在IP協議之中的,而UDP協議又可以被ICMP協議包裝,所以不妨認為它是在一個所謂的“中間層”。

 

 

一.首先看一下ICMP報文的類型來概括了解一下ICMP的主要功能:

 

 

當類型代碼為0的時候,ICMP用於返回“不可達”差錯;而當類型代碼為5的時候,表示該ICMP報文表達“重定向”的操作。其余的類型代碼皆可以和圖中描述一一對應。

 

下列圖是ICMP不同類型的報文的具體格式:

(1)ICMP時間戳請求和應答報文

 (2)ICMP不可達報文

(3)路由器答報文

 

(4)ICMP超時報文

 

二.有幾種情況不會導致產生ICMP差錯報文:

 

(1)ICMP差錯報文(不然有可能會一直循環)

(2)目的地址是廣播地址或者多播地址的IP數據報

(3)作為鏈路層廣播的數據報(ARP,RARP)

(4)不是IP分片的第一片

(5)源地址不是單個主機的數據報。源地址不能為零地址,loopback或者廣播,多播地址。

 

三.ICMP報文是在主機之間交換的,不需要端口號

 

四.traceroute工具的實質:

 

首先發送一份TTL字段為1的IP數據給目的主機,處理這份數據的第一個路由器將TTL值減1,丟棄該份數據報,並發回一份超時ICMP報文,這樣就得到了該路徑中的第一個路由器的地址,然后traceroute程序發送一份TTL值為2的數據報(這里因為IP協議的connectionless特性,有可能是前后兩個ICMP報文來自不同的路徑),這樣我們就得到了第二個路由器的地址,繼續這個過程直到該份數據報到達目的主機,但是目的主機哪怕接收到TTL值為1的IP數據報,也不會丟棄該數據並產生一ICMP報文,traceroute程序發送一份UDP數據報給目的主機,並選擇一個不能的端口作為UDP端口,使目的主機的任何一個應用程序都不可能使用該端口,從而返回一份“不可達”ICMP報文。

 


免責聲明!

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



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