網際網路控制報文協議(ICMP)
在網際網路傳輸過程中,IP資料包難免會出現差錯,通常出現差錯,處理方法就是丟棄,但是一般,出現差錯後,會傳送ICMP報文給主機,告訴它一些差錯資訊,以及對當前的網路狀態進行一個探尋。
兩類ICMP 報文:
差錯報告報文(5種)
• 目的不可達 • 源抑制(Source Quench) 當路由器發現自己的快取已滿,就會傳送源抑制報文,告訴它降低傳送速率 • 超時/超期 就是ttl超時 • 引數問題 如果發現IP資料包首部某些引數出現錯誤 • 重定向 (Redirect) 如果發現源主機發錯了,就發這個,讓源主機重新定向
網路探詢報文(2組)
• 回聲(Echo)請求與應答報文(Reply) • 時間戳請求與應答報文
例外情況
幾種不傳送 ICMP差錯報告報文的特殊情況:
- 對ICMP差錯報告報文不再傳送 ICMP差錯報告報文
- 除第1個IP資料包分片外, 對所有後續分片均不傳送ICMP差錯報告報文
- 對所有多播IP資料包均不傳送 ICMP差錯報告報文
- 對具有特殊地址( 如127.0.0.0 或 0.0.0.0) 的IP資料包不傳送ICMP 差錯報告報文
幾種 ICMP 報文已不再使用
- 資訊請求與應答報文
- 子網掩碼請求和應答報文
- 路由器詢問和通告報文
ICMP報文封裝到IP資料包中傳輸
ICMP差錯報告報文資料封裝
如果是udp段,qianbagezijie前八個位元組就是udp頭,如果是tcp,前八個位元組封裝了源埠號和目的埠號
ICMP的應用舉例: Traceroute
源主機向目的主機傳送一系列UDP資料包
- 第1組IP資料包TTL =1
- 第2組IP資料包TTL=2, etc.
- 目的埠號為不可能使用的埠號
當第n組資料包(TTL=n)到達第n個路由器時:
- 路由器丟棄資料包
- 向源主機傳送ICMP報文(type=11, code=0)
- ICMP報文攜帶路由器名稱和IP地址資訊
- 當ICMP報文返回到源主機時,記錄RTT
停止準則:
- UDP資料包最終到達目的主機
- 目的主機返回“目的埠不可達” ICMP報文 (type=3,code=3) 源主機停止