鏈路本地地址

鏈路本地地址

鏈路本地地址(Link-local address),又稱連結本地位址是計算機網路中一類特殊的地址,它僅供於在網段,或廣播域中的主機相互通信使用。這類主機通常不需要外部網際網路服務,僅有主機間相互通訊的需求。

IPv4鏈路本地地址定義在169.254.0.0/16地址塊。 IPv6定義在fe80::/10地址塊。

地址分配


• 對於使用網際網路協議 (IP)的網路,經常使用無狀態地址自動配置。在 IPv4中通常只用於分配在網路介面沒有外部的、有狀態的IP地址情況下,如動態主機配置協議(DHCP),或當其他的配置方法無效時。在 IPv6 中鏈路本地地址是強制性的。
• 網路中的應用層程序進程相互通訊時一般假設其地址是穩定的、可路由的、唯一的地址,但在由於鏈路本地地址的隨機分配性質,可能會對應用層的進程帶來麻煩。儘管一些應用層程序可以同時兼容鏈路本地地址和一般可路由地址,但是不建議在介面上同時配置這兩種地址。由於鏈路本地地址一般隨機自動分配,所以在整個通訊期間必須持續監測和處理衝突。
• 使用該類地址重要的守則之一是,禁止手動分配或者由DHCP伺服器進行分配,儘管在一個小型網路中可以人為保證地址的不重複性,但是手動分配的地址無法遵守自動配置檢測和處理的相關規則,在DHCP環境下對地址要求使用ARP或者ICMP Echo請求來確定地址的可用性,但這並不是強制性的。所以在需要配置鏈路本地地址的環境中應該讓主機自動配置該類地址。如果希望手動分配或者使用DHCP服務則應該使用在RFC1918中定義的私有地址。

IPv4


地址選擇

• 在 RFC3927中,網際網路工程任務組保留了地址塊169.254.0.0/16。從169.254.1.0到169.254.254.255的地址可以用於鏈路本地地址的分配。第一塊256個地址(169.254.0.0/16)和最後一塊256地址(169.254.255.0/16)保留待將來使用,不會被分配給主機。網路主機在可用的地址範圍內(169.254.1.0 - 169.254.254.255)隨機選擇一個地址,並使用地址解析協議(ARP)確定該地址未被使用。如果收到ARP回復,表示IP地址已經被使用,將重新隨機選擇IP地址並重複該過程直到選定的IP可用。
• 隨機選擇實際上是使用偽隨機發生器來生成不同的結果,所以必須選擇不同的種子來生成,如MAC地址這種唯一值。而且由於MAC地址存儲在網卡中且是固定的,所以用隨機數產生的本地鏈路地址也基本是固定的,這種特性使得地址出現衝突的可能性降低,並且帶來方便性。
• 在具有永久存儲設備的主機中,每個介面鏈路本地地址可能被存儲,在下次啟動時這些地址應該被優先考慮。
• 當主機用ARP確認地址可使用后,還要向網路廣播ARP通告向其他主機說明自己的地址,目的是為了確保鏈路上的其他主機不會有其他以前可能使用過相同地址的主機遺留的ARP緩存條目。

地址衝突檢測

• 當網路中的主機收到一個ARP並且查詢的IP地址與介面相同但硬體地址不同時便視為衝突,主機必須選擇以下兩種處理方式之一:
1.
重新配置新IP。
2.
回複發送單播ARP給發送方,使用自己的IP和硬體地址,保持自己的IP。
主機必須對出現衝突的ARP進行相應處理。在第二種處理方式中,如果不是第一次出現衝突並且在DEFEND_INTERVAL時間內則需要立即放棄衝突的IP重新選擇其他地址。
當在介面上配置了全局可路由地址或專用地址,新地址的使用一般應該優先於路本地地址,但主機之間仍然可以通過鏈路本地地址進行通信。

地址使用和轉發規則

• 在主機的同一個介面中允許擁有多個IP地址,在已經配置過本地鏈路地址的介面上同樣允許存在可路由地址,並且這兩個地址都可用於通訊。可路由地址優先於本地鏈路地址。
• 在主機使用本地鏈路地址時,必須用ARP確定目的主機的鏈路段,這有時被稱為“ARP一切”。
• 路由器等設備是禁止轉發此類地址(目的地址)的數據包的。使用鏈路本地址的數據包的TTL值一般被設置為1,但在某些情況下可能是其他值。
• 由於鏈路本地地址被禁止轉發到其他網段,以此類地址為目的地址的數據包將只會在本地網段或廣播域傳播,所以在這類的地址中是禁止劃分子網的。但當主機同時擁有鏈路本地地址和可路由地址時,可以使用可路由地址來與外界主機通訊。

