TCP IP之ICMP協議

chi633發表於2017-12-21

網際網路控制報文協議(ICMP)

在網際網路傳輸過程中,IP資料包難免會出現差錯,通常出現差錯,處理方法就是丟棄,但是一般,出現差錯後,會傳送ICMP報文給主機,告訴它一些差錯資訊,以及對當前的網路狀態進行一個探尋。

兩類ICMP 報文:

差錯報告報文(5種)

• 目的不可達 • 源抑制(Source Quench) 當路由器發現自己的快取已滿,就會傳送源抑制報文,告訴它降低傳送速率 • 超時/超期 就是ttl超時 • 引數問題 如果發現IP資料包首部某些引數出現錯誤 • 重定向 (Redirect) 如果發現源主機發錯了,就發這個,讓源主機重新定向

網路探詢報文(2組)

• 回聲(Echo)請求與應答報文(Reply) • 時間戳請求與應答報文

image.png

例外情況

幾種不傳送 ICMP差錯報告報文的特殊情況:

  • 對ICMP差錯報告報文不再傳送 ICMP差錯報告報文
  • 除第1個IP資料包分片外, 對所有後續分片均不傳送ICMP差錯報告報文
  • 對所有多播IP資料包均不傳送 ICMP差錯報告報文
  • 對具有特殊地址( 如127.0.0.0 或 0.0.0.0) 的IP資料包不傳送ICMP 差錯報告報文

幾種 ICMP 報文已不再使用

  • 資訊請求與應答報文
  • 子網掩碼請求和應答報文
  • 路由器詢問和通告報文

ICMP報文封裝到IP資料包中傳輸

image.png

ICMP差錯報告報文資料封裝

image.png

如果是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) 源主機停止

相關文章