<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ARP協(xié)議

          共 4695字,需瀏覽 10分鐘

           ·

          2023-06-14 19:31

          ef06545c911643d00ef95bdf53478523.webp

          這里給大家做一個ARP的介紹分享:


          1. ARP協(xié)議簡介


          Address Resolution Protocol,用于建立和維護(hù)IPv4(IPv6使用NDP協(xié)議)地址和MAC地址的動態(tài)映射。在一個局域網(wǎng)中(LAN),數(shù)據(jù)包通過MAC地址來尋址的(網(wǎng)絡(luò)層的數(shù)據(jù)包被封裝在二層數(shù)據(jù)幀中進(jìn)行傳輸),但是IPv4是用IP地址來尋址。只知道IP地址,不知道MAC地址,數(shù)據(jù)包是無法發(fā)送(不能尋址)的,這個時候就使用ARP協(xié)議獲得IP地址對應(yīng)的MAC地址。

          注意ARP協(xié)議只在LAN中使用(LAN不僅指192.168之類的私有網(wǎng)絡(luò)地址,公網(wǎng)地址也是可以組成一個一個LAN的)。那么如果目的IP不在當(dāng)前LAN中呢,TCP/IP協(xié)議族是用來實現(xiàn)多個LAN之間的互聯(lián),網(wǎng)關(guān)就相當(dāng)于一個國家(LAN)的海關(guān),一個LAN中的主機(jī)發(fā)給其他LAN的數(shù)據(jù)包(貨物)首先發(fā)給網(wǎng)關(guān),然后網(wǎng)關(guān)再把數(shù)據(jù)包發(fā)送出去。所以主機(jī)需要做的事情是把數(shù)據(jù)包發(fā)送給網(wǎng)關(guān),網(wǎng)關(guān)的IP是已知的,此時ARP協(xié)議的工作是已知網(wǎng)關(guān)的IP獲得網(wǎng)關(guān)的MAC地址。

          ARP協(xié)議要求鏈路層支持廣播

          2. ARP協(xié)議工作的一般過程


          假設(shè)現(xiàn)在有一個LAN,LAN的網(wǎng)段是202.117.15.0/24

          主機(jī)A的IP地址:202.117.15.10,MAC地址00:00:00:00:00:10

          主機(jī)B的IP地址:202.117.15.11,MAC地址00:00:00:00:00:11

          A此時要給B發(fā)送一個UDP包(三層包),A不知道B的MAC地址,過程如下:

          1. A發(fā)送一個ARP request(廣播包,目的MAC全1),LAN中的所有主機(jī)(不考慮VLAN)都會收到這個ARP request。這個ARP request的內(nèi)容主要是:哪位小哥的IP地址是202.117.15.11啊,告訴我唄,我的IP地址是202.117.15.10,MAC地址是00:00:00:00:00:11

          2. B收到了這個ARP request后,發(fā)現(xiàn)ARP request詢問的IP地址是自己,B做了N件事:1)更新自己的ARP映射,即把MAC地址00:00:00:00:00:10映射到202.117.15.10上。(不考慮靜態(tài)映射)。2)給主機(jī)A發(fā)送ARP reply(單播,A的MAC地址已知),主要內(nèi)容是:哎呀,A你好啊,我就是你要找的那個B(202.117.15.11)啊,我的MAC地址是00:00:00:00:00:11。其他主機(jī)收到這個廣播后,會執(zhí)行步驟1),更新自己的ARP映射(不考慮存在靜態(tài)映射的情況)

          3. A收到B發(fā)來的ARP reply,更新自己的ARP映射,即把MAC地址00:00:00:00:00:11映射到202.117.15.11上。

          4. 此時A知道了B的MAC地址,B也知道A的MAC地址,于是A和B就可以沒羞沒臊地聊天了(互相發(fā)送三層數(shù)據(jù)包),只要某個時刻其中一個主機(jī)的MAC地址-IP地址映射過期了,就再次重復(fù)1到3的過程,然后繼續(xù)愉快地聊天,一點都不影響興致呢。

          3. ARP包的格式


          ARP在OSI七層模型中和TCP/IP四層模型中都被放在了數(shù)據(jù)鏈路層(二層),但是又有點像三層的,ARP有ethtype(0x0806),IP的ethtype是0x0800,貌似有稱為2.5層的

          下面是Ethernet & IPv4網(wǎng)絡(luò)中的ARP包的格式

          65847b092206fd4c87b45cacc0b4444e.webp

          ?

          ARP包是封裝在以太幀中,和IP包在以太幀中的位置是一樣一樣的

          字段說明:

          Hardware type: MAC地址類別,Ethernet中該值為1。通常所說的MAC地址,物理地址,數(shù)據(jù)鏈路層地址都指的同一個東西,以太網(wǎng)中的MAC地址又成為以太網(wǎng)地址。

          Protocol type: 協(xié)議地址類別,IPv4網(wǎng)絡(luò)中該值為0x0800(是的,和ethtype的值是一樣的,這不是巧合,用的就是Ethtype的值)

          Hardware address length:MAC地址長度,Ethernet中該值為6

          Protocol address length:協(xié)議地址長度,IPv4中該值為4

          Operation: 說明ARP包的類型,request時值為1,reply為2

          Sender hardware address?發(fā)送者的MAC地址

          Sender protocol address:發(fā)送者的協(xié)議地址(IPv4地址)

          Target hardware address:目標(biāo)MAC地址,ARP request中為廣播地址(全1)

          Target protocol address:目標(biāo)協(xié)議地址,

          發(fā)送者會在ARP request中填入自己的MAC地址,IP地址(Sender地址),目標(biāo)MAC填入二層廣播地址,目的IP地址填入詢問的IP地址,目標(biāo)主機(jī)收到ARP request后,發(fā)送ARP reply包,ARP reply中的Target地址是ARP request的Sender MAC地址和IP地址,ARPreply的Sender地址是主機(jī)自己的MAC地址和IP地址。

          4. ARP映射的類別和超時時間


          C:動態(tài)的映射,動態(tài)學(xué)習(xí)獲得的,就是通過上述的那個一般過程獲得的,一般超時時間為20分鐘(RFC1122中規(guī)定的)

          M:靜態(tài)的映射,手動靜態(tài)配置的ARP映射,沒有超時時間,但是大多數(shù)的實現(xiàn)中ARP reply會更改靜態(tài)的ARP映射(不管本主機(jī)是否發(fā)送過ARP request),沒有做過這個實驗,不清楚替換后的ARP映射是靜態(tài)的還是動態(tài)的。

          P:publish,主要用于代理ARP,代理ARP讓主機(jī)回應(yīng)(發(fā)送ARP reply)不是指向自己IP地址的ARP request,讓Sender以為自己是要找的MAC地址。這個現(xiàn)在很少用了

          5. Gratuitous ARP


          無理由ARP(請無視我的翻譯),GratuitousARP是指主機(jī)發(fā)送一個目標(biāo)IP為自己IP的ARP request。Gratuitous ARP一般在系統(tǒng)bootstrap(引導(dǎo)程序)時間執(zhí)行(這里我不太理解,計算不是系統(tǒng)啟動時間,只要是網(wǎng)卡啟動時應(yīng)該都會發(fā)送的吧)網(wǎng)卡發(fā)送一個目標(biāo)IP為自己ARP request。

          這個ARP包主要有兩個作用:

          1. 主機(jī)確定當(dāng)前網(wǎng)絡(luò)中是否有主機(jī)的IP和自己的IP是一樣的。如果這個ARPrequest發(fā)出后,收到了ARP reply,說明當(dāng)前LAN(或者VLAN)有主機(jī)用了和本機(jī)一樣的IP。這個時候系統(tǒng)通常會提醒用戶IP地址沖突。如果沒有收到ARP reply,說明LAN(或者VLAN)中沒有主機(jī)和自己IP地址一樣。

          2. 主機(jī)的MAC地址可能發(fā)生了變化(比如修改了MAC地址,或者換了網(wǎng)卡)。ARP request可以讓LAN(或者VLAN)中所有主機(jī)更新ARP request發(fā)送者的IP和MAC的映射關(guān)系。(靜態(tài)的ARP映射關(guān)系應(yīng)該不會被ARP reqeust更新,通常只會被ARP reply更新——這個是我根據(jù)上下文推測的,還沒有試驗過)

          6. 地址沖突檢測(ACD)


          Gratuitous ARP發(fā)現(xiàn)地址沖突后什么都不能做,只能提示用戶發(fā)生了地址沖突。所以RFC5227提出了一個新的機(jī)制:ACD(Address Conflict Detection)

          ACD可以對地址沖突做出反應(yīng),ACD定義了ARP probe和ARP announcement兩種ARP包(都是ARP request,只是填充內(nèi)容不太一樣)

          ARP probe:用于檢測IP地址沖突,Sender IP填充為0,填充為0是為了避免對其他主機(jī)的ARP cache造成污染(因為可能已經(jīng)有主機(jī)正在使用候選IP地址了,不要影響別人的正常通行嘛),Target IP是候選IP地址(即本機(jī)想要使用的IP地址)

          ARP announcement:用于昭示天下(LAN)本機(jī)要使用某個IP地址了,是一個SenderIP和Traget IP填充的都是本機(jī)IP地址的ARP request。這會讓LAN(VLAN)中所有主機(jī)都會更新自己的ARP cache,將IP地址映射到發(fā)送者的MAC地址。

          0a9eacc8819e660e798e6e77ef5bea22.webp

          ?

          6.1 ACD流程
          1. 網(wǎng)卡啟動時(或者從睡眠狀態(tài)恢復(fù),或者鏈接建立時)會發(fā)送一個ARP probe。(為了避免多個網(wǎng)卡同時啟動同時發(fā)ARP probe造成擁塞,有一個擁塞避免策略,不會立刻發(fā)送ARP probe,單個網(wǎng)卡的多個probe也不會連續(xù)發(fā)送,會有間隔時間)

          2. 發(fā)送主機(jī)可能收到ARP reply或者ARP probe,如果收到了ARP reply,說明候選IP地址已經(jīng)有主機(jī)在用了。如果收到了一個Target IP地址為候選IP的ARPprobe,說明另外一個主機(jī)也同時想要使用該候選IP地址。這種情況下,兩個主機(jī)都會提醒用戶出現(xiàn)了IP地址沖突。然后進(jìn)行地址沖突處理(見后面)

          3. 如果上述兩種ARP包都沒有收到,說明候選IP地址可用。主機(jī)發(fā)送一個ARP announcement,告訴其他主機(jī)這個候選IP有人用了,這個ARP request會讓LAN(VLAN)中其他主機(jī)更新ARP cache。

          4. 系統(tǒng)運行期間,ACD是一直在運行的,這點與Gratuitous ARP不同。主機(jī)會一直檢測收到的ARP reqeust 和ARP reply,判斷Sender IP域是否和本機(jī)IP地址一樣,如果一樣說明有主機(jī)也在用這個IP地址了。然后需要進(jìn)行地址沖突處理。(見下面)

          地址沖突處理:《RFC5527》提供了三種可選的解決機(jī)制:1)放棄使用該IP地址,2)發(fā)送一個ARP announcement來進(jìn)行IP地址“守衛(wèi)”,如果沖突仍然繼續(xù)存在,放棄使用這個IP。3)無視沖突,繼續(xù)使用這個IP

          7. TODO:


          1. 實驗ARP reqeust 和ARP reply 是否可以更新靜態(tài)IP-MAC映射

          2. 實驗不斷發(fā)送ARP reqeust進(jìn)行攻擊

          3. 實驗不斷發(fā)送ARP reply進(jìn)行攻擊

          4. 實驗使用ARP欺騙LAN中的其他主機(jī)(讓主機(jī)以為自己是網(wǎng)關(guān),或者讓網(wǎng)關(guān)以為自己是目的主機(jī),或者both),并在主機(jī)無法察覺的情況下查看主機(jī)數(shù)據(jù)。嘗試去篡改用戶數(shù)據(jù)

          來源:https://blog.csdn.net/xiaopeng_thriller/article/details/108200717

                                            ????????????????  END  ????????????????


          推薦閱讀

          【1】jetson nano開發(fā)使用的基礎(chǔ)詳細(xì)分享

          【2】Linux開發(fā)coredump文件分析實戰(zhàn)分享

          【3】CPU中的程序是怎么運行起來的?必讀

          【4】cartographer環(huán)境建立以及建圖測試

          【5】設(shè)計模式之簡單工廠模式、工廠模式、抽象工廠模式的對比

          本公眾號全部原創(chuàng)干貨已整理成一個目錄,回復(fù)[ 資源 ]即可獲得。


          瀏覽 88
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本 波多野结衣 影片 | 欧美黄片免费观看 | 操女人的网站 | 亚洲高清成人电影 | 久久久久无码精品人妻 |