天天看點

「太閣幹貨」IPV6沒有ARP 拯救你三層位址到二層位址映射的尴尬

 IPv6鄰居發現協定

NDP(Neighbor Discovery Protocol,鄰居發現協定)是IPv6的一個關鍵協定,它組合了IPv4中的ARP、ICMP路由器發現和ICMP重定向等協定,并對它們作了改進。作為IPv6的基礎性協定,NDP還提供了字首發現、鄰居不可達檢測、重複位址監測、位址自動配置等功能。

1.位址解析:位址解析是一種确定目的節點的鍊路層位址的方法。NDP中的位址解析功能不僅替代了原IPv4中的ARP,同時還用鄰居不可達檢測(NUD)方法來維持鄰居節點之間的可達性狀态資訊。

2.無狀态位址配置:NDP中特有的位址自動配置機制,包括一些列相關功能,如路由器發現、接口ID自動生成、重複位址監測等。通過無狀态自動配置機制,鍊路上的節點可以自動獲得IPv6全球單點傳播位址。

a)路由器發現:路由器與其他相連的鍊路上釋出網絡參數資訊,主機捕獲此資訊後,可以獲得全球單點傳播IPv6位址字首、預設路由、鍊路參數(鍊路MTU)等資訊。

b)接口ID自動生成:主機根據EUI-64規範或其他方式為接口自動生成接口辨別符。

c)重複位址監測(DAD):根據字首資訊生成或手動配置IPv6位址後,為保證該位址的唯一性,在其可以使用之前,主機需要檢驗它是否已被鍊路上的其他節點所使用。

d)字首重新編址:當網絡字首變化時,路由器在與其相連的鍊路上釋出新的網絡參數資訊,主機捕獲這些新資訊後,重新配置字首、鍊路MTU等位址相關資訊。

3.路由重定向:當在本地鍊路上存在一個更好的到達目的網絡的路由器時,路由器需要通告節點來進行相應配置改變。

NDP定義了5種ICMPv6封包類型,包括RS、RA、NS、NA和Redirect封包,如表所示。

「太閣幹貨」IPV6沒有ARP 拯救你三層位址到二層位址映射的尴尬

ICMPv6封包類型

01

IPv6位址解析

位址解析在封包轉發過程中具有至關重要的作用。當一個節點需要得到同一條鍊路上另外一個節點的鍊路層位址時,需要進行位址解析。IPv6使用NDP實作了這個功能,且有所增強。IPv6的位址解析過程包括兩部分:一部分解析目的IP位址所對應的鍊路層位址;另一部分是鄰居可達性狀态的維護過程,即鄰居不可達檢測。

1、位址解析

與IPv4的ARP相比,IPv6位址解析技術工作在OSI參考模型的網絡層,與鍊路層協定無關。這一特點的益處如下:

(1)加強了位址解析協定與底層鍊路的獨立性。​對每一種鍊路層協定都使用相同的位址解析,無須再為每一種鍊路層協定定義一個新的位址解析協定。

(2)增強了安全性。在第三層實作位址解析可以利用三層标準的安全認證機制來防止ARP攻擊和ARP欺騙。

(3)減小了封包傳播範圍。​IPv6的位址解析利用三層多點傳播尋址限制了封包的傳播範圍,可節省網絡帶寬。

在IPv6中,NDP通過在節點間互動NS和NA封包完成IPv6位址到鍊路層位址的解析,然後通過解析後得到的鍊路層位址和IPv6等位址資訊來建立相應的鄰居緩存表項。

如下圖2-10所示,NodeA的鍊路層位址為00E0-FC00-0001,全局位址為1::1:A;NodeB的鍊路層位址為00E0-FC00-0002,全局位址為1::2:B。當NodeA要發送資料封包到NodeB時,需要NDP完成位址解析過程。

(1)NodeA發送一個NS封包到鍊路上,目的IPv6位址為NodeB對應的被請求節點多點傳播位址(FF02::1:FF02:B),選項字段中攜帶了NodeA的鍊路層位址00E0-FC00-0001。

(2)NodeB接收到該NS封包後,由于封包的目的位址FF02::1::FF02:B是NodeB的被請求節點多點傳播位址,是以NodeB會處理該封包;同時,根據NS封包中的源位址和源鍊路層位址選項更新自己的鄰居緩存表項。

(3)NodeB發送一個NA封包來應答NS,同時在消息的目标鍊路層位址選項中攜帶自己的鍊路層位址00E0-FC00-0002。

