TCP/IP詳解(六)ICMP:Internet控制報文協議

       I C M P經常被認爲是 I P層的一個組成部分。它傳遞差錯報文以及其他需要注意的信息。I C M P報文通常被 I P層或更高層協議( T C P或U D P)使用。一些 I C M P報文把差錯報文返回給用戶進程。


一、ICMP報文格式


類型:所有報文的前4個字節都是一樣的,類型字段可以有 1 5個不同的值,以描述特定類型的 I C M P報文。某些 I C M P報文還使用代碼字段的值來進一步描述不同的條件。

檢驗和字段覆蓋整個 ICMP報文。使用的算法與我們在 3.2節中介紹的IP首部檢驗和算法相同。


二、ICMP報文類型


      不同類型由報文中的類型字段和代碼字段來共同決定。

      當發送一份 ICMP差錯報文時,報文始終包含 IP的首部產生ICMP差錯報文的 IP數據報的前8個字節。這樣,接收 I C M P差錯報文的模塊就會把它與某個特定的協議(根據 I P數據報首部中的協議字段來判斷)和用戶進程(根據包含在 I P數據報前 8個字節中的 T C P或U D P報文首部中的TCP或UDP端口號來判斷)聯繫起來。

      下面各種情況都不會導致產生 ICMP差錯報文:
      1) ICMP差錯報文(但是, ICMP查詢報文可能會產生 ICMP差錯報文)。
      2) 目的地址是廣播地址(見圖 3-9)或多播地址( D類地址,見圖1-5)的IP數據報。
      3) 作爲鏈路層廣播的數據報。
      4) 不是IP分片的第一片(將在 11.5節介紹分片)。
      5) 源地址不是單個主機的數據報。這就是說,源地址不能爲零地址、環回地址、廣播地址或多播地址。
      這些規則是爲了防止過去允許 ICMP差錯報文對廣播分組響應所帶來的廣播風暴。


下面介紹幾種ICMP類型:

三、ICMP地址掩碼請求與應答

      I C M P地址掩碼請求用於無盤系統在引導過程中獲取自己的子網掩碼( 3 . 5節)。系統廣播它的ICMP請求報文。無盤系統獲取子網掩碼的另一個方法是 B O O T P協議。 I C M P地址掩碼請求和應答報文的格式如圖 6-4所示。


        I C M P報文中的標識符和序列號字段由發送端任意選擇設定,這些值在應答中將被返回。這樣,發送端就可以把應答與請求進行匹配。

       RFC規定,除非系統是地址掩碼的授權代理,否則它不能發送地址掩碼應答。但是,大多數主機在收到請求時都發送一個應答,甚至有一些主機還發送差錯的應答。


四、ICMP時間戳請求與應答

       I C M P時間戳請求允許系統向另一個系統查詢當前的時間。返回的建議值是自午夜開始計算的毫秒數,協調的統一時間( Coordinated Universal Time, UTC )(早期的參考手冊認爲U T C是格林尼治時間)。這種 I C M P報文的好處是它提供了毫秒級的分辨率,而利用其他方法從別的主機獲取的時間(如某些 U n i x系統提供的 r d a t e命令)只能提供秒級的分辨率。由於返回的時間是從午夜開始計算的,因此調用者必須通過其他方法獲知當時的日期,這是它的一個缺陷。ICMP時間戳請求和應答報文格式如圖 6-6所示。


例子:

      A向B發送時間請求,圖中數值爲自午夜開始計算的毫秒數


  A的時間應設爲 T(A) = 83573338 + (83573340 - 83573336) - (83573338 - 83573336) / 2


五、ICMP端口不可達差錯

      U D P的規則之一是,如果收到一份 U D P數據報而目的端口與某個正在使用的進程不相符,那麼U D P返回一個 I C M P不可達報文。

      ICMP端口不可達差錯報文一般格式


        ICMP端口不可達差錯代碼是3。另外,儘管圖6-10指出了在ICMP報文中的第二個32 bit字必須爲0,但是當代碼爲4時(“需要分片但設置了不分片比特”),路徑MTU發現機制(2.9節)卻允許路由器把外出接口的MTU填在這個32 bit字的低16 bit中。

     例子:A從2924端口向B的8888端口請求文件temp.foo,而8888端口沒有提供服務


       注意,I C M P報文是在主機之間交換的,而不用目的端口號,而每個 2 0字節的U D P數據報

       I C M P的一個規則是, I C M P差錯報文(參見圖 6 - 3的最後一列)必須包括生成該差錯報文的數據報 I P首部(包含任何選項),還必須至少包括跟在該 I P首部後面的前 8個字節。在我們的例子中,跟在 IP首部後面的前8個字節包含 UDP的首部。一個重要的事實是包含在 U D P首部中的內容是源端口號和目的端口號。

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