日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

[Linux]ARP协议

發布時間:2023/11/30 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Linux]ARP协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念:

1. ARP協議(地址解析協議):由IP地址轉換為MAC地址的協議。IP地址:網絡號+主機號。MAC地址:數據鏈路層的物理地址(硬件地址)。IP協議使用了ARP協議,因此被劃歸為網絡層,但其用途是從網絡層使用的IP地址解析出數據鏈路層的硬件地址,因此有些也將其劃歸為數據鏈路層。與ARP協議成對的協議為RARP,它是從MAC地址到IP地址的轉換。

2. 網絡層使用的是IP地址,但在實際網絡的鏈路上傳送數據幀時,最終還是使用網絡的硬件地址。但IP地址和網絡的硬件地址本身存在格式上的不同,也沒有什么直接的映射關系。同時,網絡上也有不同的主機加入進來,或撤走一些主機,更換網絡適配器也會使硬件地址改變,因此引入了ARP協議,ARP協議主要解決此類問題的方法是在主機ARP高速緩存中存放一個從IP地址到硬件地址的映射表,并且這個映射表經常動態更新。

3. 每個主機都有一個ARP高速緩存,里面有局域網的主機和路由器的IP到硬件地址的映射表,這些都是該主機目前知道的一些地址。舉個栗子哦,當主機A要給主機B發送報文時,主機A會在高速緩存中找是否有B的IP地址,如果有,則在ARP高速緩存中找到對應的硬件地址,再把這個地址寫入MAC幀,然后通過局域網把該MAC幀發送到此硬件地址。也有可能查不到其IP地址,可能是由于主機B才入網,也可能是主機A剛加電,高速緩存還是空的。這種情況的話,主機A會自動運行ARP,來找出硬件地址。

(1) ARP在局域網中廣播請求分組,找主機B的IP地址
(2) 在局域網上運行的主機都可以接收到ARP廣播的消息,但只有主機B會有響應,其他主機則忽略該廣播。
(3)主機B響應分組后,會在ARP響應分組中寫入自己的硬件地址,此時的響應分組是單播的。剛剛廣播是因為不知道主機是哪一個,現在知道了具體是哪一個主機后,主機B直接給主機A響應,因此是普通的單播。
(4) 主機A收到主機B的響應分組后,在ARP高速緩存中寫入主機B的從IP地址到硬件地址的映射。為什么要將其寫入ARP高速緩存呢,你發送數據報可能不止一次,當你發送完之后,主機B也給主機A響應后,可能也會發送數據報,這時如果沒有ARP高速緩存,可能主機B也得以廣播的方式先找到主機A的IP,再找硬件地址,這樣就大大降低了網絡的通信量,因此使用ARP來增加網絡的通信量,也提供了方便。

4. ARP把保存在高速緩存中的每一個映射地址項目都設置生存時間,超過生存時間的項目就從高速緩存中刪除掉。比如說主機A給主機B發數據,某一天,主機B的網絡適配器壞了,B更換了一塊,這時其硬件地址也被修改,這樣的話高速緩存中存的還是原來的那個地址,這下你肯定找不到確定的硬件地址,有了生存時間后,你可以在限定的時間內找,如果找不到的話,就將原先的硬件地址刪除,再重新廣播發送ARP請求分組,重新找到B。繼續上述的步驟,在高速緩存中寫入正確的硬件地址即可。

5. ARP協議是解決局域網的情況,如果是不同的網絡中的主機間的傳送數據報呢?這里我們涉及到路由器的概念。主機A無法直接解析主機B的硬件地址,我們這時通過連接到主機A的路由器來進行轉發,找到另一網絡(通過將路由器A的IP轉化為硬件地址,以便將IP數據報寫入路由器A,A從轉發表中找到下一跳路由B,同時解析出路由器B的硬件地址,于是再將數據報轉發到路由B上),再通過路由器廣播的方式(解析目的主機的硬件地址),找到正確的主機,傳送數據報。

關于ARP,主要有四種典型情況:
1. 發送方是主機,把IP數據報發送到同一網絡的另一個主機,此時主機A發送ARP請求分組,廣播,找到目的主機的硬件地址
2. 發送方是主機,把IP數據報發送到不同網絡的另一個主機,這時主機A發送ARP請求分組,找到主機A的路由器的硬件地址,剩下的工作由路由器完成。
3. 發送方是路由器,把IP數據報轉發到同一網絡的另一個主機,此時路由器發送ARP請求分組,廣播,找到目的主機的硬件地址
4. 發送方是路由器,把IP數據報轉發到不同網絡的另一個主機,這時路由器R1發送ARP請求分組,找到下一跳路由器R2的硬件地址,剩下的工作由路由器R2完成。

下面我們來寫個腳本來實現抓取主機MAC地址:

#!/bin/bash net='192.168.127.' //是我自己的主機IP i=1 count=0 while [ $i -le 254 ] doif [ $count -eq 20 ];thencount=0sleep 1fiping -c1 $net$i & //檢查網絡是否連通let i++let count++donewait

我們可以使用arp -a來查看緩存中的MAC地址。如下:


其中顯示incomplete的就是沒有存入緩存中的。我們可以過濾一下。

#!/bin/bash net='192.168.127.' i=1 count=0 while [ $i -le 254 ] doif [ $count -eq 20 ];thencount=0sleep 1fiping -c1 $net$i &let i++let count++donewait arp -a | grep -v 'incomplete'

這次就會直接將沒有連接的IP過濾掉,運行結果為:

這樣我們就很好的抓取到了對應主機的MAC地址。

總結

以上是生活随笔為你收集整理的[Linux]ARP协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。