TCP/IP協議學習(3)-ICMP協議及應用

1.ICMP協議介紹

   由於IP協議並不是一個可靠的協議,它不保證數據被送達,那麼,保證數據送達的工作應該由其他的模塊來完成。其中一個重要的模塊就是ICMP(網絡控制報文)協議。
   當傳送IP數據包發生錯誤--比如主機不可達,路由不可達等等,ICMP協議將會把錯誤信息封包,然後傳送回給主機。給主機一個處理錯誤的機會,這也就是爲什麼說建立在IP層以上的協議是可能做到安全的原因。ICMP某種程度上就是一種:“錯誤偵測與回報機制”
   組成:ICMP數據包由8bit的錯誤類型和8bit的代碼和16bit的校驗和組成。而前 16bit就組成了ICMP所要傳遞的信息。

2.ICMP協議分類:一種是查詢報文,一種是差錯報文。其中查詢報文有以下幾種用途:

ping查詢
子網掩碼查詢(用於無盤工作站在初始化自身的時候初始化子網掩碼)
時間戳查詢(可以用來同步時間)

而差錯報文則產生在數據傳送發生錯誤的時候。

3.ICMP的應用-ping

   ping可以說是ICMP的最著名的應用,當我們某一個網站上不去的時候,通常會ping一下這個網站,如下:

ping命令主要利用ICMP協議包來偵測另一個主機是否可達。原理是用類型碼爲0的ICMP發請求,受到請求的主機則用類型碼爲8的ICMP迴應。ping程序來計算間隔時間,並計算有多少個包被送達。用戶就可以判斷網絡大致的情況。我們可以看到,ping給出來了傳送的時間和TTL的數據。

4.ICMP的應用-Traceroute

   Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。前面說到,儘管ping工具也可以進行偵測,但是,因爲ip頭的限制,ping不能完全的記錄下所經過的路由器。所以Traceroute正好就填補了這個缺憾。

   Traceroute的原理是非常非常的有意思,它受到目的主機的IP後,首先給目的主機發送一個TTL=1(還記得TTL是什麼嗎?)的UDP數據包,而經過的第一個路由器收到這個數據包以後,就自動把TTL減1,而TTL變爲0以後,路由器就把這個包給拋棄了,並同時產生一個主機不可達的ICMP數據報給主機。主機收到這個數據報以後再發一個TTL=2的UDP數據包給目的主機,然後刺激第二個路由器給主機發ICMP數據報。如此往復直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。從而避開了ip頭只能記錄有限的路由IP的問題。

   那麼我怎麼知道UDP到沒到達目的主機呢?這就涉及一個技巧的問題,TCP和UDP協議有一個端口號定義,而普通的網絡程序只監控少數的幾個號碼較 小的端口,比如說80,比如說23,等等。而traceroute發送的是端口號>30000(真變態)的UDP報,所以到達目的主機的時候,目的主機只能發送一個端口不可達的ICMP數據報給主機。主機接到這個報告以後就知道,目標主機到了,所以,說Traceroute是一個騙子一點也不爲過:),哈哈!!!
   Windows下的命令爲tracert,測試如下:

參考鏈接:http://m.blog.csdn.net/article/details?id=670761

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