參考:謝希仁的《計算機網路》 圖解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數據報,然後看它的返回。

首先這裡的都是icmp協議,先看上面第一部分,總的就是本地機向伺服器連續發生4個icmp數據報,然後每發一個然後就馬上返回一個icmp數據報。開始的ttl為128就是我的操作系統為windows所致的。後面的52相信大家也理解了,然後看看裡面的request和reply啥的,對它有基本的理解。然後看中間部分:frame是對整個數據包的大概講解,這就是使用軟體的好處啊,幫你解析啥的。旁邊的是大意提取,就是這個這個數據包有74個位元組。然後看Ethernet 2這個裡面的東西,這裡數據被封裝成了最底層的mac幀,我們仔細點開看看這裡有啥東西,沒錯,這裡存放了源主機和目的主機的mac地址,然後使用的是ipv4協議,我們可以在cmd中ipconfig /all查看本機的mac(即物理地址),然後就會發現和這裡的地址是一樣的。然後來看internet protocol version這裡,很明顯,熟悉ip數據報的人都可以看出這裡是ip數據報,什麼本機ip和目標ip地址啊,ttl啊,協議啊(這裡的就為icmp),ip版本號,首部長度啊之類的(計算機網路書中有詳細解釋),裡面還說了總長度為60,也就是說這個ip數據報的長度為60位元組,前面的mac幀的首部佔了14個位元組,所以加起來就是最開始說的74個位元組了。然後我們再看下面的internet control message protocol,也就是icmp數據報裡面的東西了,注意啦,這個icmp數據報是數據ip數據包裡面的數據部分的啊,別搞錯了兩者間的關係。然後這個icmp數據報的數據部分就佔了32個位元組。其實這個數據好像沒什麼用,因為ping的存在意義就在於判斷網路是否連通和網路狀況的,並不需要你做出什麼特定的回復。最後,我們來看最下面一部分,這就是16進位數據了,然後我們點擊中間部分的東西,都可以在這裡找到對應的數據。這就是協議啊,請仔細思考一下。我想這應該就是在數據鏈路層裏傳輸的東西了吧。最後變為0101這樣的高低電平傳輸過去。

然後,我相信到了這裡,大家對這個ip協議和icmp協議都有了一定的理解了(如要學習,請務必跟著操作一波,因為我可能有理解錯的,更多的應該是你自己的理解)。然後最wireshark也有一定的理解了,然後我們在來看看這個ARP協議。感覺這個還是前面那位大哥寫得好,大家先去看他的解析吧。我默默表示我的arp緩存表裡好像啥都有,我的arp中的目標arp的mac地址永遠不是0.0.0.0,不過我看我的arp這裡大多數都是向一級路由去查詢mac,所以這個路由的arp緩存表應該很多東西,我都不知道我哪裡操作錯誤了。。或者說這個還是用gns3來模擬比較明顯。不過著都不是關鍵,因為我們從這位大哥的圖中更能體會出arp是啥子東西,以後也會自己注意到arp然後有意識地去看看它。我覺得要注意的是本地主機發送arp請求時是廣播,然後正確返回時是單播,這樣就盡量減少使用成本達到目的。然後,我們來看看arp欺騙,就是你自己來打造這個arp的數據報,然後造成路由器識別錯誤,導致消息傳遞不正確,具體我也沒攻擊過,所以。。。。

嗯,今天就大概講這樣了。歡迎交流討論。

推薦閱讀:

相關文章