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

 

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

 

 

一.首先看一下ICMP報文的類型來歸納瞭解一下ICMP的主要功能:併發

 

 

當類型代碼爲0的時候,ICMP用於返回「不可達」差錯;而當類型代碼爲5的時候,表示該ICMP報文表達「重定向」的操做。其他的類型代碼皆能夠和圖中描述一一對應。less

 

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

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

 (2)ICMP不可達報文spa

(3)路由器答報文3d

 

(4)ICMP超時報文blog

 

二.有幾種狀況不會致使產生ICMP差錯報文:路由

 

(1)ICMP差錯報文(否則有可能會一直循環)io

(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報文。

相關文章
相關標籤/搜索