要使用該協(xié)議,我們可以進行相應(yīng)的ICMP設(shè)置,比如在Windows XP中,首先打開“網(wǎng)絡(luò)連接”,右鍵單擊啟用Internet連接防火墻的“網(wǎng)絡(luò)連接”,選擇“屬性”打開屬性窗口。接著,選擇“高級”選項卡,單擊右下角“設(shè)置”按鈕。然后,在高級設(shè)置窗口中選擇“ICMP”選項卡,在其中可以進行相應(yīng)的設(shè)置,包括允許傳入的回顯請求等。
我們在網(wǎng)絡(luò)中經(jīng)常會使用到ICMP協(xié)議,只不過我們覺察不到而已。比如我們經(jīng)常使用的用于檢查網(wǎng)絡(luò)通不通的Ping命令,這個“Ping”的過程實際上是ICMP協(xié)議工作的過程。還有其他的網(wǎng)絡(luò)命令如跟蹤路由的Tracert命令也是基于ICMP協(xié)議的。
ICMP應(yīng)用之pingping是一個用來查詢網(wǎng)絡(luò)通不通的一個工具,是系統(tǒng)自帶的,運行于內(nèi)核,調(diào)用ICMP協(xié)議。
ping的工作原理:ping通過調(diào)用echo來發(fā)送請求,通過是否收到echo-reply來查詢網(wǎng)絡(luò)層的連通性。ping的結(jié)果會給出傳送的時間和TTL的數(shù)據(jù),還可以查看主機到目的主機的路由。這是因為ICMP的ping請求數(shù)據(jù)報在每經(jīng)過一個路由器的時候,路由器就會把自己的IP地址放到該數(shù)據(jù)包中,而目的主機則會把這個IP列表復(fù)制到ICMP數(shù)據(jù)包中發(fā)回給主機。但是,IP頭能記錄的路由列表非常有限,如果要觀看完整的路由信息,就要用到traceroute工具了。
ICMP應(yīng)用之traceroute
traceroute是用來偵測主機到目的主機所經(jīng)路由情況的工具,可以獲取到所經(jīng)路由器的IP地址。
traceroute的工作原理:它收到目的主機的IP后,首先給目的主機發(fā)送一個TTL=1的UDP數(shù)據(jù)包,而經(jīng)過的第一個路由器收到這個數(shù)據(jù)包以后,就自動將TTL減1.而TTL變?yōu)?以后,路由器就把這個包給拋棄了,并同時產(chǎn)生一個主機不可達的ICMP數(shù)據(jù)包給主機。主機收到這個數(shù)據(jù)包以后就發(fā)送一個TTL=2的數(shù)據(jù)包給主機,然后刺激第二個路由器給主機發(fā)送ICMP數(shù)據(jù)包,如此反復(fù)直到到達目的主機。這樣,traceroute就拿到了所有的路由器IP,從而避免了IP頭只能記錄有限的路由IP 的問題。
怎么知道UDP到?jīng)]到達目的主機呢?這就涉及一個技巧的問題,TCP和UDP協(xié)議有一個端口號定義,而普通的網(wǎng)絡(luò)程序只監(jiān)控少數(shù)的幾個號碼較 小的端口,比如說80,比如說23,等等。而traceroute發(fā)送的是端口號》30000(真變態(tài))的UDP報,所以到達目的主機的時候,目的主機只能發(fā)送一個端口不可達的ICMP數(shù)據(jù)報給主機。主機接到這個報告以后就知道,主機到了,所以,說Traceroute是一個騙子一點也不為過
traceroute的另外一個作用是確定路徑MTU。要做的就是發(fā)送分組,并設(shè)置“不分片”標志。發(fā)送的第一個分組的長度正好與出口MTU相等,每次收到ICMP“不能分片”差錯時就減小分組的長度。
產(chǎn)生ICMP不可達的3種情況:TTL為0,端口不可達(找不到對應(yīng)的端口號),IP需要分片卻設(shè)置了不分片的標志。