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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3、以太网基础知识——ARP地址解析协议原理

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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協議工作原理

  • 每個主機都會在自己的 ARP 緩沖區中建立一個 ARP 列表,以表示 IP 地址和 MAC 地址之間的對應關系。
  • 主機(網絡接口)新加入網絡時(也可能只是mac地址發生變化,接口重啟等), 會發送免費ARP報文把自己IP地址與Mac地址的映射關系廣播給其他主機。
  • 網絡上的主機接收到免費ARP報文時,會更新自己的ARP緩沖區。將新的映射關系更新到自己的ARP表中。
  • 某個主機需要發送報文時,首先檢查 ARP 列表中是否有對應 IP 地址的目的主機的 MAC 地址,如果有,則直接發送數據,如果沒有,就向本網段的所有主機發送 ARP 數據包,該數據包包括的內容有:源主機 IP 地址,源主機 MAC 地址,目的主機的 IP 地址等。
  • 當本網絡的所有主機收到該 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地址解析协议原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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