arp協議獲取mac地址,同網段和不同網段。

arp協議屬於OSI模型第二層(數據鏈路層)

計算機實現網絡通信在數據鏈路層發送數據幀(鏈路層數據包)實現通訊。而數據幀要發送到目標計算機需要知道,發送端的ip地址和mac地址還有接收端的ip地址和mac地址。

那麼問題來了,發送端能很簡單的獲取到發送端的ip地址和mac地址,以及接收端的ip地址,而接收端的mac地址最開始是不知道的,而arp協議就是爲了解決這個問題的,它能通過接收端的ip地址解析到mac地址。

然而,arp協議是屬於數據鏈路層的協議,如果發送端和目標端的主機都在同一個網段,我們則很好理解,其過程如下:

發送端發送數據幀前檢查是否擁有接收端的mac地址,如果沒有,則啓動arp,先檢查緩存ip-mac表中是否有接收端的mac地址,如果有則直接拿來即用,如果沒有則在本網段(局域網)廣播arp包,本網段各計算機都收到arp請求,從發送來的數據中檢查請求過來的ip地址與自己是否一致,如果不一致,則丟棄,如果ip一致,則單播返回mac地址給請求的計算機,發送端便獲取到了接收端的mac地址,接收到接收端的mac地址它還會緩存一份,用於下次拿來即用。

那麼如果請求端和目標端的主機不在同一個網段呢?arp廣播的數據是被路由阻斷的,不能跨到不同的網段進行廣播的,因爲這樣廣播會導致廣播數據氾濫。

不同網段的獲取mac地址過程如下:

原文鏈接:https://blog.csdn.net/xayddxjsjxywuhui/article/details/72796646

 

假設主機A(135.24.25.23)第一次和不同網段的主機C(135.24.52.123)通信:

A封裝好要發送的信息,在要寫“收件地址”時,

A會用子網掩碼進行計算先判斷B和A自己在不在同一個網段,這時候A知道了B和自己不在一個網段,
這時候,A知道該用網關把自己的數據傳遞給C,所以A會發送一個ARP包來獲取網關的MAC地址,

網關收到ARP包後,把自己的MAC地址封裝在ARP包中,發送給A,

A封裝報文,目標MAC地址寫網關的MAC地址,

網關收到報文,發現是給自己發的,就開始解包,解開之後,發現是給另一個網段的主機發送的,

此時如果網管本身就是路由器就直接把數據報文發送給下一跳路由器,如果網關是普通的PC,就發送給路由器,由路由器發送給下一跳路由器,目標MAC寫下一跳路由器的MAC地址,

歷經千辛萬苦,報文終於到達C的主機的路由器,路由器發送報文到C所在網段的網關,

C網段的網關解包之後發現不是給自己,而是給自己網段內的C主機,就發送報給給C

 

總結:如果不在同一個網段,則請求端拿到的目標端的mac地址其實是它網關的mac地址,將數據幀給到網關再進行下一跳轉發,下一跳同樣在自己的網段尋找到目標主機mac地址或再找到下一跳mac地址。

 

 

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