TCP/IP協議族——網際控制報文協議ICMP

一 引入目的

IP協議沒有差錯報告或差錯糾正機制;IP協議還缺少主機和管理查詢所需要的機制。ICMP是設計來彌補上述兩個缺憾的。

備註:ICMP本身是一個網絡層協議,但是ICMP報文首先要封裝成IP數據報(協議字段是1),然後才被傳遞到下一層。

二 報文

2.1 分類

ICMP報文可劃分爲兩大類:差錯報告報文查詢報文

差錯報告報文:報告了路由器或主機在處理IP數據報時可能遇到的問題:

3    終點不可達

4    源點抑制

11  超時

12  參數問題

5    改變路由

查詢報文:幫助主機或網絡管理員從某個路由器或對方主機那裏獲取特定的信息。

8或0:     回送請求或回答

13或14: 時間戳請求或回答

2.2 報文格式


8字節首部,前4字節對所有類型均相同,首部的其餘部分對於每一種類型的報文都是特有的。

數據部分:

差錯報文:用於找出引起差錯的原始分組的信息。

查詢報文:基於查詢類型的額外信息。

2.3 差錯報告報文

ICMP只能報告差錯,差錯糾正留給高層協議去做,差錯報文總是發送給最初數據源,因爲數據報中唯一可用的信息就是源IP和目的IP

一些要點:

(1)對於攜帶ICMP差錯報文的數據報,不再產生ICMP差錯報文。

(2)對於分片的數據報,如果不是第一個分片,則不產生ICMP差錯報文。

(3)對於具有多播地址的數據報,不產生ICMP差錯報文。

(4)對於具有特殊地址的數據報(如127.0.0.0),不產生ICMP差錯報文。

所有差錯報文都包含一個數據部分,它包括的是原始數據報的IP首部再加上該數據報數據的前8個字節

加上首部原因:爲了向接收差錯報文的原始信源給出關於數據報本身的信息。

包含數據前8字節:這8字節提供了關於端口號(UDP和TCP)和序號(TCP)的信息。爲了讓源點能夠通知這些協議就需要這些信息。

2.3.1 終點不可達

原因:路由器無法爲一個數據報找到路由,或者主機無法交付一個數據報。

產生位置:協議不可達和端口不可達只能由目的主機創建,其餘的終點不可達報文只能由路由器創建。

注意:即使路由器沒有發送終點不可達報文,也不一定表示數據報已經被交付了

2.3.2 源點抑制

IP協議中沒有流量控制或擁塞控制機制,ICMP源點抑制報文是爲了給IP協議增加某種程度的流量控制和擁塞控制而設計的。

源點抑制報文通知源點,由於路由器或目的主機的擁塞,數據報已經被丟棄,源點必須放慢數據報的發送,直到擁塞得到緩解爲止。

注意:必須爲每一個丟棄的數據報向源主機發送一個源點抑制報文;沒有一種機制可以告訴源點,擁塞已得到緩解,源點只是不斷地降低發送速率,直到不再收到更多的源點抑制報文爲止;在多對一的通信中,源點抑制報文不一定有用。

2.3.3 超時

超時報文產生情況:(1)生存時間爲0,代碼0,僅供路由器使用;(2)一個報文的所有分片未能在某一時限內全部到達目的主機,代碼1,僅供目的主機

2.3.4 參數問題

代碼0表示首部的某個字段中有差錯或二義性,代碼1表示缺少所需的選項部分路由器或目的主機都可以產生參數問題報文。

2.3.5 改變路由

主機通常使用靜態路由選擇,爲了更新主機中的路由表,路由器要向主機發送一個改變路由報文。這種情況下路由器不會丟棄數據報,而是將數據報發送給合適的路由器。該報文由路由器向主機發送

2.4 查詢

2.4.1 回送請求與回答

用來確定兩個系統之間能否彼此通信。回送請求報文可由主機或路由器發送。收到回送請求報文的主機或路由器發送回答報文。因爲ICMP報文被封裝成數據報,發送回送請求的機器在收到回送回答報文時,就證明了發送方和接收方之間能用IP數據報進行通信。

2.4.2 時間戳請求和回答

用來確定IP數據報在這兩個機器之間來回所需的往返時間,也可用於同步兩個機器的時鐘。

發送時間=接收時間戳-原始時間戳;

接收時間=分組返回的時間-發送時間戳;

往返時間=發送時間+接收時間。

若二者時鐘不同步,則發送時間和接收時間是不準確的,往返時間是準確的

三 排錯工具

3.1 ping

原理:在ICMP回送請求和回送回答報文中設置了標識符字段,並使序號從0開始,每發送一個新報文序號就遞增1,並且它在報文的數據部分插入了發送時間,當分組到達時,用到達時間-出發時間=往返時間RTT

3.2 traceroute

原理:使用ICMP報文和IP分組的TTL(生存時間)字段找出路由,步驟如下:

a.主機A上的traceroute使用UDP向終點B發送一個分組,這個報文被封裝成IP分組,其TTL值爲1,這個程序記下發送該分組的時間。

b.路由器R1收到這個分組,把TTL值減到0,路由器R1就丟棄這個分組,同時路由器R1要發送一個ICMP超時報文,表示因TTL值爲0而丟棄該分組。

c.主機A的程序traceroute收到這個ICMP報文,利用封裝ICMP的IP分組的源地址找出R1的地址,並記錄該分組的到達時間,步驟a的時間與該時間只差就是往返時間。

d.將TTL值設爲2,重複上述步驟找下一個路由器的地址。

問題:主機B如何返回ICMP分組?

分組到達主機B時,已經到達終點,所以並不丟棄該報文,traceroute將UDP的目的端口設置爲UDP協議不支持的一個端口,當主機B收到這個分組時,它找不到可以接受交付的應用程序,於是就丟棄該分組,並向主機發送ICMP終點不可達報文(類型3,代碼3標誌着整個路由已經查找完畢)。

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