TCP/IP協議詳解卷一:Chapter6 筆記

Chapter 6 ICMP:Internet控制報文協議

ICMP = Internet Control Message Protocol = 因特網控制報文協議
ICMP經常被認爲是IP層的一個組成部分,用於傳遞差錯報文和其他需要注意的信息。
ICMP報文是被封裝在IP數據報內部進行傳輸的。
ICMP報文都包括8位類型字段、8位代碼字段、16位檢驗和字段。不同的類型和代碼對應不同的報文內容。

6.2節 ICMP報文的類型

ICMP報文可以分爲差錯報文查詢報文
類型字段有15個不同的值,每個類型還可以用代碼字段進一步描述不同的條件。
在對ICMP差錯報文進行響應時,永遠不會生成另一份ICMP差錯報文(避免無窮循環)。
ICMP差錯報文始終包含IP的首部和產生ICMP差錯報文的IP數據報的前8個字節。根據IP數據報首部中的協議字段IP數據報前8個字節中的TCP或UDP報文首部中的TCP或UDP端口號,接收ICMP差錯報文的模塊可以將其與某個協議和用戶進程聯繫起來。

下面各種情況都不會導致產生ICMP差錯報文:

  1. ICMP差錯報文(但是ICMP查詢報文可能會產生差錯報文);
  2. 目的地址是廣播地址或多播地址的IP數據報;
  3. 作爲鏈路層廣播的數據報;
  4. 不是IP分片的第一片;
  5. 源地址不是單個主機的數據報(因此,源地址不要設爲零地址、環回地址、廣播地址、多播地址)。

6.3節 ICMP地址掩碼請求與應答

ICMP地址掩碼請求用於無盤系統在引導過程中獲取自己的子網掩碼。

ICMP地址掩碼請求/應答報文 = 8位類型(請求=17,應答=18) + 8位代碼(=0) + 16位檢驗和 + 16位標識符 + 16位序列號 + 32位子網掩碼

其中,標識符和序列號由發送端任意選定,應答報文將返回這兩個字段的值,發送端就可以把請求與應答進行匹配。

6.4節 ICMP時間戳請求與應答

ICMP時間戳請求允許系統向另一個系統查詢當前時間。返回的值是從午夜開始計算的毫秒數,協調的統一時間(Coordinated Universal Time, UTC)。

ICMP時間戳請求/應答 = 8位類型(請求=13,應答=14)+ 8位代碼(=0)+ 16位檢驗和 + 16位標識符 + 16位序列號 + 32位發起時間戳 + 32位接收時間戳 + 32位傳送時間戳

其中,接收時間戳和傳送時間戳通常被設置成相同的值。

一個例子
在這裏插入圖片描述
其中,orig表示發起時間戳,recv表示接收時間戳,xmit表示發送時間戳。rtt表示往返時延round-trip time = RTT),其值等於發送端收到應答的時間值減去發送請求的時間值。difference的值是接受時間戳減去發起時間戳。
在這裏插入圖片描述如果發送端的本地時間與查詢到的時間一致,則有difference=recvorig=0.5RTTdifference = recv - orig = 0.5*RTT如果 difference0.5RTT<0difference - 0.5*RTT < 0,則說明本地時鐘比查詢主機的時鐘快(orig值過大),需要對本地時鐘進行調整 。

上面的兩行例子中接收端bsdi分別要比發送端sun慢7ms和8ms。即6ms0.52ms=7ms-6ms - 0.5*2ms=-7ms7ms0.52ms=8ms-7ms - 0.5*2ms = -8ms

其他或的時間和日期的方法還包括daytime時間服務程序、 網絡時間協議(NTP = Network Time Protocol)、分佈式時間服務(DTS)等。

6.5節 ICMP端口不可達差錯

ICMP不可達報文格式:
ICMP不可達報文 = 1字節類型(=3)+1字節代碼(0-15)+2字節檢驗和 + 4字節未用(必須爲0)+ 產生差錯的IP數據報首部(包含任何選項)+ 原始IP數據報中數據部分的前8字節

以UDP端口不可達返回的ICMP差錯報文爲例:
ICMP差錯報文 = 8字節ICMP首部 + 20字節產生差錯的IP數據報首部(包含任何選項)+ 8字節UDP首部

其中:UDP首部 = 16位源端口號 + 16位目的端口號 + 16位UDP長度 + 16位UDP檢驗和

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