天天看點

網際控制封包協定-ICMP協定

網際控制封包協定-ICMP協定

    • 1、ICMP協定的作用
    • 2、ICMP封包格式
    • 3、ICMP封包的種類
      • 3.1、ICMP差錯報告封包
      • 3.2、ICMP詢問封包

1、ICMP協定的作用

為了更有效地轉發IP 資料報和提高傳遞成功的機會,在網際層使用了網際控制封包協定ICMP 。ICMP允許主機或路由器報告差錯情況和提供有關異常情況的報告。ICMP 是網際網路的标準協定。但ICMP不是高層協定(看起來好像是高層協定,因為ICMP 封包是裝在IP資料報中,作為其中的資料部分),而是IP層的協定。

2、ICMP封包格式

ICMP封包作為IP層資料報的資料,加上資料報的首部,組成IP資料報發送出去。ICMP封包格式如圖4-27所示。

網際控制封包協定-ICMP協定

3、ICMP封包的種類

ICMP封包的種類有兩種,即ICMP差錯報告封包和ICMP詢問封包。

ICMP封包的前4個位元組是統一的格式, 共有三個字段:類型、代碼和檢驗和。接着的4個位元組的内容與ICMP的類型有關。最後面是資料字段,其長度取決于ICMP的類型。表4-8給出了幾種常用的ICMP封包類型。

網際控制封包協定-ICMP協定

ICMP封包的代碼字段是為了進一步區分某種類型中的幾種不同情況。檢驗和字段用來檢驗整個ICMP封包。由于IP資料報首部的檢驗和并不檢驗IP資料報的内容,是以不能保證經過傳輸的ICMP封包不産生差錯。

3.1、ICMP差錯報告封包

表4-8給出的ICMP差錯報告封包共有四種,即:

  • (1)終點不可達

    當路由器或主機不能傳遞資料報時就向源點發送終點不可達封包。

  • (2)時間超過

    當路由器收到生存時間為零的資料報時,除丢棄該資料報外,還要向源點發送時間超過封包。當終點在預先規定的時間内不能收到一個資料報的全部資料報片時,就把己收到的資料報片都丢棄,并向源點發送時間超過封包。

  • (3)參數問題

    當路由器或目的主機收到的資料報的首部中有的字段的值不正确時,就丢棄該資料報,并向源點發送參數問題封包。

  • (4)改變路由(重定向)

    路由器把改變路由封包發送給主機,讓主機知道下次應将資料報發送給另外的路由器(可通過更好的路由)。

所有的ICMP差錯報告封包中的資料字段都具有同樣的格式(圖4-28)。 把收到的需要進行差錯報告的IP資料報的首部和資料字段的前8個位元組提取出來,作為ICMP封包的資料字段。再加上相應的ICMP差錯報告封包的前8個位元組,就構成了ICMP差錯報告封包。提取收到的資料報的資料字段前8個位元組是為了得到運輸層的端口号(對于TCP和UDP)以及運輸層封包的發送序号(對于TCP)。 這些資訊對源點通知高層協定是有用的。整個ICMP封包作為IP資料報的資料字段發送給源點。

網際控制封包協定-ICMP協定

下面是不應發送ICMP差錯報告封包的幾種情況。

  • 對ICMP差錯報告封包,不再發送ICMP差錯報告封包。
  • 對第一個分片的資料報片的所有後續資料報片,都不發送ICMP差錯報告封包。
  • 對具有多點傳播位址的資料報,都不發送ICMP差錯報告封包。
  • 對具有特殊位址(如127.0.0.0 或0.0.0.0)的資料報,不發送ICMP差錯報告封包。

3.2、ICMP詢問封包

常用的ICMP詢問封包有兩種,即:

  • (1),回送請求和回答ICMP回送請求封包是由主機或路由器向一個特定的目的主機發出的詢問。收到此封包的主機必須給源主機或路由器發送ICMP回送回答封包。這種詢問封包用來測試目的站是否可達以及了解其有關狀态。
  • (2),時間戳請求和回答

    ICMP時間戳請求封包是請某台主機或路由器回答目前的日期和時間。在ICMP時間戳回答封包中有一個32位的字段,其中寫入的整數代表從1900年1月1日起到目前時刻一共有多少秒。時間戳請求與回答可用于時鐘同步和時間測量。

繼續閱讀