ARP協議簡介
IP地址屬於網絡層,但ip地址在傳輸的時候需要跨越不同的物理網絡進行交換,此時如果一台主機要將一個幀發送到另一台主機,光知道其ip地址是不夠的,還需要知道其有效的“硬件地址”。
ARP(地址解析協議)就提供了一種在32位IPv4地址和以太網的48位MAC地址(硬件地址)之間的映射。
ARP提供的是網絡層地址到相關硬件地址的“動態映射”,即:會自動執行和隨時間變化,而不需要系統管理員的配置。(如一台一台主機改變了它的網卡后(mac地址改變),ARP可以在一定延時后繼續正常工作)
整體流程
http://10.0.01當本地計算機在瀏覽器中瀏覽一個網頁時:
本地計算機先是判斷該服務是位於本地(看ip地址是否位於同一子網)還是遠程。
如果是遠程,且發送端與遠程接收端之間是“直接交付”(擁有相同的ip地址前綴)的形式,
整體流程如下圖:
(1)瀏覽器調用一個特殊的函數來解析URL,看其是否包含域名(主機名)。(此例子使用的是IPv4地址)
(2)應用程序要求TCP協議建立一條到10.0.0.1的連接。
(3)TCP嘗試向遠程主機發送一個連接請求(此時由於假定的是直接交付,所以中途不經過任何路由器)。
(4)、(5)查看本地主機的“ARP緩存(或表)”中是否已經緩存了ip地址與mac地址之間的映射,如果沒有緩存,則進入下面的步驟。
(6)在一個共享的鏈路層網段上(ARP協議多用於局域網內的直接交付),ARP向“所有主機”發送一個稱為“ARP請求”的以太網幀。這種行為被稱為“以太網廣播”(也叫鏈路層廣播)。而“ARP請求”的目的是:如果某主機接收了該ARP請求,且該主機IPv4地址也與10.0.0.1一致,那么這台主機請返回給我你的MAC地址。(ARP協議就是用這種方式,知道了10.0.0.1地址所對應的MAC地址)。(IP地址不匹配的主機會主動丟棄掉ARP請求)
(7)假設找到了“使用10.0.0.1作為IPv4地址”的主機,那么該主機的ARP協議需要響應一個“ARP應答”。該應答包含該主機的IPv4地址和MAC地址。該應答會直接發送給請求的發送方。
(8)“ARP應答”被原始請求的發送方接收。
(9)發送方將數據報封裝在以太網幀中,使用通過ARP協議獲取到的接收方的MAC地址,直接將以太網幀發送給接收方。
由此該以太網幀僅指向正確的目的主機,其他主機或路由不會接收到這個數據報。
通過這個流程,我們也能明白:當僅使用直接交付時,並不需要經過路由器。
APR緩存
為了使ARP高效運行,每個主機或路由器上都維護有一張“ARP緩存表”。
該緩存存儲了每個接口從網絡層地址(ip地址)到硬件地址(mac地址)的最新映射關系。
緩存正常的到期時間為:條目創建開始后的20分鍾。(管理員也可設置緩存條目永不超時)
每個映射的緩存條目包含5個元素:
主機名(對應一個ip地址)、硬件地址類型、硬件地址、標志、本地網絡接口。
其中“標志”包含了一個符號:C、M或P.
C表示,該緩存條目是由ARP協議自己“動態學習”得來的。
M表示,該緩存條目是手工輸入的。
P表示,該緩存條目是“發布的”。對於任何P類的緩存條目,主機對輸入的ARP請求都返回一個ARP相應。該選項用於配置代理ARP。
ARP幀格式
前14個字節(MAC頭部)是一個標准的以太網幀頭部,DST表示目的MAC地址,SRC表示源MAC地址,長度或類型用於確定頭部后面的數據類型,常見的值包括:0x0800(IPv4)、0x86DD(IPv6)、0x0806(ARP)
前14個字節之后,由ARP協議來定義,ARP幀的前8個字節時通用的:
硬件類型字段指出硬件地址類型,對於以太網,該值為1.
協議類型字段指出映射的協議地址類型,對於IPv4地址,該值為0x0800。(當以太網幀包含“IPv4數據報”時,長度或類型字段與協議字段可能一樣,即都是0x0800)
硬件大小和協議大小分別指出硬件地址和協議地址的字節數。(對於以太網中使用IPv4地址的ARP應答,其值為6和4)
Op字段指出該操作是:ARP請求(值為1)、ARP應答(2)、RARP請求(3)、RARP應答(4)
代理ARP
代理ARP是一個系統(通常是一個路由器)可回應不同主機的ARP請求(簡單的說就是不管你找的是不是我,我都響應你,把我的mac地址告訴你,這樣你下次再訪問該ip時,通過arp緩存表,自動就訪問到我這台冒名的主機上了)。