ARP(地址解析協議)和RARP(逆地址解析協議)
ARP為IP地址到對應的硬體地址之間提供動態對映。
首先來看一個例子
我們敲入下面這個形式的命令:
% ftp bsdi
都會進行以下這些步驟。這些步驟的序號如圖4-2所示。
- 應用程式FTP客戶端呼叫函式gethostbyname(3)把主機名(bsdi)轉換成32 bit的IP地址。這個函式在DNS(域名系統)中稱作解析器,我們將在第14章對它進行介紹。這個轉換過程或者使用DNS,或者在較小網路中使用一個靜態的主機檔案(/etc/hosts)。
- FTP客戶端請求TCP用得到的IP地址建立連線。
- TCP傳送一個連線請求分段到遠端的主機,即用上述IP地址傳送一份IP資料包(在第18章我們將討論完成這個過程的細節)。
- 如果目的主機在本地網路上(如乙太網、令牌環網或點對點連結的另一端),那麼IP資料包可以直接送到目的主機上。如果目的主機在一個遠端網路上,那麼就通過IP選路函式來確定位於本地網路上的下一站路由器地址,並讓它轉發IP資料包。在這兩種情況下,IP資料包都是被送到位於本地網路上的一臺主機或路由器。
- 假定是一個乙太網,那麼傳送端主機必須把32 bit的IP地址變換成48 bit的乙太網地址。從邏輯Internet地址到對應的物理硬體地址需要進行翻譯。這就是ARP的功能。ARP本來是用於廣播網路的,有許多主機或路由器連在同一個網路上。
- ARP傳送一份稱作ARP請求的乙太網資料幀給乙太網上的每個主機。這個過程稱作廣播,如圖4-2中的虛線所示。ARP請求資料幀中包含目的主機的IP地址(主機名為bsdi),其意思是“如果你是這個IP地址的擁有者,請回答你的硬體地址。”
- 目的主機的ARP層收到這份廣播報文後,識別出這是傳送端在尋問它的IP地址,於是傳送一個ARP應答。這個ARP應答包含IP地址及對應的硬體地址。
- 收到ARP應答後,使ARP進行請求—應答交換的IP資料包現在就可以傳送了。
- 傳送IP資料包到目的主機。
在ARP背後有一個基本概念,那就是網路介面有一個硬體地址(一個48 bit的值,標識不同的乙太網或令牌環網路介面)。在硬體層次上進行的資料幀交換必須有正確的介面地址。但是,TCP/IP有自己的地址:32 bit的IP地址。知道主機的IP地址並不能讓核心傳送一幀資料給主機。核心(如乙太網驅動程式)必須知道目的端的硬體地址才能傳送資料。ARP的功能是在32 bit的IP地址和採用不同網路技術的硬體地址之間提供動態對映。
ARP的資料包分組格式
在乙太網上解析IP地址時,ARP請求和應答分組的格式如圖所示(ARP可以用於其他型別的網路,可以解析IP地址以外的地址。緊跟著幀型別欄位的前四個欄位指定了最後四個欄位的型別和長度)
1)乙太網報頭中的前兩個欄位是乙太網的源地址和目的地址。目的地址為全1的特殊地址是廣播地址。電纜上的所有乙太網介面都要接收廣播的資料幀。
2)兩個位元組長的乙太網幀型別表示後面資料的型別。對於ARP請求或應答來說,該欄位的值為0x0806。
3)hardware(硬體)和protocol(協議)型別用來描述ARP分組中的各個欄位。例如,一個ARP請求分組詢問協議地址(這裡是IP地址)對應的硬體地址(這裡是乙太網地址)。
硬體型別欄位表示硬體地址的型別。它的值為1即表示乙太網地址。協議型別欄位表示要對映的協議地址型別。它的值為0x0800即表示IP地址。它的值與包含IP資料包的乙太網資料幀中的型別欄位的值相同,這是有意設計的。
4)接下來的兩個1位元組的欄位,硬體地址長度和協議地址長度分別指出硬體地址和協議地址的長度,以位元組為單位。對於乙太網上IP地址的ARP請求或應答來說,它們的值分別為6和4。
5)操作欄位指出四種操作型別,它們是ARP請求(值為1)、ARP應答(值為2)、RARP請求(值為3)和RARP應答(值為4)(我們在第5章討論RARP)。這個欄位必需的,因為ARP請求和ARP應答的幀型別欄位值是相同的。
6)接下來的四個欄位是傳送端的硬體地址(在本例中是乙太網地址)、傳送端的協議地址(IP地址)、目的端的硬體地址和目的端的協議地址。注意,這裡有一些重複資訊:在乙太網的資料幀報頭中和ARP請求資料幀中都有傳送端的硬體地址。
對於一個ARP請求來說,除目的端硬體地址外的所有其他的欄位都有填充值。當系統收到一份目的端為本機的ARP請求報文後,它就把硬體地址填進去,然後用兩個目的端地址分別替換兩個傳送端地址,並把操作欄位置為2,最後把它傳送回去。
ARP代理
如果ARP請求是從一個網路的主機發往另一個網路上的主機,那麼連線這兩個網路的路由器就可以回答該請求,這個過程稱作委託ARP或ARP代理(Proxy ARP)。這樣可以欺騙發起ARP請求的傳送端,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另一邊”。路由器的功能相當於目的主機的代理,把分組從其他主機轉發給它。即路由器代理ARP。
RARP
具有本地磁碟的系統引導時,一般是從磁碟上的配置檔案中讀取IP地址。但是無盤機,如X終端或無盤工作站,則需要RARP方法來獲得IP地址。
RARP分組的格式與ARP分組基本一致(見圖4-3)。它們之間主要的差別是RARP請求或應答的幀型別程式碼為0x8035,而且RARP請求的操作程式碼為3,應答操作程式碼為4。
對應於ARP,RARP請求以廣播方式傳送,而RARP應答一般是單播(unicast)傳送的。
RARP伺服器的設計
雖然RARP在概念上與ARP相似,但是一個RARP伺服器的設計與系統相關而且比較複雜。相反,提供一個ARP伺服器很簡單,通常是TCP/IP在核心中實現的一部分。由於核心知道IP地址和硬體地址,因此當它收到一個詢問IP地址的ARP請求時,只需用相應的硬體地址來提供應答就可以了。
作為使用者程式的RARP伺服器
RARP伺服器的複雜性在於,伺服器一般要為多個主機(網路上所有的無盤系統)提供硬體地址到IP地址的對映。該對映包含在一個磁碟檔案中(在Unix系統中一般位於/etc/ethers目錄中)。由於核心一般不讀取和分析磁碟檔案,因此RARP伺服器的功能就由使用者程式來提供,而不是作為核心的TCP/IP實現的一部分。
更為複雜的是,RARP請求是作為一個特殊型別的乙太網資料幀來傳送的(幀型別欄位值為0x8035,如圖2-1所示)。這說明RARP伺服器必須能夠傳送和接收這種型別的乙太網資料幀。在附錄A中,我們描述了BSD分組過濾器、Sun的網路介面栓以及SVR4資料鏈路提供者介面都可用來接收這些資料幀。由於傳送和接收這些資料幀與系統有關,因此RARP伺服器的實現是與系統捆綁在一起的。
每個網路有多個RARP伺服器
RARP伺服器實現的一個複雜因素是RARP請求是在硬體層上進行廣播的。這意味著它們不經過路由器進行轉發。為了讓無盤系統在RARP伺服器關機的狀態下也能引導,通常在一個網路上(例如一根電纜)要提供多個RARP伺服器。
當伺服器的數目增加時(以提供冗餘備份),網路流量也隨之增加,因為每個伺服器對每個RARP請求都要傳送RARP應答。傳送RARP請求的無盤系統一般採用最先收到的RARP應答(對於ARP,我們從來沒有遇到這種情況,因為只有一臺主機傳送ARP應答)。另外,還有一種可能發生的情況是每個RARP伺服器同時應答,這樣會增加乙太網發生衝突的概率。
該文章大部分段落取材於《TCP/IP詳解 卷1:協議》
相關文章
- ARP 地址解析協議協議
- ARP協議 地址解析協議:IP地址轉換為MAC地址協議Mac
- ARP地址解析協議-個人總結協議
- 系列TCP/IP協議-ARP與RARPTCP協議
- ARP協議:網路世界的地址翻譯官協議
- ARP地址解析協議、DNS域名系統和交換機、路由器、閘道器的概念協議DNS路由器
- icmp和arp協議協議
- 《計算機網路微課堂》實驗2 MAC地址,IP地址,ARP協議計算機網路Mac協議
- ARP協議介紹與ARP協議的攻擊手法協議
- Java中的TCP/IP協議和IP地址JavaTCP協議
- HTTP 協議完全解析HTTP協議
- 什麼是IP地址、IP協議?協議
- 透過原始碼理解Rarp協議原始碼協議
- WebSocket的Frame協議解析Web協議
- ICAP: 互換客戶端地址協議客戶端協議
- 超詳細 DNS 協議解析DNS協議
- 認識流媒體協議,從 RTSP 協議解析開始!協議
- Raft協議和ZAB協議Raft協議
- 一文詳解 ARP 協議協議
- Protobuf協議逆向解析-APP爬蟲協議APP爬蟲
- 網路層協議及ARP攻擊協議
- 除錯備忘錄-SWD協議解析除錯協議
- syslog協議及rsyslog服務全解析協議
- OpenVPN 協議解析-握手資料包分析協議
- 微信小程式之逆地址解析填坑微信小程式
- 一個私有協議檔案DB 的解析.協議
- consul 原始碼解析(一)raft 協議實現原始碼Raft協議
- 淺談WebSocket協議、WS協議和WSS協議原理及關係Web協議
- 玩轉直播系列之RTMP協議和原始碼解析(2)協議原始碼
- Gossip協議和Grpc協議的區別Go協議RPC
- HTTP協議和MQTT協議對比誰更好HTTP協議MQQT
- HTTP協議和HTTPS協議的異同點?HTTP協議
- HDFS原始碼解析系列一——HDFS通訊協議原始碼協議
- 訊息佇列面試解析 - 傳輸協議佇列面試協議
- 抖音協議直播間彈幕資訊解析協議
- dubbo原始碼解析(三十)遠端呼叫——rest協議原始碼REST協議
- Qt/C++地址轉座標/座標轉地址/逆地址解析/支援百度高德騰訊和天地圖QTC++地圖
- Gossip協議也叫Epidemic協議(流行病協議)Go協議IDE