ICMP:Internet控制報文協議

1	引言
2	ICMP報文的類型
3	ICMP地址掩請求與應答
4	ICMP時間戳請求與應答
5	ICMP端口不可達差錯

1 引言

	ICMP經常被認爲是IP層的一個組成部分。它傳遞差錯以及其他需要注意的信息。ICMP報文通常被IP層或更層協議(TCP或UDP)使用。一些ICMP報文把差錯報文返回給用戶進程。
	ICMP報文是在IP數據報內部被傳輸的,它封裝在IP數據報內。
	關於ICMP的正式規範參見RFC792.
	在ICMP報文的格式如圖所示。所有報文的前4個字節都是一樣的,但是剩下的其他字節則互不相同。下面我們將逐個介紹各種報文格式。
	類型字段可以有15個不同的值,以描述特定類型的ICMP報文。某些ICMP報文還使用代碼字段的值來進一步描述不同的條件。
	檢驗和字段覆蓋整個ICMP報文。
 			
	在本章中,我們將一般地討論ICMP報文,並對其中一部分作詳細介紹:地址掩碼請求和應答,時間戳請求和應答以及不可達端口。

2 ICMP報文類型

	各種類型的ICMP報文如所示,不現類型由報文中的類型字段和代碼字段來共同決定。
			
	圖中的最後兩列表明瞭ICMP報文是一份查詢報文還是一份差錯報文。因爲對ICMP差錯報文有時需要作特殊處理,因此我們需要對它們進行區分。例如,在對ICMP差錯文進行響應時,永遠不會生成另一份ICMP差錯報文(如果沒有這個限制規則,可能會遇到一個差錯產生另一個差錯的情況,而差錯再產生差錯,這樣會無休止地循環下去)。
	當發送一份ICMP差錯報文時,報文始終包含IP的首部和產生ICMP差錯報文的IP數據報的前8個字節。這樣,接收ICMP差錯報文就會把它與某個特定的協議(根據IP數據報首部中的協議字段來判斷)和用戶進程(根據包含在IP數據報前8個字節中的TCP或UDP報文首部中的TCP或UDP端口號來判斷)聯繫起來。
	下面各種情況都不會導致產生ICMP差錯報文:
	1)ICMP差錯報文(但是,ICMP查詢報文可能會產生ICMP差錯報文)。
	2)目的地址是廣播地址或多播地址的IP數據報。
	3)作爲鏈路層廣播的數據報。
	4)不是IP分片的第一片
	5)源地址不是單個主機的數據報。這就是說,源地址不能爲零地址、環回地址、廣播地址或多播地址。
	這些規則是爲了防止過去允許ICMP差錯報文對廣播分組響應所帶來的廣播風暴。

3 ICMP地址掩碼請求和應答

	ICMP地址掩碼請求用於無盤系統在引導過程中獲取自已的子網掩碼。系統廣播它的ICMP請求報文(這一過程與無盤系統在引導過程中用RARP獲取IP地址是類似的)。無盤系統獲取子網掩碼的另一個方法是BOOTP協議。ICMP地址掩碼請求和應答報文的格式如下圖所示
			
	ICMP報文中的標識符和序列號字段由發送端任意選擇設定,這些值在應答中將衩返回。這樣,發送端就可以把應答與請求進行匹配。

4 ICMP時間戳請求與應答

	ICMP時間戳請求允許系統向另一個系統查詢當前的時間。返回的建議值是自午夜開始計算的毫秒數,協調的統一時間(Coordinated Universal Time,UTC)。這種ICMP報文的好處是它提供了毫秒級的分辨率,而利用其他方法從別的主機獲取的時間(如某些Unix系統提供的rdate命令)只能提供秒級的分辨率。由於返回的時間是從午夜開始計算的,因此調用者必須通過其他方法獲知當時的日期,這是它的一個缺陷。
	ICMP時間戳請求和應答報文格式如下圖所示。
			
	請求端填寫發起時間戳,然後發送報文。應答系統收到請求報文時間填寫接收時間戳,在發送應答時填寫發送時間戳。但是,實際上,大多數的實現把後面兩個字段都設成相同的值。
	另一種方法獲取時間和日期。
	1)日期服務程序和時間服務程序。前者是以以人們可讀的格式返回當前的時間和日期,是一行ASCII字符。可以用telnet命令來驗證這個服務,時間服務程序返回的是一個32位的二進制數值,表示UTC,1900年1月1日午夜起算的秒數。這個程序是以秒爲單位提供的日期和時間。
	2)嚴格的計時器使用網絡時間協議(NTP),該協議在RFC 1305中給出了描述。這個協議採用先進的技術來保證LAN或WAN上的一組系統時鐘誤差在毫秒級以內。
	3)開放軟件基金會(OSF)的分佈式計算環境(DCE)定義了分佈式時間服務(DTS),它也提拱計算機之間的時鐘同步。
	4)伯克利大學的Unix系統提供守護程序(time(8)),來同步局域網上的系統時鐘。不像NTP和DTS,timed不在廣域網範圍內工作。

5 ICMP端口不可達差錯

	端口不可達報文,它是ICMP目的不可到達報文中的一種,以此來看看ICMP差錯報文中所附加的信息。使用UDP來查看它。
	UDP的規則之一是,如果收到一份UDP數據報而目的端口與某個正在使用的進程不相符,那麼UDP返回一個不可達報文。可以用TFTP來強制生成一個端口不可達報文。	
		
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章