arp協議
網絡設備有數據要發送給另一臺網絡設備時,必須要知道對方的網絡層地址(即IP地址)。IP地址由網絡層來提供,但是僅有IP地址是不夠的,IP數據報文必須封裝成幀才能通過數據鏈路進行發送。數據幀必須要包含目的MAC地址,因此發送端還必須獲取到目的MAC地址。通過目的IP地址而獲取目的MAC地址的過程是由ARP(Address Resolution Protocol)協議來實現的。
一臺網絡設備要發送數據給另一太網絡設備時,必須要知道對方的IP地址。但是,僅有IP地址是不夠的,因為IP數據報文必須封裝成幀才能通過數據鏈路進行發送,而數據幀必須要包含目的MAC地址,因此發送端還必須獲取到目的MAC地址。每一個網絡設備在數據封裝前都需要獲取下一跳的MAC地址。IP地址由網絡層來提供,MAC地址通過ARP協議來獲取。ARP協議是TCP/IP協議簇中的重要組成部分,ARP能夠通過目的IP地址發現目標設備的MAC地址,從而實現數據鏈路層的可達性。
網絡設備通過ARP報文來發現目的MAC地址。ARP報文中包含以下字段:
Hardware Type表示硬件地址類型,一般為以太網;
Protocol Type表示三層協議地址類型,一般為IP;
Hardware Length和Protocol Length為MAC地址和IP地址的長度,單位是字節;
Operation Code指定了ARP報文的類型,包括ARP request和ARP reply;
Source Hardware Address指的是發送ARP報文的設備MAC地址;
Source Protocol Address指的是發送ARP報文的設備IP地址;
Destination Hardware Address指的是接收者MAC地址,在ARP request報文中,該字段值為0;
Destination Protocol Address指的是指接收者的IP地址。
通過ARP協議,網絡設備可以建立目標IP地址和MAC地址之間的映射。網絡設備通過網絡層獲取到目的IP地址之後,還要判斷目的MAC地址是否已知。
網絡設備一般都有一個ARP緩存(ARP Cache),ARP緩存用來存放IP地址和MAC地址的關聯信息。在發送數據前,設備會先查找ARP緩存表。如果緩存表中存在對方設備的MAC地址,則直接采用該MAC地址來封裝幀,然後將幀發送出去。如果緩存表中不存在相應信息,則通過發送ARP request報文來獲得它。學習到的IP地址和MAC地址的映射關系會被放入ARP緩存表中存放一段時間。在有效期內,設備可以直接從這個表中查找目的MAC地址來進行數據封裝,而無需進行ARP查詢。過了這段有效期,ARP表項會被自動刪除。
如果目標設備位於其他網絡,則源設備會在ARP緩存表中查找網關的MAC地址,然後將數據發送給網關,網關再把數據轉發給目的設備。
主機A的ARP緩存表中不存在主機C的MAC地址,所以主機A會發送ARP request來獲取目的MAC地址。ARP request報文封裝在以太幀裏。幀頭中的源MAC地址為發送端主機A的MAC地址。此時,由於主機A不知道主機C的MAC地址,所以目的MAC地址為廣播地址FF-FF-FF-FF-FF-FF。ARP request報文中包含源IP地址、目的IP地址、源MAC地址、目的MAC地址,其中目的MAC地址的值為0。ARP Request報文會在整個網絡上傳播,該網絡中所有主機包括網關都會接收到此ARP request報文。網關將會阻止該報文發送到其他網絡上。
所有的主機接收到該ARP Request報文後,會檢查它的目的協議地址字段與自身的IP地址是否匹配。如果不匹配,則該主機將不會響應該ARP Request報文。如果匹配,則該主機會將ARP報文中的源MAC地址和源IP地址信息記錄到自己的ARP緩存表中,然後通過ARP Reply報文進行響應。
主機C會向主機A回應ARP Reply報文。ARP Reply報文中的源協議地址是主機C自己的IP地址,目標協議地址是主機A的IP地址,目的MAC地址是主機A的MAC地址,源MAC地址是自己的MAC地址,同時Operation Code被設置為reply。ARP Reply報文通過單播傳送。
主機A收到ARP Reply以後,會檢查ARP報文中目的MAC地址是否與自己的MAC匹配。如果匹配,ARP報文中的源MAC地址和源IP地址會被記錄到主機A的ARP緩存表中。ARP表項的老化超時時間缺省為1200秒。
在上述例子的組網中,主機A需要與主機B通信時,目的IP地址與本機的IP地址位於不同網絡,但是由於主機A未配置網關,所以它將會以廣播形式發送ARP Request報文,請求主機B的MAC地址。但是,廣播報文無法被路由器轉發,所以主機B無法收到主機A的ARP請求報文,當然也就無法應答。
在路由器上啟用代理ARP功能,就可以解決這個問題。啟用代理ARP後,路由器收到這樣的請求,會查找路由表,如果存在主機B的路由表項,路由器將會使用自己的G0/0/0接口的MAC地址來回應該ARP request。主機A收到ARP reply後,將以路由器的G0/0/0接口MAC地址作為目的MAC地址進行數據轉發。
主機被分配了IP地址或者IP地址發生變更後,必須立刻檢測其所分配的IP地址在網絡上是否是唯一的,以避免地址沖突。主機通過發送ARP request報文來進行地址沖突檢測。
主機A將ARP Request廣播報文中的目的IP地址字段設置為自己的IP地址,該網絡中所有主機包括網關都會接收到此報文。當目的IP地址已經被某一個主機或網關使用時,該主機或網關就會回應ARP reply報文。通過這種方式,主機A就能探測到IP地址沖突了。
本文出自 “大李子” 博客,謝絕轉載!
arp協議