第6章 ICMP:Internet控制封包協定
6.3 ICMP位址掩碼請求與應答
I C M P位址掩碼請求用于無盤系統在引導過程中擷取自己的子網路遮罩( 3 . 5節)。系統廣播它的I C M P請求封包(這一過程與無盤系統在引導過程中用 R A R P擷取I P位址是類似的)。無盤系統擷取子網路遮罩的另一個方法是 B O O T P協定,我們将在第 1 6章中介紹。 I C M P位址掩碼請求和應答封包的格式如圖6 - 4所示。

I C M P封包中的辨別符和序列号字段由發送端任意選擇設定,這些值在應答中将被傳回。這樣,發送端就可以把應答與請求進行比對。
我們可以寫一個簡單的程式(取名為 i c m p a d d r m a s k),它發送一份I C M P位址掩碼請求封包,然後列印出所有的應答。由于一般是把請求封包發往廣播位址,是以這裡我們也這樣做。目的位址(1 4 0 . 2 5 2 . 1 3 . 6 3)是子網1 4 0 . 2 5 2 . 1 3 . 3 2的廣播位址(見圖3 - 1 2)。
在輸出中我們首先注意到的是,從 s v r 4傳回的子網路遮罩是錯的。顯然,盡管 s v r 4接口已經設定了正确的子網路遮罩,但是 S V R 4還是傳回了一個普通的 B類位址掩碼,就好像子網并不存在一樣。
我們用t c p d u m p指令來檢視主機b s d i上的情況,輸出如圖 6 - 5所示。我們用-e選項來檢視硬體位址。
注意,盡管線上路上什麼也看不見,但是發送主機 s u n也能接收到I C M P應答(帶有上面“來自本機”的輸出行)。這是廣播的一般特性:發送主機也能通過某種内部環回機制收到一份廣播封包拷貝。由于術語“廣播”的定義是指區域網路上的所有主機,是以它必須包括發送主機在内(參見圖2 - 4,當以太網驅動程式識别出目的位址是廣播位址後,它就把分組送到網絡上,同時傳一份拷貝到環回接口)。
接下來,b s d i廣播應答,而 s v r 4卻隻把應答傳給請求主機。通常,應答位址必須是單點傳播位址,除非請求端的源 I P位址是0 . 0 . 0 . 0。本例不屬于這種情況,是以,把應答發送到廣播位址是B S D / 3 8 6的一個内部差錯。
R F C規定,除非系統是位址掩碼的授權代理,否則它不能發送位址掩碼應答(為了成為授權代理,它必須進行特殊配置,以發送這些應答。參見附錄 E)。但是,正如我們從本例中看到的那樣,大多數主機在收到請求時都發送一個應答,甚至有一些主機還發送差錯的應答。
最後一點可以通過下面的例子來說明。我們向本機 I P位址和環回位址分别發送位址掩碼請求:
上述兩種情況下傳回的位址掩碼對應的都是環回位址,即 A類位址1 2 7 . 0 . 0 . 1。還有,我們從圖2 - 4可以看到,發送給本機 I P位址的資料報( 1 4 0 . 2 5 2 . 1 2 . 3 3)實際上是送到環回接口。
I C M P位址掩碼應答必須是收到請求接口的子網路遮罩(這是因為多接口主機每個接口有不同的子網路遮罩),是以兩種情況下位址掩碼請求都來自于環回接口。