網絡層--icmp協議(05)

ping 原理與ICMP協議

    以前剛開始看的時候總覺得網絡協議只能是層層封裝,雖然查找資料,都說在網絡上面同時有IP協議,arp協議,ICMP和IGMP協議,但自己就是繞不過彎來,現在想想,唉。。。

    

ping 的原理

    ping 程序是用來探測主機到主機之間是否可通信,如果不能ping到某臺主機,表明不能和這臺主機建立連接。ping 使用的是ICMP協議它發送icmp回送請求消息給目的主機ICMP協議規定:目的主機必須返回ICMP回送應答消息給源主機。如果源主機在一定時間內收到應答,則認爲主機可達。    

   ICMP協議通過IP協議發送的,IP協議是一種無連接的,不可靠的數據包協議。

   ICMP協議在實際傳輸中數據包:20字節IP首部 + 8字節ICMP首部+ 1472字節<數據大小>38字節

    ICMP首部:8位類型+8位代碼+16位校驗和+(不同的類型和代碼,格式也有所不同)

wKiom1cU8C3BbGd4AAAsB2vtFHc388.jpg

 wKiom1cU6TzCPt-GAAFcx5_NbQg002.png

        icmp協議構成的數據包通過抓包發現是有序的隨機一段或者幾段的字母表





   ICMP是(Internet Control Message Protocol)Internet控制報文協議一種面向無連接的協議。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息本身並不傳輸用戶數據

抓包分析一組數據:

wKioL1cU6frQ12YTAAAYQNpd4DA212.png

  對於request的抓包,可以看到類型爲8,代碼爲0,代表請求回顯(ping請求),同時有16位的校驗和 


wKioL1cU6fnyHJXVAAAvsBcuwqI048.png


**************************************************************************************


對於reply的抓包,可以看到類型爲0,代碼爲0,代表回顯應答(ping應答)

wKioL1cU6fvTVNciAAAy8S2i414659.png



附具體的ICMP報文的類型

wKioL1cU8MPCj06DAAEa0HP9fZs752.jpg

 



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

  1. ping查詢

  2. 子網掩碼查詢(用於無盤工作站在初始化自身的時候初始化子網掩碼)

  3. 時間戳查詢(可以用來同步時間)

而差錯報文則產生在數據傳送發生錯誤的時候。就不贅述了。

  • 2.ICMP的應用--ping

ping可以說是ICMP的最著名的應用,當我們某一個網站上不去的時候。通常會ping一下這個網站。ping會回顯出一些有用的信息。一般的信息如下:

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

    TTL的值從目的主機到源主機,每經過一個路由減1,實際上也可以通過TTL的大小判斷目的主機的系統,默認windows系統是128,linux系統是64.

  • ICMP的應用--Traceroute

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

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

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

    

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