1. 程式人生 > >《TCP IP 詳解卷1:協議》閱讀筆記 - 第四章

《TCP IP 詳解卷1:協議》閱讀筆記 - 第四章

發送數據 地方 style 中間 小結 int 格式 兩個 情況

閱讀須知:筆記為閱讀《TCP IP 詳解卷1:協議》後摘抄的一些知識點,其間也有加入一些根據英文原版的自己翻譯和結合網上知識後的理解,所以有些段落之間並不能夠串聯上或者知識點與書上略有差別(基本差別不大,參考的資料屬RFC官方文檔)。

第四章:地址解析協議

地址解析協議(ARP)提供了一種在IPv4地址和各種網絡技術使用的硬件地址之間的映射。ARP僅用於IPv4,IPv6使用鄰居發現協議,它被合並入ICMPv6。地址解析是發現兩個地址之間的映射關系的過程,ARP提供從網絡層地址到相關硬件地址的動態映射。

使用地址解析協議,可根據網絡層IP數據報頭部的IP地址信息解析出目標硬件地址(MAC地址)信息,以保證通信的順利進行。

直接交付

直接交付發生在一個IP數據報被發送到一個IP地址,而該地址與發送方具有相同IP前綴的情況下,數據報可被直接發送到這個地址而不經過任何路由器。

假設一個發送方主機要向一個接收主機發送數據報直接交付的基本操作:

  1. 假設以太網兼容地址被用於IPv4子網,發送主機必須將32位的IPv4目的地址轉換成48位的以太網地址(需要從邏輯Internet地址想對應物理硬件地址轉換)。ARP工作在正常模式下僅適用於廣播網絡,鏈路層能將一個消息交付到它連接的所有網絡設備;在非廣播網絡中,可能需要更復雜的映射協議。

  2. 在一個共享的鏈路層網段上,ARP向所有主機發送一個稱為ARP請求的以太網幀(被稱為鏈路層廣播)。

  3. 通過ARP,同一廣播域中的所有主機可接收ARP請求,接收ARP幀後針對IP做對比,如果匹配則發送應答;不匹配則丟棄ARP請求。

  4. ARP應答被原始請求的發送方接收,現在可發送引起"這次請求的ARP請求/應答交換過程"的數據報。

  5. 發送方可將數據報封裝在以太網幀中直接發送到目的主機,並使用有ARP交換得到的以太網地址作為目的地址。(由於以太網地址僅指向正確的目的主機,所以其他主機或路由器不會接收到這個數據報)。

以上一次簡單的直接交付中對ARP(以初次應用,無緩存的情況為例)應用的基本過程,簡化後:發送主機在發送數據時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,並接收返回消息,以此確定目標的物理地址,以此建立正確的鏈接來發送數據報。

ARP用於運行IPv4的多接入鏈路層網絡,每個主機都有自已首選的硬件地址;第三章提到例如PPP的點到點鏈路不使用ARP。ARP高效運行的關鍵是維護每個主機和路由器上的ARP緩存(或表),其本質是記錄IP地址和MAC地址的映射關系數據。當地址解析協議被詢問一個已知IP地址節點的MAC地址時,先在ARP緩存中查看,如果存在,就直接返回與之對應的MAC地址了;如果不存在,才發送ARP請求向局域網查詢。

可以通過 arp 命令可以查看arp緩存,arp命令及使用參數如下圖:

技術分享圖片

緩存中完整的條目會比不完整的條目超時時間長,[RFC1122]規定每個條目即使在使用也應啟動超時,但很多實現中是每次使用條目後重新啟動超時。

ARP幀格式

技術分享圖片

對於ARP請求,目的以太網地址ff:ff:ff:ff:ff:ff(全為1)是廣播地址,在同一個廣播域的所有以太網接口可接收這些幀。在以太網幀中,ARP2字節的長度或類型字段必須為0x0806。

硬件類型字段指出硬件地址類型(對於以太網,值為1);

協議類型寧段指出映射的協議地此類型(對於IPv4,值為0x0800);

硬件大小和協議大小分別指出硬件地址和協議地址的字節數(對於IPv4的ARP,值分別為6和4);

Op字段指出該操作是ARP請求(1)、 ARP應答(2)、 RARP請求(3)或RARP應答(4)。

代理ARP

代理ARP使一個系統可回答不同主機的ARP請求,使的發送方認為做出響應的系統就是目的主機,但實際上目的主機可能在其他地方。

代理ARP也稱混雜ARP或者黑客ARP,它具有"兩個物理網絡相互隱蔽自己"的用途。

在這種情況下,兩個物理網絡可使用相同的IP前綴,只要將中間的路由器配置為一個代理ARP,在一個網絡中由代理系統來響應其他網絡中主機的ARP請求。

免費ARP和地址沖突檢測

現在有一個"一臺主機發送ARP請求以尋找自己的地址"的騷操作,這操作也被稱為"免費ARP"。

免費ARP需要達到兩個目標:

  1. 允許一臺主機確定另一臺主機是否配置相同的IPv4地址。如果收到了ARP應答,則表示同一廣播域中有一個系統地址配置錯誤。

  2. 如果發送免費ARP的主機已玫變硬件地址,該幀導致任何接收廣播並且緩存中有該條目的其他主機將該條目的舊硬件地址更新為與該幀一致(更新緩存)。

IPv4地址沖突檢測(ACD)定義了ARP探測分組和ARP通告分組。探測分組用於查看一個候選IPv4地址是否被廣播域中的任何其他系統所使用;通告分組則用於通告發送方使用侯選IPv4地址的意圖。

ACD和免費ARP的區別在於免費ARP是一次ARP請求/應答過程,而ACD被認為是一個持續的過程。

當一臺主機通告它正使用的地址後,它會繼續檢查輸入的ARP流量(請求和應答),查看自已的地址是否出現在發送方協議地址字段中。如果是的話,說明其他系統與自已在使用相同的地址。在這種情況下,[RFC5227]提供了3種可能的解決方案:停止使用這個地址;保留這個地址,但發送一個“防禦性”ARP通告,如果沖突繼續,則停止使用它;不理會沖突,仍繼續使用。對於最後一個選擇,僅建議那些真正需要一個圍定、穩定地址的系統(例如打印機或路由器等嵌人式設備)使用。

[RFC5227]對嘗試獲得地址設置了10次的沖突限制,在請求的主機進入限速階段之前,它被允許每60秒執行一次ACD,直至成功。

RARP

地址解析協議是根據IP地址獲取物理地址的協議,而反向地址轉換協議(RARP)是局域網的物理機器從網關服務器的ARP表或者緩存上根據MAC地址請求IP地址的協議,其功能與地址解析協議相反。

與ARP相比,RARP的工作流程也相反:

  1. 查詢主機向網路送出一個RARP請求,向別的主機查詢自己的IP地址。

  2. 網絡上的RARP服務器就會將發送端的IP地址用RARP應答給查詢者,這樣查詢主機就獲得自己的IP地址。

小結

ARP是TCP/IP中的一個基本協議。通過上述知識點能感知到ARP也是很重要的:功能方面用以確保數據正確的傳送到目的主機;安全方面簡單的比如代理ARP偽裝主機,復雜的涉及ARP緩存條目的安全或者欺騙。

《TCP IP 詳解卷1:協議》閱讀筆記 - 第四章