TCP/IP網絡協議學習筆記四--ICMP

ICMP--Internet控制報文協議

ICMP被用來傳遞差錯報文以及其他需要注意的信息,被認爲是IP層的一個組成部分,通常被IP層或更高層協議使用,用來把差錯報文返回給用回進程。其格式如下:


不同類型的ICMP報文由報文中的類型字段和代碼字段來共同決定,在對ICMP差錯報文進行響應時,永遠不會產生另一份ICMP差錯報文。當發送一份ICMP差錯報文時,報文始終包含IP的首部和產生ICMP差錯報文的IP數據包的前8個字節。接收ICMP差錯報文的模塊就會把它與某個特定的協議(根據IP數據包首部中的協議字段來判斷)和用戶進程(根據包含在IP數據報前8個字節中的TCP或UDP報文首部中的TCP或UDP端口號來判斷)聯繫起來。



也有一些情況是不會產生差錯報文的:
1)ICMP差錯報文
2)目的地址是廣播地址或多播地址的IP數據包
3)作爲鏈路層廣播的數據包
4)不是IP分片的第一片
5)源地址不是單個主機的數據包

ICMP幾種應用
1.ICMP地址掩碼請求與應答---採用系統廣播它的ICMP請求報文

2.ICMP時間戳請求與應答--返回值是自午夜開始計算的毫秒數,協調的統一時間(UTC格林尼治時間)

3.ICMP端口不可達差錯


4.ICMP報文的4.4BSD處理



PING程序

Ping用來發送一份ICMP回顯請求報文給主機,並等待返回ICMP回顯應答。如果不能Ping到某臺主機,那麼就不能Telnet或者FTP到那臺主機,反過來,如果不能Telnet到某臺主機,那麼通常可以用Ping程序來確定問題出在哪裏。Ping程序還能測出到這臺主機的往返時間,以表明該主機離我們有多遠。不過隨着Internet安全意識的增強,一臺主機的可達性可能不只取決於IP層是否可達,還取決於使用何種協議以及端口號。Ping程序的運行結果可能顯示某臺主機不可達,但我們可以用Telnet遠程登錄到該臺主機的25號端口(服務器端口)。
Ping程序爲我們提供了查看IP記錄路由選項的機會。當數據包到達目的端時,IP地址清單應該複製到ICMP回顯應答中,這樣返回途中所經過的路由器地址也被加入清單中。當ping程序收到回顯應答時,它就打印出這份IP地址清單。但是,最大的問題是IP首部中只有有限的空間來存放IP地址。IP首部中的首部長度字段只有4bit,因此整個IP首部最長只能包括15個32bit長的字。由於IP首部固定長度爲20字節,RR選項用去3個字節,這樣只剩下37個字節來存放IP地址清單,們也就是說只能存放9個IP地址。當原始主機收到帶有RR選項的ICMP回顯應答時,它也要把它的入口IP地址放入清單中。
p i n g程序是對兩個T C P / I P系統連通性進行測試的基本工具。它只利用 I C M P回顯請求和回顯應答報文,而不用經過傳輸層(T C P / U D P) 。P i n g服務器一般在內核中實現I C M P的功能。
一般發送第一個ping回顯請求時,往返時間值會比較大,這是由於目的端的硬件地址不再ARP高速緩存的緣故。所以在發送第一個回顯請求之前要發送一個ARP請求並接收ARP應答,這需要花費一定的時間。每個處理該數據報的路由器都把它的IP地址放入IP首部中的記錄路由選項中,該選項大小爲39個字節,可以存儲9個IP地址。


Traceroute程序

該程序可以讓我們看到IP數據報從一臺主機傳到另一臺主機所經過的路由。上文的Ping程序具有這種功能,那爲什麼還要另外開發這麼一個應用程序呢,主要原因在於:並不是所有的路由器都支持記錄路由選項;記錄路由一般是單向的選項;IP首部中留給選項的空間有限,不能存放當前大多數的路徑。Traceroute程序使用ICMP報文和IP首部中的TTL字段(生存週期,一般定爲255),每個處理數據報的路由器都需要把TTL的值減1或減去數據報在路由器中停留的秒數。由於大多數的路由器轉發數據報的時延都小於1秒鐘,因此TTL最終成爲一個跳站的計數器,所經過的每個路由器都將其值減1.TTL字段的目的是防止數據報在選路時無休止地在網絡中流動,當路由器收到一份IP數據報,如果其TTL字段是0或1,則路由器不轉發該數據報。相反,路由器將該數據報丟棄,並給信源機發一份ICMP“超時”信息。開始時發送一個TTL字段爲1的UDP數據報,然後將TTL字段每次加1,以確定路徑中的每個路由器。每個路由器在丟棄UDP數據報時都返回一個ICMP超時報文2,而最終目的主機則產生一個ICMP端口不可達的報文。

IP選路



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