前言:ARP協議的作用:
1. 什麼是ARP?
ARP (Address Resolution Protocol) 是個位址解析通訊協定。最直白的說法是:在IP乙太網路中,當一個上層協議要發包時,有了該節點的IP地址,ARP就能提供該節點的MAC地址。
2為什麼要有ARP?
OSI 模式把網路工作分為七層,彼此不直接打交道,只通過介面(layre interface). IP地址在第三層, MAC地址在第二層。
協議在發生資料包時,首先要封裝第三層 (IP地址)和第二層 (MAC地址)的前序, 但協議只知道目的節點的IP地址,不知道其物理地址,又不能跨第二、三層,所以得用ARP的服務。
詳細說明:
Ø 在網路通訊時,源主機的應用程式知道目的主機的IP地址和連接埠號碼,卻不知道目的主機的硬體地址,而資料包首先是被網卡接收到再去處理上層協議的,如果接收到的資料包的硬體地址與本機不符,則直接丟棄。因此在通訊前必須獲得目的主機的硬體地址。ARP協議就起到這個作用
Ø 當一台主機把乙太網路資料幀發送到位於同一區域網路上的另一台主機時,是根據 48位的乙太網路地址來確定目的介面的,裝置驅動程式從不檢查 IP資料報中的目的IP地址。ARP(位址解析)模組的功能為這兩種不同的地址形式提供映射:32位的 IP地址和 48位的乙太網路地址
一.ARP報文各欄位含義:
ARP報文欄位總共有28個位元組
1.硬體類型:佔2個位元組,表明ARP實現在何種類型的網路上。
Ø 值為1:表示乙太網路。
2.協議類型:佔2個位元組表示要映射的協議地址類型。
Ø IP:0800
3.硬體地址長度:佔1個位元組,表示 MAC地址長度,其值為6個位元組。
4.協議地址長度:佔1個位元組,表示IP地址長度,此處值4個位元組
5.操作類型 :佔2個位元組,表示ARP資料包類型。
Ø 值為1表示ARP請求。
Ø 值2表示ARP應答。
6.源MAC地址:佔6個位元組,表示發送端MAC地址
7.源IP地址:佔4個位元組,表示發送端IP地址
8.目的乙太網路地址:佔6個位元組,表示目標裝置的MAC物理地址
9.目的IP地址:佔4個位元組,表示目標裝置的IP地址.
注意:在ARP操作中,有效資料的長度為28個位元組,不足乙太網路的最小長度46位元組長度,需要填充位元組,填充位元組最小長度為18個位元組
二.ARP請求分組或應答分組
乙太網路首部總共有14位元組資料,arp請求報文總共有28位元組。所以一個ARP請求分組或應答分組總共有46位元組資料。
而乙太網路資料包的最小資料為60位元組。所以,要對其進行填充。
這裡有一些重複資訊
1. 在乙太網路的資料幀前序中和ARP請求資料幀中都有發送端的MAC物理地址。
2. 在發送ARP請求時,乙太網路幀頭中的目的MAC物理地址為FF-FF-FF-FF-FF-FF,而在ARP幀中的目的MAC處此時為空白。
3. 對一個ARP請求來說,除ARP中目的端MAC硬體地址外的所有其他的欄位都有填儲值。當系統收到一份目的端為本地的ARP請求報文後,它就把硬體地址填進去,然後用兩個目的端地址分別替換兩個發送端地址,並把操作欄位置為2,最後發送出去。
三.ARP協議工作過程:
1. 原理:(ARP協議只使用於區域網路中)
1> 在區域網路中,網路中實際傳輸的是“幀”,幀裡面是有目標主機的MAC地址的。
2> 在乙太網路中,一個主機要和另一個主機進行直接通訊,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得呢?它就是通過位址解析通訊協定獲得的。所謂“位址解析”就是主機在發送幀前將目標IP地址轉換成目標MAC地址的過程。
3> ARP協議的準系統就是通過目標裝置的IP地址,查詢目標裝置的MAC地址,以保證通訊的順利進行。
4> 點對點的串連是不需要ARP協議的
2. 工作過程:
1> 當主機A向本區域網路上的某個主機B發送IP資料報時,就先在自己的ARP緩衝表中查看有無主機B的IP地址。
2> 如果有,就可以查出其對應的硬體地址,再將此硬體地址寫入MAC幀,然後通過乙太網路將資料包發送到目的主機中。
3> 如果查不到主機B的IP地址的表項。可能是主機B才入網,也可能是主機A剛剛加電。其高速緩衝表還是空的。在這中情況下,主機A就自動運行ARP。
(1)ARP進程在本區域網路上廣播一個ARP請求分組。ARP請求分組的主要內容是表明:我的IP地址是192.168.0.2,我的硬體地址是00-00-C0-15-AD-18.我想知道IP地址為192.168.0.4的主機的硬體地址。
(2)在本區域網路上的所有主機上啟動並執行ARP進行都收到此ARP請求分組。
(3)主機B在ARP請求分組中見到自己的IP地址,就向主機A發送ARP響應分組,並寫入自己的硬體地址。其餘的所有主機都不理睬這個ARP請求分組。ARP響應分組的主要內容是表明:“我的IP地址是192.168.0.4,我的硬體地址是08-00-2B-00-EE-AA”,請注意:雖然ARP請求分組是廣播發送的,但ARP響應分組是普通的單播,即從一個源地址發送到一個目的地址。
(4)主機A收到主機B的ARP響應分組後,就在其ARP高速緩衝表中寫入主機B的IP地址到硬體地址的映射。
3. 案例說明:用ping說明ARP工作的原理
假設我們的電腦IP地址是192.168.1.1,要執行這個命令:ping192.168.1.2。該命令會通過ICMP協議發送ICMP(乙太網路控制報文協議)資料包
該過程需要經過下面的步驟:
1> 應用程式構造資料包,該樣本是產生ICMP包,被提交給核心(網路驅動程式);
2> 核心檢查是否能夠轉化該IP地址為MAC地址,也就是在本地的ARP緩衝中查看IP-MAC對應表;
3> 如果存在該IP-MAC對應關係,那麼跳到步驟<7;
如果不存在該IP-MAC對應關係,那麼接續下面的步驟;
4> 核心進行ARP廣播,目的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令類型為REQUEST(1),其中包含有自己的MAC地址;
5> 當192.168.1.2主機接收到該ARP請求後,就發送一個ARP的REPLY(2)命令,其中包含自己的MAC地址;
6> 本地獲得192.168.1.2主機的IP-MAC地址對應關係,並儲存到ARP緩衝中;
7> 核心將把IP轉化為MAC地址,然後封裝在乙太網路頭結構中,再把資料發送出去;
4. 特殊情況:
ARP是解決同一個區域網路上的主機或路由器的IP地址和硬體地址的映射問題。如果所要找的目標裝置和源主機不在同一個區域網路上。
1>此時主機A就無法解析出主機B的硬體地址(實際上主機A也不需要知道遠程主機B的硬體地址);
2>此時主機A需要的是將路由器R1的IP位址解析出來,然後將該IP資料報發送給路由器R1.
3>R1從路由表中找出下一跳路由器R2,同時使用ARP解析出R2的硬體地址。於是IP資料報按照路由器R2的硬體地址轉寄到路由器R2。
4>路由器R2在轉寄這個IP資料報時用類似方法解析出目的主機B的硬體地址,使IP資料報最終交付給主機B.
說明:
Ø 如果你的資料包是發送到不同網段的目的地,那麼就一定存在一條網關的IP-MAC地址對應的記錄。
Ø 知道了ARP協議的作用,就能夠很清楚地知道,資料包的向外傳輸很依靠ARP協議,當然,也就是依賴ARP緩衝。要知道,ARP協議的所有操作都是核心自動完成的,同其他的應用程式沒有任何關係。同時需要注意的是,ARP協議只使用於本網路。
四.ARP緩衝表和TTL
1. ARP緩衝表
1> ARP協議的本質是完成網路地址到物理地址的映射。從概念上將就是找到一個映射方法f,使得“物理地址 = f(網路地址)“。物理地址有兩種基本類型:乙太網路類型和令牌環網類型。網路地址特指IP地址,對映射方法的要求就是高效。具體到乙太網路,它使用的是動態綁定轉換的方法。一般是設定ARP快取,通過學習,老化,更新,溢出演算法處理ARP映射表來解決這些問題。
Ø 學習指ARP收到任何指向本結點IP地址的ARP/IP包,從中提取出地址對,當ARP緩衝表中無對應項時,由ARP接收部分添加;
Ø 老化指為每項設定壽命域,以便代謝掉陳舊的地址映射項;
Ø 更新指ARP提取到新的地址對時,用其更新緩衝裡已有的對應項;
Ø 溢出演算法指當緩衝慢時,採取何種方法替代舊有的地址對。
2> ARP緩衝表由狀態,壽命,IP地址,MAC地址4個欄位組成。狀態欄位指示地址對是否有效;壽命欄位用於老化操作,初始存入最大值,以後由OS時間函數調用,每秒減1,直至為0清除;IP地址和MAC地址欄位儲存網路地址和物理地址的映射。圍繞ARP緩衝表,完成了4種操作:學習,老化,更新,表滿處理。
3> 當ARP被詢問一個已只IP地址節點的MAC地址時,先在ARPcache 查看
l 若存在,就直接返回MAC地址,
l 若不存在,才發送ARP request向區域網路查詢。
4> 當主機A向B發送資料報時,很可能以後不久主機B還要向A發送資料報,因而主機B可能要向A發送ARP請求分組。
所以,為了減少網路上的通訊量,主機A在發送其ARP請求分組時,就將自己的IP地址到硬體地址的寫入主機B自己的ARP高速緩衝表中。這對主機B以後向A發送資料報時就更方便了。
Tiger 說明:
任何事物都有兩面性,如果掌握的好它就是天使,如果掌握的不好它就是Satan,ARP中的緩衝表為電腦之間的通訊效率和減少網路通訊量之間作出了巨大的貢獻,但是它同時為我們上網時留下了安全隱患;例如交換器嗅探(在下面會有介紹)
2. ARP中的TTL(即上面所說的壽命域)
ARP將儲存在高速緩衝表中的每一個映射地址表項都設定了TTL(存留時間),只要TTL小於0的項目就從高速緩衝表中刪除掉。
(ARP的逾時值一般為20分鐘,對不完整的表項設定為20分鐘,而對不完整的表項設定為2分鐘《不完整的表項:即在乙太網路上對一個不存在的主機發出ARP請求》,當這些表項再次使用時,這些實現一般都把逾時值重新設為20分鐘。)
好處:主機A和B通訊。A的ARP高速緩衝表裡儲存有B的物理地址。但B的網卡突然壞了,B立即就更換了一塊,因此B的硬體地址就改變了。A還要和B繼續通訊。A在其ARP緩衝表中尋找到B原先的硬體地址,並使用該硬體地址向B發送資料幀。但B原先的硬體地址已經失效了。因此A無法找到主機B。但是過了一段時間,A的ARP高速緩衝表中已經刪除了B原先的硬體地址(因為它的存留時間到了),於是A重新光播發送ARP請求分組,又找到了B。
五.ARP命令:
1. 使用arp-a命令就可以查看本地的ARP緩衝內容,所以,執行一個本地的PING命令後,ARP緩衝就會存在一個目的IP的記錄了。
2. 使用arp –d來刪除ARP快取中的某一項內容
3. 使用arp –s來增加高速緩衝表中的內容,這個命令需要主機名稱和乙太網路地址。新增加的內容是永久性的,除非在命令列的末尾加上關鍵字temp。
arp –s 157.55.85.212 00-aa-aa-562-c6-09
增加一個靜態ARP表項。
4. arppub –s:使系統起著主機ARP代理功能。系統將回答與主機名稱對應的IP地址的ARP請求。
六ARP其他方面
1.交換網路的嗅探
1>1.ARP協議並不只在發送了ARP請求才接收ARP應答
當電腦接收到ARP應答資料包的時候,就會對本地的ARP緩衝進行更新,將應答中的IP和MAC地址儲存在ARP緩衝中。
因此,在上面的假設網路中,B向A發送一個自己偽造的ARP應答,而這個應答中的資料為發送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本來應該是CC-CC-CC-CC-CC-CC,這裡被偽造了)。當A接收到B偽造的ARP應答,就會更新本地的ARP緩衝,將本地的IP-MAC對應表更換為接收到的資料格式,由於這一切都是A的系統核心自動完成的,A可不知道被偽造了。ARP欺騙的主要用途就是進行在交換網路中的嗅探。
2.IP地址衝突
1>如果網路中存在相同IP地址的主機時候,就會報告出IP地址衝突的警告。
2>如何產生?
Ø 比如某主機B規定IP地址為192.168.0.1,如果它處於開機狀態,那麼其他機器A更該IP地址為192.168.0.1就會造成IP地址衝突。
Ø 其原理是:主機A在串連網路(或更改IP地址)的時候就會向網路發送ARP包廣播自己的IP地址,也就是free arp(免費ARP).如果網路中存在相同IP地址的主機B,那麼B就會通過ARP來reply該地址,當A接收到這個reply後,A就會跳出IP地址衝突的警告,當然B也會有警告。因此用ARP欺騙可以來偽造這個ARPreply,從而使目標一直遭受IP地址衝突警告的困擾。
3.阻止目標的資料包通過網關
1>比如在一個區域網路內通過網管上網,那麼串連外部的電腦上的ARP緩衝中就存在網管IP-MAC對應記錄
2>如果,該記錄被更改,那麼該電腦向外發送的資料包總是發送到了錯誤的網關硬體地址上,這樣,該電腦就不能上網了。
3>這裡也主要是通過ARP欺騙進行的。有兩種方法達到這樣的目的:
Ø 向目標發送偽造的ARP應答資料包,其中發送方的IP地址為網管的地址,而MAC地址則為一個偽造的地址。當目標接收到ARP包,那麼就更新自身的ARP緩衝。如果該欺騙一直持續下去,那麼目標的網管緩衝一直是一個被偽造的錯誤記錄。不過,如果使用arp –a,就知道問題所在了。
Ø 第二種方法是欺騙網管。向網管發送偽造的ARP應答資料包,其中發送方的IP地址為目標的IP地址,而MAC地址則為一個偽造的地址。這樣,網管上的目標ARP記錄就是一個錯誤的,網管發送給目標的資料報都是使用了錯誤的MAC地址。這種情況下,目標能夠發送資料到網管,卻不能接收到網管的任何資料。同時,目標自己查看arp –a卻看不出任何問題來。
4.通過檢測混雜模式節點
1>在混雜模式中,網卡進行包過濾不同於普通模式。本來在普通模式下,只有本地地址的資料包或者廣播(多播等)才會被網卡提交給系統核心,否則的話,這些資料包就直接被網卡拋棄。現在,混合模式讓所有經過的資料包都傳遞給系統核心,然後被sniffer等程式利用。
2>通過特殊設計的ARP請求可以用來在一定程度上檢測處於混雜模式的節點,比如對網路中的每個節點都發送MAC地址為FF-FF-FF-FF-FF-FE的ARP請求。對於網卡來說這不是一個廣播位址(FF-FF-FF-FF-FF-FF),所以處於普通模式的節點就會直接拋棄該資料包,但是多數作業系統核心都認為這是一個廣播位址,如果有一般的sniffer程式存在,並設定網卡為混雜模式,那麼系統核心就會作出應答,這樣就可以判斷這些節點是否存在嗅探器了。
3>可以查看,很多基於ARP的攻擊都是通過ARP欺騙實現的。至於ARP欺騙的防範,還是儘可能使用靜態ARP。對於WIN,使用arp-s來進行靜態ARP的設定。
當然,如果能夠完全使用靜態IP+MAC對應,就更好了,因為靜態ARP緩衝只是相對的。當然,可以有一些方法來實現ARP欺騙的檢測。設定一個ARP的嗅探器,其中維護著一個本網的IP-MAC地址的靜態對應表,查看所有經過的ARP資料,並檢查其中的IP-MAC對應關係,如果捕獲的IP-MAC對應關係和維護的靜態對應關係對應不上,那麼就表明是一個欺騙的ARP資料包了。