網路層 wireshark IP ICMP ARP分析
參考:謝希仁的《計算機網路》 圖解ARP協議(一)
帳號登錄
不久前寫的tcp/ip協議族寫得感覺太淺了,所以最近研究了一波網路層,用wireshark進行實際分析。
首先從一個簡單的ping命令來進行分析。首先,我們需要一台連接良好的有公網ip的電腦。我在阿里雲有台伺服器,最近換為了linux系統。阿里雲的雲翼計劃里學生一折優惠,所以有興趣的可以去認證一下,10元一個月。我剛開始ping我的阿里雲伺服器ping不通,原來是沒有允許所有的icmp報文進入。 帳號登錄 這個鏈接里教你怎麼設置。因為ping命令就是使用icmp報文判斷網路連通與否和網路的狀況。120.78.55.19 這個是我的伺服器的ip,有需要的可以試用,但是大佬別搞事情啊。。 然後下載一個wireshark,它是一個用於網路上的抓包工具,非常好用,各種細節都寫得賊清楚。然後有意向深入網路的可以下載個gns3進行網路模擬,就是自己擺路由器和主機進行模擬,配合wireshark進行數據包分析。
然後開始進行實驗。先打開wireshark設置過濾器:host 175.10.205.255 and icmp ,host後面的是我的ip地址,在cmd中用ipconfig可以查詢到。然後後面的icmp表示要icmp協議的,即同時滿足這兩個條件的進行顯示。這裡要注意過濾條顯示綠色了才表示這個過濾器正常工作!!然後開啟捕捉。
在本機cmd中ping我的伺服器,然後提示的32位元組是icmp報文中的數據部分,ttl=52,然後tracert 我的伺服器的ip,返回12行數據,12+52=64,表名伺服器系統的ttl值為64,即linux系統,所以可以通過這個來查看對方的操作系統類型。現在來簡單解說一下為啥呢。
TTL (time to live),即生存時間。表面數據報在網路中的壽命,存在的目的是防止無法交付的的數據報無限制地在網際網路中兜圈子。每種操作系統都有屬於他的ttl值,比如linux的ttl值為64或者255。windows的可能為128或32。具體得自己去研究。路由器在轉發數據報之前就把ttl值減一,若ttl值減小到0,那麼久丟棄這個數據報,不再轉發。然後看tracert這個命令,它是向目的主機發送一連串的ip數據報,數據報中封裝的是無法交付的udp用戶數據報,第一個數據報的ttl值被設置為1,第二個設置為2,後面你懂的。然後第一個數據報到達第一個路由器後ttl值就為0了,所以就不再被轉發,然後第一個路由器就返回給源主機一個icmp數據報,表面自己的ip地址。接著的也是類似原理。然後當到達目的主機時,數據報的ttl值為1。返回給源主機另一種類型的icmp數據報。大家也可以用wireshark來跟蹤一下這個tracert指令。過來那裡可以用 host 175.10.205.255 and (udp or icmp) 看字面意思理解即可(我總覺得我寫的這個過濾器有問題,因為返回的並不太理想,但是還是可以看出我想要的,所以就沒糾結這個了,如果有會的大佬歡迎指正),只是返回的東西比較多,可能會有其它進程與本機的udp通信啥的,所以得結合cmd裡面的返回的ip地址看,然後你會發現並不是返回只有一個icmp數據報,仔細的可以自己研究一波。然後再返回來看,本地機和伺服器間差了12個路由或主機,然後剩下值為52的ttl。所以,聯繫一下就有了前面的結論。
然後我們來以ping命令來用wireshark分析一下這個icmp數據報,然後看它的返回。