3、以太网基础知识——ARP地址解析协议原理
返回目錄
上一篇
下一篇
概述
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。網絡層以上的協議用IP地址來標識網絡接口,但以太數據幀傳輸時,以物理地址來標識網絡接口。因此我們需要進行IP地址與物理地址之間的轉化。對于IPv4來說,我們使用ARP地址解析協議來完成IP地址與物理地址的轉化(IPv6使用鄰居發現協議進行IP地址與物理地址的轉化,它包含在ICMPv6中)。?ARP協議提供了網絡層地址(IP地址)到物理地址(mac地址)之間的動態映射。ARP協議 是地址解析的通用協議
?請求的例子:
MAC 地址 與 IP地址
Mac地址由設備制造商定義/分配,每一個硬件設備都有一個鏈路層主地址(MAC地址),保存在設備的永久內存中。設備的mac地址不會改變(現在可以進行mac地址偽裝)?
IP地址由用戶配置給網絡接口, 網絡接口的IP地址是可以發生變化的(通過DHCP獲取IP,變化速度比較快)
獲取目的端的MAC地址(在一個以太網中)步驟如下:?
? ? ? ? ?1.發送ARP請求的以太網數據幀給以太網上的每個主機,即廣播(以太網源地址填全1)。ARP請求幀中包含了目的主機的IP地址。?
? ? ? ? ?2.目的主機收到了該ARP請求之后,會發送一個ARP應答,里面包含了目的主機的MAC地址。?
ARP協議工作原理
? ? ? ? ? ???(A)首先檢查數據包中的 IP 地址是否是自己的 IP 地址,如果不是,則忽略該數據包。
? ? ? ? ? ? ?(B)如果是,則首先從數據包中取出源主機的 IP 和 MAC 地址寫入到 ARP 列表中,如果已經存在,則覆蓋。
? ? ? ? ? ? ?(C)?然后將自己的 MAC 地址寫入 ARP 響應包中,告訴源主機自己是它想要找的 MAC 地址。
? ? ? ? ? 6.源主機收到 ARP 響應包后。將目的主機的 IP 和 MAC 地址寫入 ARP 列表,并利用此信息發送數據。如果源主機一直沒有收到 ARP 響應數據包,表示 ARP 查詢失敗。
ARP工作實例
下面我們就來談一談ARP地址解析協議是如何把目的地址的IP地址轉化成MAC地址的。?
1. 首先,主機A想要向主機B發送消息,但它不知道主機B的MAC地址,只知道主機B的IP地址。這時,主機A會在當前局域網下以廣播的形式發送ARP請求數據報,表示主機A想知道主機B的MAC地址(注:廣播時,以太網首部的目的地址為全f)。?
2. 由于是廣播,所以在本局域網上的所有主機都會受到主機A發送的ARP數據報,然后所有主機會把以太網首部這個報頭給去掉,向上面的網絡層發送ARP數據報。在這里我們便可以回答上面的問題了,以太網首部和ARP數據報內的MAC地址都不能少,一個是在數據鏈路層使用的,一個是在網絡層使用的,因為兩個層都不能看到互相的數據。?
3. 網絡層首先會檢查op字段,發現這時個ARP請求數據報,然后又會檢查目的IP地址字段,檢查完畢后,這時除了主機B外,在這個局域網內的其他主機都會把數據報丟棄,因為只有主機B的IP地址和目的IP地址是相同的。?
ARP緩存
? ? ? ARP高速緩存(即ARP表)是 ARP地址解析協議能夠高效運行的關鍵,?(如果有多次ARP響應時,以最后一次響應為準)
? ? ? ARP給IP地址和MAC地址中間做了動態映射,也就是說緩存了一個ARP表,將得到的IP地址和MAC地址對應起來,如果在表中沒有查到IP地址對應的MAC地址,就會發廣播去找。隨著用戶的使用,ARP表如果不做任何措施,就會變得越來越臃腫緩慢,就降低了網絡傳輸數據的效率,所以ARP緩存中每一項被設置了生存時間,一般是20分鐘,從被創建時開始計算,到時則清除,如果在計時期間又被使用了,計時會重置。
?
我們可以通過arp命令查看arp表:?
? ? ? ? ? ? ??
?
ARP表中記錄了一些IP地址與物理地址的映射,在arp表中,我們可以看到一個Flags字段,該字段有C、M、P三種取值:?
? ? ? C: 表明arp條目為通過ARP請求動態獲取,(一般存活時間為20min)?
? ? ? M:表明arp條目為手動設置。?
? ? ? P: 表示Publish,表示該ARP條目可以用于恢復其他主機的ARP請求。(用于ARP proxy)
?
報文格式(ARP 幀)
? ?
? ??
?
? ? ?
? ?
ARP幀以以太幀的形式存在,即ARP消息包含在以太幀中 ,因此包含以太幀的首部和尾部。(這里不考慮802.1p/q等特殊以太幀)。?
* 幀類型*:用來向收到數據報的主機表示該數據報的類型,常見類型如下:?
0800:IP數據報;?
0806:ARP請求/應答數據報;?
8035:RAPP請求/應答;?
ARP Request or Reply Message 是ARP幀的核心部分。?
前14字節是以太網首部幀格式 ,然后后面四個字段描述了本ARP幀涉及的硬件類型和協議類型。?
Hard Type:該字段占2個字節,指定硬件地址類型, 如值為1表示為以太網地址。?
Prot Type :該字段占2個字節,指定協議地址類型,如0x0800 表示協議地址類型為IPv4地址。該值與以太幀首部的類型字段相同。?
Hard Size:?表示硬件地址的大小(單位:字節),如以太網地址為6。
Prot Size :?表示協議地址的大小(單位:字節), 如IPv4地址大小為4。(硬件地址長度和協議地址長度,分別占1個字節,指出硬件地址和協議地址的長度,以字節為單位。)
OP :?表示ARP的消息類型。?
? ? 1:ARP Request;?
? ? 2:ARP Reply?
? ? 3:RARP Request?
? ? 4:RARP Reply
后面四個字段寫入的是一些物理地址和協議地址。不一定全部有值。?
對于ARP Request 而言,我們不知道目的MAC地址是什么,因此 Target’s Hardware Address 全部填充為0.
ARP幀的交互
當主機接收到一個針對其協議地址的ARP Request時,它會回應ARP Reply. 該Reply消息內容為:對調sender 和 Target 地址字段,然后將Sender’s Hardware Address(即原來的Target’s Hardware Address )修改為本機的Hardware Address。另外OP字段有1變為2.
?
局域網中一臺主機獲取已知一臺IP地址的主機的硬件地址過程:
當主機A向本局域網上的主機B發送IP數據報時,先在ARP高速緩存中查找B主機IP所對應的硬件地址,要是找到了,就將此硬件地址寫入到MAC幀首部的目的地址中,然后通過局域網發送;要是沒有找到,那么主機A會運行ARP,將會按照以下步驟找出主機B的硬件地址。
①主機A想局域網中廣播發送一個ARP請求分組,廣播的主要內容是:“我的IP地址是IPA,我的硬件地址是MACA,我要知道IP地址為IPB的主機的硬件地址”。
此時局域網中的主機都會收到這樣的一個數據幀。
②鏈路層在接收到這個數據幀之后將有效載荷和報頭分離之后,將有效載荷交付給ARP協議進行處理(因為MAC幀首部的幀類型為ARP協議)。
③在所有局域網中的主機獲得鏈路層交付的有效載荷后,它們會對其進行處理,發現其中的接收端IP地址與自己的IP地址不同,則會將該數據報丟棄,不做處理。只有B主機會發現接收端IP地址與自己的IP地址相同,此時B主機會向A主機單播一個響應分組(因為通過A的廣播,B知道了A的IP地址和硬件地址),“我的IP是IPB,我的硬件地址是MACB”。
④在主機A收到主機B的ARP響應分組后,就在ARP的告訴緩存中寫入B主機的IP地址到硬件地址的映射。
?
免費ARP 和 地址沖突檢測
* 免費ARP*?指的是 主機發送一個ARP請求,求尋找自己的IP地址 。常用在系統引導時,對網絡接口進行配置的時候。?
免費ARP有兩個重要作用?
1. 檢測網絡上是否有其他主機的IP地址與本機相同,即地址沖突檢測。?
2. 當主機向網絡廣播免費ARP時,其實她也將自己的IP地址與物理地址的映射關系廣播給其他主機了。因此,如果本機的硬件地址發生了變化,其他主機也應該做出相應的更新。
?
ARP請求發送到了目的端之后,目的端填上了自己的硬件地址,然后把兩個目的端地址和兩個發送端地址交換,把op的值置為2,再把該ARP數據報發回去。
前面提到的獲取目的端的MAC地址的步驟是在一個特殊的條件下完成了,即發送端和目的端都在同一個以太網中,那么當發送端和目的端不在同一個網絡中呢。?
這種情況下有一個術語叫ARP代理。連接發送端和目的端網絡的路由器就充當這樣一個代理。舉個簡單的例子,當主機A發送ARP請求給主機B時,它們處于不同的網絡,但是由路由器C相連,當C識別出主機B的IP地址屬于它連接的一個主機,這時C就會欺騙主機A,讓A誤認C就是目的主機,然后C就將ARP數據報發給B,最后B再將ARP應答發回來。
還有最后一個ARP特性:免費ARP?
它是指主機發送ARP查找自己的IP地址。?
作用有兩個:?
1.主機可以通過它來確定另一個主機有沒有設置同樣的IP地址。?
2.如果發送免費ARP的主機改變了硬件地址(換了網卡),那么這個分組就會更新其它主機高速緩存表中舊的硬件地址。
??ARP報頭定義如下:?
?
在學習到這些知識之后我們可以做這樣一些實驗,編寫一個腳本抓取和自己電腦處于同一局域網的其他主機的MAC地址。
原理很簡單,一個C類的地址最多有254臺主機,所以我們可以暴力的去ping每個IP,我們就可以獲取到連接在本局域網中的其他主機的MAC地址。
?
#!/bin/bashnet='192.168.199.' i=1count=0 while [ $i -le 254 ] doif [ $count -eq 20 ];thencount=0sleep 1fiping -c1 $net$i &let i++let count++ donewait echo '############################################' arp -a | grep -v 'incomplete' echo '############################################'在我電腦上成功抓取到其他主機的硬件地址。
注意:如果是使用VM虛擬機,要將網絡適配器改為橋接模式
總結
以上是生活随笔為你收集整理的3、以太网基础知识——ARP地址解析协议原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ME3630模块常用指令介绍
- 下一篇: 4、以太网基础知识——ICMP协议详解