(4)NodeA接收到NA封包後,根據封包中攜帶的NodeB鍊路層位址,建立一個到目标節點NodeB的鄰居緩存表項。

「太閣幹貨」IPV6沒有ARP 拯救你三層位址到二層位址映射的尴尬

圖2-10 位址解析

通過互動,NodeA和NodeB就獲得了對方的鍊路層位址,建立起了到達對方的鄰居緩存表項,進而可以互相通信。

當一個節點的鍊路層位址發生改變時,将以所有節點多點傳播位址FF02::1為目的位址發送NA封包,通知鍊路上的其他節點更新鄰居緩存表項。

2.鄰居不可達檢測(NUD)

NUD(Neighbor Unreachable Detection,鄰居不可達檢測)是節點确定鄰居可達性的過程。鄰居不可達檢測機制通過鄰居可達性狀态機來描述鄰居的可達性。

鄰居可達性狀态機儲存在鄰居緩存表中,共有如下6種狀态:

(1)INCOMPLETE(未完成狀态):表示正在解析位址,但鄰居鍊路層位址尚未确定。

(2)REACHABLE(可達狀态):表示位址解析成功,該鄰居可達。

(3)STALE(失效狀态):表示可達時間耗盡,未确定鄰居是否可達。

(4)DELAY(延遲狀态):表示未确定鄰居是否可達。DELAY狀态不是一個穩定的狀态,而是一個延時等待狀态。

(5)PROBE(探測狀态):節點會向處于PROBE狀态的鄰居持續發送NS封包。

(6)EMPTY(空閑狀态):表示節點上沒有相關鄰接點的鄰居緩存表項。

「太閣幹貨」IPV6沒有ARP 拯救你三層位址到二層位址映射的尴尬

圖2-11 鄰居狀态機

圖中實線箭頭表示由NS/NA封包互動導緻的狀态變化,各狀态間的互相轉換如下:

① 在EMPTY狀态時,如果有封包要發送給鄰接節點,則在本地鄰居緩存表建立該鄰接節點的表項,并将該表項置于INCOMPLETE狀态,同時向鄰接節點以多點傳播方式發送NS封包。

② 節點收到鄰居回應的單點傳播NA封包後,将處于INCOMPLETE狀态的鄰居緩存表項轉化為REACHABLE狀态。如果位址解析失敗(發出的多點傳播NS逾時),則删除該表項。

③ 處于REACHABLE狀态的表項,如果在REACHABLE_TIME時間内沒有收到關于該鄰居的"可達性證明資訊",則進入STALE狀态。此外,如果該節點收到鄰居節點發出的非S置位NA封包,并且鍊路層位址有變化,相關表項會進入STALE狀态。

④ 處于STALE狀态的表項,當有封包發往該鄰居時,這個封包會利用緩存的鍊路層位址進行封裝,并使該表項進入DELAY狀态,等待收到"可達性證明資訊"。

⑤ 進入DELAY狀态後,如果DELAY_FIRST_PROBE_TIME時間之内還未收到關于該鄰居的"可達性證明資訊",則該表項進入PROBE狀态。

⑥ 在PROBE狀态時,節點會周期性地用NS封包來探測鄰居的可達性,探測最大時間間隔為RETRANS_TIMER,在最多嘗試MAX_ UNICAST_SOLICIT次後,如果仍未收到鄰居回應的NA封包,則認為該鄰居已不可達,該表項将被删除。

NodeA上,NodeB的表項處于STALE狀态。此時若NodeA有封包發往NodeB,且沒有上層協定能夠提供到NodeB的"可達性證明資訊"時,則NodeA需要重新驗證到NodeB的可達性。

NUD過程與位址解析過程的主要不同之處在于以下兩點:

(1)NUD的NS封包的目的MAC是目的節點的MAC位址;目的IPv6位址為NodeB的單點傳播位址,而不是被請求節點多點傳播位址。

(2)NA封包中的S标記須置位,表示是可達性确認封包,即這個NA封包是專門響應NS封包的。

02

無狀态位址自動配置

IPv6同時定義了無狀态和有狀态位址自動配置機制。有狀态位址自動配置使用DHCPv6來給主機動态配置設定IPv6位址,無狀态位址自動配置通過NDP來實作。在無狀态位址自動配置中,主機通過接收鍊路上的路由器發出的RA消息,結合接口的辨別符而生成一個全球單點傳播位址。

1.路由器發現

路由器發現是指主機定位本地鍊路上的路由器和确定其配置資訊的過程,主要包含以下3方面内容:

