TCP/IP illustrated 閱讀筆記(六) ICMP協議

1. ICMP簡介(ICMPv4)

ICMP全稱爲Internet ControlMessage Protocol

ICMP爲IP協議提供控制信息和diagnostic

ICMP裝在IP數據包中,但是不是傳輸層協議(該層的協議爲應用進程提供端到端的通信服務)也不是網絡層協議(網絡層提供路由和尋址的功能),算2.5層

需要注意的是,路由器由於擁塞丟包的行爲不會生成ICMP message

Type表明ICMP類型,Code表明細分類型

2. ICMP功能

ICMP分爲兩類:errormessage 和  query/informationalmessage

ICMP錯誤消息中攜帶了發生錯誤的IP數據包的部分數據(包括IP header,大概500字節)

哪些些數據包不會引發ICMP error message

ICMPv4error message

IPv4目的地址爲廣播地址或者多播地址

數據鏈路層廣播

fragment數據包非第一個包(應該指的是IP分段四層包)

源地址(沒有指明是否爲IP地址,應該包括二層地址)不是指向單個host(比如廣播、全0地址,多播地址等)

當系統進行ICMP生成速率限制時也不會每個數據包都產生ICMP(避免ICMP佔用過多網絡資源)

3. 常用ICMP error message類型

3.1 Destination Unreachable(Type3)

Host Unreachable (Code1)

在direct delivery情況下,無法delivery 給目的IP(比如發送ARP消息,但是ARP的目標IP地址不存在)

Communication Administratively Prohibited (Code 13)

通信被管理員級別的對象阻止了,通常是防火牆導致的

Port Unreachable

數據包到達了目的host,但是端口不不可達,即沒有應用程序當前從這個端口接受數據包(如UDP協議的端口)

3.2 Redirect (Type 5)

host發送數據包時的下一跳路由器不是正確的路由器,當前路由器會將這個數據不傲轉發給正確的路由器,並使用ICMP將這個消息告訴host,讓host知道數據包下一跳應該是哪個路由器(IP地址),比如一個網絡中有兩個網關,一個host發錯網關了,這個時候就可以產生重定向了(沒有試驗過,看描述是這樣的)

3.3 Time Exceeded(Type 11)

ttl耗盡了,路由器丟掉這個數據包是就會發一個Time Exceeded ICMP

traceroute 使用這個ICMP來獲取路徑,traceroute先發一個ttl爲1的UDP包,的獲得第一跳(第一跳路由器就會吧這個包丟掉,併發ICMP),,然後發一個ttl爲2的UDP包,獲取第二跳路由器,以此類推,直到到達最終目的地。

3.4 Parameter Problem (Type 12)

如果IP包中有些域出錯了,並且沒有合適的ICMP消息去告知這個錯誤,就使用這個ICMP告訴源主機是哪個域出錯了

4. 常用ICMP query/informational message類型

Echo Request/Reply (Type 0/8) ,對,就是ping用的

發送一個Request 然後接收Reply,這就是ping

Request中使用Identifier域來標識不同的Echo Request包(通常用進程的pid來作爲identifier)

Reqeust包中存了發送時的時間,Reply時會複製Request的內容,所以一併複製了發送時的時間,Reply接收者(發送Request的人),讀取時間然後和當前時間相減就獲得RTT(round-trip time)了

Router DIscovery(type9,10)

用於路由發現,不過現在IPv4中基本由DHCP來做,Mobile IP中涉及到了這個消息類型,沒有細說,後面可能會看到吧。


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