IPv6


Internet規模的快速擴大,特別是近十年來,Internet爆炸式增長使其走進了千家萬戶,人們的日常生活已經離不開它。同時 I n ternet上的節點不再單純是計算機,還將包括 PD A 、行動電話、各種各樣的終端甚至包括冰箱、電視等家用電器,這些設備都需要分配 IP地址。截止現在 IPv4 則 只剩 下不 到 6%的 IP 地址 沒有被分配,IPv6 作為新的力量走上了前台,從 20 世紀90 年代起,從理論界到用戶,從設備廠商到 II)服務提供商,都逐漸清晰地聽到 IPv6 作為新的力量走上歷史舞台的腳步聲。
IPv6 以其巨大的地址空間,世界上每個人可以擁有約 5.7x10 個 IPv6 地址來滿足未來物流網與網際網路的需要,其中 IPv6 鏈路本地地址作為 IPv6 單播地址的一種,在IPv6 鄰居節點之間的通信協議中廣泛使用,尤其在ND 協議與動態路由協議中作用十分重要,因此, IPv6 鏈路本地地址在網路安全中地位也十分特殊。

IPv6 鏈路本地地址結構分析

IPv6( Internet Protocol version 6,網際網路版本協議6) ,是IETF( Internet Engineering Task Force,網際網路工
程任務組) 設計的一套規範,是IPv4 的升級版本,其IP地址長度為128 位, IPv6 鏈路本地地址作為IPv6 地址的一種單播地址,其長度同樣也是128 位。IPv4 地址有單播、組播、廣播幾種類型,與IPv4 地址分類方法相似的是, IPv6 地址也有不同的類型,包括單播( Unicast)、組播( Multicast) 、任播( Anycast) 地址, IPv6 的單播地址根據其作用範圍的不同可以分為特殊地址( : : /128,: : 1 /128) 、全球單播( 2000: : /3) 、全球唯一本地( FC00: : /7) 、兼容地址( 0: 0: 0: 0: 0: 0: : /96,0: 0:0: 0: 0: FFFF: : /96) ,此外,屬於單播地址的還有IPv4內嵌地址、NSAP 等,鏈路本地地址就是IPv6 單播地址的一種。
圖1
圖1
IPv6 的單播地址只能分配給一個節點上的介面,即定址到該單播地址的數據報文最終會被發送到一個唯一的介面。一個主機介面上的128 位IPv6 單播地址一般可以看做成一個整體來代表這台主機。而當要表示這個主機上的介面所連接的網路時,將這個128位IPv6 單播地址分成兩部分來表示,如圖1 所示。
其中各欄位含義如下。
(1) Subnet Prefix: n 位子網前綴,表示介面所屬的網路。
圖2
圖2
(2) Interface ID: 介面標識,用以區分連接在一條鏈路上的不同介面。IPv6 鏈路本地地址是一種特殊的單播地址,這種地址的應用範圍受限,只能在連接的同一本地鏈路的節點之間使用,它有固定的格式,圖2 顯示了鏈路本地地址的結構。
從圖2 中可以看出,鏈路本地地址由一個特定的前綴和介面ID 兩部分組成。它使用了特定的鏈路本地前綴FE80: : /64( 最高10 位值為“1111111010”) ,同時將介面ID 添加在後面作為地址的低64 位。這就是在IPv6 鏈路本地地址的基本結構。下面重點分析一下在IPv6 鏈路本地地址鄰居發現協議和動態路由協議數據報文中的實際應用。

IPv6 鏈路本地地址應用分析


鏈路本地地址在IPv6 鄰居節點之間的通信協議———鄰居發現協議( Neighbor Discovery Protocol,簡稱“ND”協議) 中廣泛使用,特別是對連接在同一鏈路上的IPv6 節點間,鏈路本地地址架起了它們之間通信的橋樑,因為節點的每個介面都配置有鏈路本地地址,ND 協議正是通過攜帶有鏈路本地地址的IPv6 報文,才實現了數據包的準確傳輸。