(1)路由器發現(Router Discovery):主機發現鄰居路由器及選擇某一個路由器作為預設網關的過程。

(2)字首發現(Prefix Discovery):主機發現本地鍊路上的一組IPv6字首,生成字首清單。該清單用于主機的位址自動配置和on-link判斷。

(3)參數發現(Parameter Discovery):主機發現相關操作參數的過程,如MTU、封包的預設跳數限制、位址配置設定方式等資訊。

2.重複位址檢測

DAD(Duplicate Address Detection,重複位址檢測)是節點确定即将使用的位址是否在鍊路上唯一的過程。所有的IPv6單點傳播位址,包括自動配置或手動配置的單點傳播位址,在節點使用之前必須要通過重複位址檢測。

DAD機制通過NS和NA封包實作。節點會發送NS封包,其源位址為未指定位址,目的位址為接口配置的IPv6位址。在NS封包發送到鍊路上後,如果在規定時間内沒有收到應答的NA封包,則認為這個單點傳播位址在鍊路上是唯一的,可以配置設定給接口;反之,如果收到應答的NA封包,則表明這個位址已經被其他節點所使用,不能配置到接口。

3.字首重新編址

字首重新編址(Prefix Renumbering)允許網絡從以前的字首平穩地過渡到新的字首,用于提供對使用者透明的網絡重新編址能力。路由器通過RA封包中的優先時間和有效時間參數來實作字首重新編址。

(1)優先時間(Preferred Lifetime):無狀态自動配置得到的位址保持優先選擇狀态的時間。

(2)有效時間(Valid Lifetime):位址保持有效狀态的時間。

對于一個位址或字首,優先時間小于或等于有效時間。當位址的優先時間到期時,該位址不能被用來建立新連接配接,但是在有效時間内,該位址還能用來保持以前建立的連接配接。

在重新編址時,站點内的路由器會繼續通告目前字首,但是有效時間和優先時間将被減小到接近于0;同時路由器開始通告新的字首。這樣,在每個鍊路上至少有兩個字首共存,RA消息中包括一個舊的和一個新的IPv6字首資訊。

4.無狀态位址自動配置過程

NDP的無狀态自動配置包含兩個階段:鍊路本地位址的配置和全球單點傳播位址的配置。當一個接口啟用時,主機會首先根據本地字首FE80::/64和EUI-64接口辨別符,為該接口生成一個鍊路本地位址,如果在後續的DAD中發生位址沖突,則必須對該接口手動配置本地鍊路位址,否則該接口将不可用。

需要說明的是,一個鍊路本地位址的優先時間和有效時間是無限的,永遠不逾時。

對于主機上全球單點傳播位址的配置步驟如下:

① 主機節點NodeA在配置好鍊路本地位址後,發送RS封包,請求路由器的字首資訊。

② 路由器收到RS封包後,發送單點傳播RA封包,攜帶用于無狀态位址自動配置的字首資訊,同時路由器也會周期性地發送多點傳播RA封包。

③ NodeA收到RA封包後,根據字首資訊和配置資訊生成一個臨時的全球單點傳播位址。同時啟動DAD,發送NS封包驗證臨時位址的唯一性,此時該位址處于臨時狀态。

④ 鍊路上的其他節點收到DAD的NS封包後,如果沒有使用者使用該位址,則丢棄封包,否則産生應答NS的NA封包。

⑤ NodeA如果沒有收到DAD的NA封包,說明位址是全局唯一的,則用該臨時位址初始化接口,此時位址進入有效狀态。

位址自動配置完成後,路由器可以自動進行NUD,周期性地發送NS封包,探測該位址是否可達。

03

路由器重定向

在重定向過程中,路由器通過發送重定向封包來通知鍊路上的封包發送節點,在同一鍊路上存在一個更優的轉發資料封包的路由器。接收到該消息的節點據此修改其本地路由表項。路由器僅為單點傳播資料流發送重定向封包,而重定向封包也僅以單點傳播形式發送到始發主機,并且隻會被始發節點處理。

如圖2-12所示,NodeA的預設路由器為RTA,現在NodeA想發送資料封包到NodeB,路由器重定向機制需要經過以下過程:

「太閣幹貨」IPV6沒有ARP 拯救你三層位址到二層位址映射的尴尬

圖2-12 路由器重定向過程

(1)NodeA首先傳送第一個資料封包到它的預設路由器RTA,當該封包經過RTB到達NodeB後,RTA知道RTB是鍊路上轉發封包的更好選擇。