歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> IP基礎--6.ICMP協定

IP基礎--6.ICMP協定

日期:2017/2/27 14:13:58   编辑:更多Linux
  http://www.study-area.net/menu1.htm ICMP Internet Control Message Protocol 這個協定咋聽起來似乎神秘得很但說穿了您可能會笑耶ping 就是一個 ICMP 協定啦~~另外tracert 和 traceroute 也屬於 ICMP的協定。 由於 TCP/IP 是一個開放式的網路環境其動態性極高在任何時候您都不能確定對方是否連上網路或是離開網路了。所以在傳遞資料封包之前要確定對方是存在的以及路由路徑是可靠的就變得非常重要了。ICMP 的目的就是讓我們能夠檢測網路的連線狀況也能確保連線的准確性其功能主要有 偵測遠端主機是否存在。 建立及維護路由資料。 重導資料傳送路徑。 資料流量控制。 ICMP在溝通之中使用不同的訊息讓機器來識別請參閱下表 訊息 代表意思 Echo Request 請求回應訊息。 Echo Reply 是一個回應信息。 Distination Unreachable 表示目的地不可到達。 Source Quench 當使用ICMP出現問題時用來竭止來源繼續發送訊息。 Redirect 用來重新導向路由路徑。 Time Sexeeded for a Datagram 當資料封包在某些路由現象中逾時可以要求來源忽略該封包。 Parameter Problem on a Datagram 當一個ICMP封包重著之前的錯誤時會回覆來源主機關於參數錯誤的訊息。 Timestamp Request 要求對方送出時間訊息用以計算路由時間的差異以滿足同步性協定的要求。 Timestamp Replay 此訊息純粹是回應Timestamp Request用的。 Information Request 在RARP協定應用之前此訊息是用來在開機時取得網路信息。 Information Reply 用以回應Infromation Request訊息。 Address Mask Request 這訊息是用來查詢子網路mask設定信息。 Address Mask Reply 回應子網路mask查詢訊息的。 在ICMP使用中會以不同的error code來回應各種錯誤信息 訊息 代表意思 0 Network Unreachable 1 Host Unreachable 2 Protocol Unreachable 3 Port Unreachable 4 Fragmentation Needed and DF set 5 Source Route Failed 6 Destination network unknown 7 Destination host unknown 8 Source host isolated 9 Communication with destination network administraively prohibited 10 Communication with destination host administraively prohibited 11 Network unreachable for type of service 12 host unreachable for type of service ICMP 是個非常有用的協定尤其是當我們要對網路連接狀況進行判斷的時候。 PING 當我們架設好一個 IP 網路的時候如果要檢查一下網路是否連接成功最常用的一個命令就是 ping 了。ping 就是 ping我也不知道其中文名字叫什麽和為什麽叫 ping反正我們知道怎麽用就行啦。 ping 可以說是一個最常用的網路檢查命令。例如在 Winodws 98 上執行 ping 之後您會看到 Microsoft(R) Windows 98 (C)Copyright Microsoft Corp 1981-1999. D:\WINDOWS\Desktop>ping www.hinet.net Pinging w3c1.hinet.net [168.95.1.83] with 32 bytes of data: Reply from 168.95.1.83: bytes=32 time=183ms TTL=248 Reply from 168.95.1.83: bytes=32 time=147ms TTL=248 Reply from 168.95.1.83: bytes=32 time=145ms TTL=248 Reply from 168.95.1.83: bytes=32 time=139ms TTL=248 信息意思分別為從哪裡得到的回應該次 PING 執行的數據大小round trip 時間(微秒)生存期限(微秒)。


