ARP
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到局域網絡上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。
在相同網段的ARP工作原理
如圖,在相同網段的時候,PC5會廣播ARP請求,然后根據交換機的工作原理,如果划分了VLAN就在相同的VLAN內廣播,如果沒有划分VLAN隔離就,也就是默認的VLAN 1,在VLAN 1內廣播,相當於也是在VLAN內廣播。
PC上IP地址配置、MAC地址如圖而且不配置網關地址,交換機不做任何配置;
在PC5上ping2.2.2.4,進行抓包
1.可以看到PC5源地址46:27:57:a4:05:06,目的地址為廣播的ARP請求包,廣播請求Who has 2.2.2.4?
2.PC6收到ARP廣播包后把PC5的MAC地址和IP地址記入到ARP緩存表中,然后PC6回應源地址是46:27:59:05:06:06,目的地址是PC5的46:27:57:a4:05:06單播ARP回應;
3.PC5收到ARP單播回應,記入ARP緩存表;然后發送ICMP的ping包
配置地址如圖,地址掩碼相同,PC的網關是和路由器直連的路由器接口地址
首先,這里有幾個問題,路由器有隔離廣播域的功能,那么,當PC2廣播ARP請求的時候,PC3應該是收不到的,那么PC2是怎么通過IP地址ARP廣播請求得到PC3的MAC地址的呢?
回答一下上面的問題:
1.PC2得到的並不是PC3的MAC地址,而是網關R1的g0/0接口的MAC地址;
2.路由器的確隔離廣播域;
首先,和上面沒有配置網關地址可以看出,PC和路由器都會廣播發送ARP的request報文
路由器在他接口的廣播域發送廣播報文,PC收到並記入到ARP緩存表;
PC廣播自己的MAC地址,讓網關能收到,路由器收到記入ARP緩存表;
這樣PC和他的網關就有對方MAC地址和IP地址對應的緩存表;
接下來我們進行ping測試
可以看到,在PC6
發送不同網段的數據包的時候,ARP的作用是尋找網關的MAC地址,然后通過網關來轉發不同網段的數據包;
這里再說明一下代理ARP和正常ARP是怎么樣的一個區別:
代理ARP:
PC沒有設置網關,在和不同網段通信的時候,直接發送ARP廣播包,直接詢問目的網段,而這時,最近一個網關路由器充當一個代理的功能,回應自己的MAC地址給他,前提是這個路由器有ARP代理的功能;
正常ARP:
PC設置了網關,PC在訪問不同網段的時候,PC就直接會去找網關發送的是同網段的數據包,在發送和接受數據包的時候,要找的IP地址對應的MAC地址都是這個網關的MAC地址;
不管是那個形式的ARP,不同網段都是要查網關的MAC地址,代理ARP不會告訴你是他充當了你的網關,而是直接告訴你,他就算你要找的那個目的地,而正常ARP就在你知道他是網關的前提下,你直接找這個網關來幫你轉發數據;
接下來我們在說一下,為什么一定要知道了MAC地址才能通信:
首先從OSI和TCP/IP的網絡模型都可以看出,網絡層也就是IP地址的所工作的位置,是被MAC地址所工作的位置數據鏈路層或者網絡接口層封裝,這是從規定上解釋,網絡層通信一定要被底層封裝,也就是要知道了MAC地址后IP地址才能通信;
那為什么不直接用MAC地址在公網來尋址呢?
MAC地址就像身份證一樣,它只唯一的標志一個網絡接口,它沒有被設計為具有尋址功能,因為MAC地址是固定的;
在局域網,網絡規模不是非常大,可以靠MAC地址尋址;
所以我們想想如果一台PC要靠MAC地址在公網尋址,那這台PC最近的路由器就得知道這個數據幀的目的MAC地址從那個接口轉發,但是MAC不想IP地址一樣,有掩碼,有對應路由協議學習,那你如果要通過MAC地址轉發, 你就得知道所有網絡的MAC,這樣才能知道轉發路徑,這是不可能的,這種想法也是極端的,設計MAC地址當初就不是為了尋址,而是為了身份唯一;