ARP/代理ARP

1.ARP
首先講到ARP,ARP是地址解析協議,它的作用是在以太網環境下,通過3層的IP地址來找尋2層的MAC地址,得到一張ARP緩存表。轉發數據的時候根據ARP緩存表來進行傳輸。下圖詳細說明數據傳輸時ARP是如何一步步操作的。
在配置IP地址後,不做任何ping操作,ARP緩存表是這樣的:

wKioL1Me_yvyJ57HAAGyiTIaP5Y637.jpg
當PC去ping R1的時候,你會發現第一個丟包了。像這樣
R1#ping 192.168.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.2, timeout is 2 seconds:
.!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/25/56 ms

第一個包其實是做ARP請求去了。PC發現ping的是本網段,會發出ARP廣播,向R1請求192.168.1.2的MAC地址。得到迴應後ARP表會添加ARP請求得來的相應內容。

wKioL1Me_zrR329xAAC0bonLo4o780.jpg

PC:這個時候PC再去ping 10.1.1.3會發現ping的不是本網段,由於PC沒有路由功能所以不知道該往哪裏發送,會按照之前已經配好的默認網關發送出去,一般默認網關會配置成路由器的接口IP,在這裏是192.168.1.2。查看ARP緩存表發現了192.168.1.2對應的MAC地址,就把包交給路由器處理了。

R1:路由器收到去往10.1.1.0網段的數據包會查詢路由表,首先查看路由表發現數據該發往FastEthernet 0/1
#show ip route
C       10.1.1.0 is directly connected, FastEthernet0/1
然後查看ARP表是否有下一跳10.1.1.3的MAC地址信息,如果有則按MAC把數據發到下一跳;如果沒有則發出ARP查詢,查詢後獲得下一跳地址10.1.1.3的MAC地址,存到ARP緩存表中,然後轉發。
wKioL1Me_0vwV5m2AAEMd1RgOUs698.jpg
數據包發送到R2(已做好靜態路由)。同理數據包返回,成功ping通。



2.代理ARP
"什麼是代理ARP?代理ARP就是通過使用一個主機(通常爲router),來作爲指定的設備對另一設備的ARP請求作出應答。"這個可以說是一個官方解釋了。大家可以用同一個拓撲來驗證一下,在這裏我們最常使用Router關閉路由功能來模擬成PC完成這個實驗(左方PC爲路由器模擬,在做此實驗前請把前一實驗的ARP信息清除,建議重啓):
wKiom1Me_4Oy-vt_AAB-m58HI0M808.jpg
PC上不配置默認網關,此時用PC去ping 192.168.1.2和10.1.1.3。會得到以下ARP表
wKiom1Me_4_RPjcEAADdTR2wppA109.jpg

由此可見,PC發出ARP請求10.1.1.3的MAC地址,R2以自己的FastEthernet0/0口地址代理R3去迴應PC,告訴PC自己的FastEthernet0/0就是10.1.1.3的MAC地址。
結論:有默認網關的的時候PC按默認網關走,沒有默認網關的時候路由器通過代理ARP完成通信。
到目前爲止一切都看起來那麼的合理,那麼的順利。這個實驗是一些培訓班常做的實驗之一。其實,錯了!

問題出在哪裏?問題就出在我們是用一臺路由器去模擬PC。不管是否關閉路由功能,它始終不是PC,它處理數據的方式與PC也不一樣。請大家思考一下,如果是一臺PC,在沒有默認網關的情況下去ping一個非本網段地址,會出現什麼情況?
wKioL1Me_3DAnIIvAAFCOkd9mME239.jpg

在沒有默認網關的情況下ping一個非本網段地址,顯示目標網絡不可達,然後直接丟包,根本不會發出ARP查詢。
PC在什麼時候會發出ARP查詢呢?ping一個本網段地址的時候(大家可以抓包來驗證一下)。其實就是思科文檔的這種情況了:
wKiom1Me_6CwVa_NAAD4KtpL4uw585.jpg
看清楚了,PC-A的IP地址是/16位,PC-D的IP地址是/24位,所以當PC-A去ping PC-D的時候,PC-A認爲是ping同一個網段,會發出ARP請求,這個時候ARP請求就到了路由器上了。路由器如果開啓了代理ARP功能,會代替PC-D給PC-A迴應,告訴PC-A路由器的e0口MAC地址00-00-0c-94-36-ab就是PC-D的MAC地址,完成代理ARP操作,保護了PC-D的MAC地址隱私。

我認同這種說法,是合情合理的。但是不禁有個問題,誰會用這麼腦殘的方法配置IP地址呢?好吧,就當是有。
以下轉自鳥哥的Linux私房菜:
"如果你一開始設計的網路環境就是同一個 C class 的網域,例如 192.168.10.0/24 , 後來因為某些因素必須要將某些主機搬到比較內部的環境中,例如圖一的 PC2 ~ PC4 。 然後又因為某些因素,所以你不能變更 PC2 ~ PC4 的 IP ,也就是說,有點像底下這樣的圖示:"
wKioL1Me_4PCGzBeAAEDKRSyW58064.jpg
代理ARP作爲這種特殊情況的解決方案是無可厚非的,但是按道理說這種情況萬中無一。既然這種情況出現的概率那麼低,爲什麼要把代理ARP設置爲默認啓動?這不是浪費資源嗎?還存在ARP欺騙等安全隱患,完全可以把代理ARP功能設置爲默認關閉。個人意見,有朋友知道原因請告知。


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