Ping statistics for 168.95.1.83: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 這是告訴您送出多少個封包獲得的回應是多少丟失率是多少。 Approximate round trip times in milli-seconds: Minimum = 139ms, Maximum = 183ms, Average = 153ms 這是說來回所需時間的最小值最大值平均值。 通常 PING 命令是送出一個 echo_request (type 8) 的 ICMP 封包給目的端如果目的端願意回答則會回應一個 echo_reply(type 0) 的 ICMP 封包給查詢端以確定連線的可行性。不過如果 ICMP 封包因為某些原因(如火牆的過濾)不能到達目的端或是目的端不願回答或是回應給擋下來了PING 就不能順利完成但並非代表連線不行。 如果運用得當可以幫我們判斷出許多狀況。例如我們要看一下跟遠方的機器是否連接得上先可以 ping 一下對方的機器名稱如果連接不上的話我們可以 ping 對方的 ip如果 ip 可以 ping 得到那麽好可能是 dns 不工作了那麽我們可以檢查本身主機的 dns 伺服器是否指定正確以及dns 伺服器是否設定正確。 如果連 IP 都 ping 不了那麽好可能是 IP 設定的問題了也可能是網路的連線問題。檢查的步驟也有很多種下面是方法之一 ping對方的router如果ping得上那可能是對方機器和其相連網路的問題了 如果ping不到對方的router那麽可以ping自己的router。如果ping得上那麽好可能是router和router之間的問題了 如果自己的router也ping不到那麽可能是自己的機器和router之間的問題我們可以ping一下自己的IP地址。如果自己的IP可以ping得到那麽好可能是連線的問題我們可以檢查一下網線hub等設備看看有沒有損毀的狀況。 同時我們也可以ping一下網路上面其它的機器也可以用其它機器ping一下router來判別一下問題來自自己機器還是網路還是router等等。 如果自己的IP都ping不到那麽可能是網路卡壞掉了或沒有正確設定可以看看設備資源有沒有突也可以看看設備有沒有被系統啟動。 如果看來都沒問題那麽可以ping一下圈地址127.0.0.1如果連這個都ping不了的話這台機器的IP功能根本就沒被啟動那麽您就要先檢查一下網路功能有沒有選擇IP協定有沒有被綁定(bind)等基本網路設定了。 從上面的過程中我們不難看出ping這個命令真是非常有用的。當然上面只是其中一種偵測順序我們也可以掉過來先ping自己的IP然後自己router對方router對方IP這樣的次序。 TRACEROUTE 另一個 ICMP 程式 traceroute 也是我們通常用到的工具。在 Winodws 98 上面該程式叫做 tracert 執行 tracert 的結果如下 D:\WINDOWS\Desktop>tracert www.hinet.net Tracing route to w3c1.hinet.net [168.95.1.83] over a maximum of 30 hops: 1 154 ms 143 ms 136 ms as169035.seed.net.tw [139.175.169.35] 2 137 ms 134 ms 147 ms 139.175.169.1 3 131 ms 136 ms 129 ms R58-33.seed.net.tw [139.175.58.33] 4 137 ms 139 ms 129 ms R58-41.seed.net.tw [139.175.58.41] 5 146 ms 135 ms 137 ms R58-14.seed.net.tw [139.175.58.14] 6 144 ms 145 ms 139 ms 210.65.161.186 7 149 ms 146 ms 138 ms 168.95.2.22 8 145 ms 148 ms 138 ms 168.95.2.49 9 150 ms 146 ms 148 ms w3c1.hinet.net [168.95.1.83] Trace complete. 最左邊一行分別是跳站(hop)數字然後是三個 round trip time最後是主機的名稱 (如果有的話)和 IP 地址。通常 traceroute 命令會從 1 開始遞增 TTL 將 ICMP 命令送給每下一跳站當 router 檢測到 TTL 的逾期則會向發送源寄出 TIME_EXCEEDED 的 ICMP 封包而每一次回應都會送出 3 個 UDP 數據流(datagrams)以讓您獲得更詳細的概念。 透過如此遞進的查詢過程查詢端就可以追蹤到連線所經過的跳站情況這在我們判斷封包的路由路線非常有用。不過要還必須指出的是封包的路由在每次的傳遞過程中都可能不一樣在某些多路由環境中查詢路由和回應路由未必一致。而且在防火牆的保護下有些 ICMP 封包會被攔下來這樣的話traceroute 也就不能完整的顯示出封包的傳遞路徑了。 其實 ICMP 協定還有許多實在上面的例子這裡不一一介紹了。能靈活運用 ICMP 協定對我們了解和測試網路情況非常有幫助。



5 146 ms 135 ms 137 ms R58-14.seed.net.tw [139.175.58.14] 6 144 ms 145 ms 139 ms 210.65.161.186 7 149 ms 146 ms 138 ms 168.95.2.22 8 145 ms 148 ms 138 ms 168.95.2.49 9 150 ms 146 ms 148 ms w3c1.hinet.net [168.95.1.83] Trace complete. 最左邊一行分別是跳站(hop)數字然後是三個 round trip time最後是主機的名稱 (如果有的話)和 IP 地址。通常 traceroute 命令會從 1 開始遞增 TTL 將 ICMP 命令送給每下一跳站當 router 檢測到 TTL 的逾期則會向發送源寄出 TIME_EXCEEDED 的 ICMP 封包而每一次回應都會送出 3 個 UDP 數據流(datagrams)以讓您獲得更詳細的概念。 透過如此遞進的查詢過程查詢端就可以追蹤到連線所經過的跳站情況這在我們判斷封包的路由路線非常有用。不過要還必須指出的是封包的路由在每次的傳遞過程中都可能不一樣在某些多路由環境中查詢路由和回應路由未必一致。而且在防火牆的保護下有些 ICMP 封包會被攔下來這樣的話traceroute 也就不能完整的顯示出封包的傳遞路徑了。 其實 ICMP 協定還有許多實在上面的例子這裡不一一介紹了。能靈活運用 ICMP 協定對我們了解和測試網路情況非常有幫助。



Copyright © Linux教程網 All Rights Reserved