ICMP的全名是lnternet Control Message Protocol (網際網路控制訊息協定),ICMP就是一個「錯誤偵測與回報機制」。ICMP的主要目的是用來發出網路問題或錯誤狀態的報告,並轉送特定的網路資訊。IP封包在傳送時若偵測到錯誤,便會將它傳給ICMP。
在OSI模型中,ICMP協定雖然與IP協定同爲第三層協定,但ICMP本身是不具備傳送能力的。事實上,它跟TCP/UDP一樣,也是靠IP幫忙進行傅送。ICMP封包是嵌在IP封包中的資料區部分,如圖所示:
當網際網路上的某一個Router發現它手上的封包由於某種原因而無法往下一個目的地傳送時,ICMP會根據錯誤的狀況發送一個目的地無法到達的封包給最原始的發送者,說明封包無法傳達到最終目的地的原因,並把該原始含資料的封包丟棄。
ICMP有二種主要的工具程式,包含:
1.PING: PING指命可用來發生ICMP回應要求封包。可利用PING發出回應要求給特定的主機或路由器,以診斷網路的問題。
2.TRACERT:TRACERT指命可找出本機電腦至目的IP位址之閒所經過的路由器。
使用ping命令的時候,事實上是送出一個echo-reouest的ICMP封包,如果對方的機器能接收到這個請求,而且願意作出回應,則送回一個echo-reply的ICMP封包,當這個回應能順利抵達的時候,那就完成一個ping的動作。
ping可以幫我們利斷出許多狀況。例如:
1.我們要看一下跟遠方的機器是否連接得上,先可以ping一下對方的機器名稱。
2.如果連接不上的話,我們可以ping對方的IP,如果IP可以ping得到,那麼很可能是DNS伺服器不工作了。
3.那麼我們可以檢查本身主機的DNS伺服器是杏指定正確、以及DNS伺服器是否設定正確?
4.如果連IP都ping不了,那麼很可能是IP設定的問題了;也可能是網路的連線問題。
5. 如果知道其對方的Router位址的話,ping對方的Router,假如ping得上,那可能是對方機器和其相連網路的問題
6.如果ping不到對方的Router,那麼可以ping自己的Router。如果ping得上,那麼很可能是Router和Router之間的問題。
7.如果自己的Router也ping不到,那麼可能是自己的機器和Router之間的問題。
8.我們可以ping一下自己的IP,如果自己的IP可以ping得到,那麼可能是連線的問題,我們可以檢查一下網路線、Hub(集線器)等設備,看看有没有損毀的狀況
9.如果自己的IP都ping不到,那麼可能是網路卡壞掉了,或沒有正確設定,可以看看設備資源有没有衝突,也可以看看設備有沒有被系統啓動。
10. 如果看來都没問題,那麼可以ping一下迥圈位址127.0.0.1,如果連這個都ping不了的話,這台機器的IP功能根本就沒被啓動!那麼就要先檢查一下網路功能有没有啓用、IP協定有沒有被安裝..等基本網路設定了。
ping這個命分真是非常有用的。若可以ping一台機器的時候,我們就可以確定連線是成功的。但如果不能pine的話,末必是連不上哦。很顯然,如果這個echo-request不能到達對方的機器,或是對方回應的echo-reply不能順利送回來,那ping 就失敗。這情形在許多有防火牆的環境中都會碰到,如果防火牆隨便將reauest和reply攔下來就會導致ping失敗,但並不代表其它連線不能建立。另外,就算没有防火牆作怪,對方也可以將機器設定為不回應任何echo-roauest封包。
參考資料:
博碩文化《網路概論與實務應用》