IPv6 NDP更完美的地址解析
發布時間:2022-04-30作者:小編閱讀:0
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報文,如表所示。
ICMPv6報文類型
IPv6地址解析
地址解析在報文轉發過程✅中具有至關重要的作用。當一個節點需要得到同一條鏈路上另外一個節點的鏈路層地址時,需要進行地址解析。IPv6使用NDP實現了這個功能,且有所增強。IPv6的地址解析過程包括兩部分:一部分解析目的IP地址所對應的鏈路層地址;另一部分是鄰居可達性狀態的維護過程,即鄰居不可達檢測。
1、地址解析
與IPv4的ARP相比,IPv6地址解析技術工作在OSI參考模型的網絡層,與鏈路層協議無關。這一特點的🎃益處如下:
(1)加強了地址解析協議與底層鏈路的獨立性。對每一種鏈路層協議都使用相同的地址解🌸析,無須再為每一種鏈路層協議定義一個新的地址解析協議。
(2)增強了安全性。🌳在第三層實現地址解析可以利用三層標準的安全認證機制來防止ARP攻擊和ARP欺騙。
(3)減小了報文傳播范圍。IPv6的地址解析利用三層組播尋址限制了報文的傳播范圍,可節省網絡帶寬。
在IPv6中,NDP通過在節點間交互NS和NA報文完成IPv6地址到鏈路層地址的解析,然后通過解析后得到的鏈路層地🎃址和IPv6等地址信息來建立相應的鄰居緩存表項。
🐻如下圖所示,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,同時在消息的目標鏈路層地址選項中攜帶自己的鏈路層地址0💯0E0-FC00-0002。
(4)NodeA接收到NA報文后,根據報文中攜💦帶的NodeB鏈路層地址,創建一💝個到目標節點NodeB的鄰居緩存表項。
通過🀅交互,NodeA和NodeB就獲得了對方的鏈路層地址,建立起了到達對方的鄰居緩存表項,從而可以相互⛄通信。
當🐻一個節點的鏈路層地址發生改變時,將以所有節點組播地址FF0ꦺ2::1為目的地址發送NA報文,通知鏈路上的其他節點更新鄰居緩存表項。
2.鄰居不可達檢測(NUD)
NUD(Neighbor Unreachable Detection,鄰居不可達檢測)是節點確定🀅鄰居可達性的過程。鄰居不可達檢測機制通過鄰居可達性狀態機來描述鄰居的可達性。
鄰居可達性狀態機保存在鄰居緩存表中,共有如下6種狀態:
(1)INCOMPLETE(未完成狀態):表示正在解析地址,但鄰居鏈路層地址尚未確定。
(2)REACHABLE(可達狀態):表示地址解析成功,該鄰居可達。
(3)STALE(失效狀態):表示可達時間耗盡,未確定鄰居是否可達。
(4)DELAY(延遲🍸狀態):表示未確定鄰居是否可達。DELAY狀態不是一個穩定的狀態🔜,而是一個延時等待狀態。
(5)PROBE(探測狀態):節點會向處于PROBE狀態的鄰居持續發送NS報文。
(6)EMPTY(空閑狀態):表示節點上沒有相關鄰接點的鄰居緩存表項。
圖中實線箭頭表示由NS/NA報文交互導致的狀態變化,各狀態間的相互轉換如下:
① 在EMP🎃TY狀態時,如果有報文要發送給鄰接節點,則在本地鄰居緩存表建立該鄰接節點的表項,并將該表項置于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_ UNIC⛎AST_SOLICIT次后,如果仍未收到鄰居回應的NA報文,則認為該鄰居已不可達,該表項將被刪除。
NodeA上,N♔odeB的表項處于STALE狀態。此時若NodeA有報文發往NodeB,且沒有上層協議能夠提供到NodeB的"可達性證實信息"時,則NodeA需要重新驗證到NodeB的可達性。
NUD過程與地址解析過程的主要不同之處在于以下兩點:
(1)NUD的NS報文的目的MAC是目的節點的MAC地址;目的IPvꦍ൲6地址為NodeB的單播地址,而不是被請求節點組播地址。
(2)NA報文中的S標記須置位,表示是可達性確認報文,即這個NA報文是專門響應NS報文的。
無狀態地址自動配置
IPv6同時定義了無狀態和有狀態地址自動配置機制。有狀態地址自動配置使用DHCPv🍸6來給主機動態分配IPv6地址,無狀態地址自動配置通過NDP來實現。在無狀態地址自動配置中,主機通過接收鏈路上的路由器發出的RA消息,結合接口的標識符而生成一個全球單播地址。
1.路由器發現
路由器發現是指主機定位本地鏈路上的路由器和確定其配置信息的過程,主要包含以下3方面內容:
(1)路🌳由器發現(Router Discovery):主機發現鄰居路由器及選擇某一個路由器༒作為默認網關的過程。
(2)前綴發現(Pre💞fix Discovery):主機發現本地鏈路上的一組IPv6前綴,生成前綴列表。該列表用于主機的地址自動配置和on-link判斷。
(3)參數發現(Parameter 🍨Discovery):主機發現相關操作參數的過程,如MTU、報文的默認跳數限制、地址分配方式等信息。
2.重復地址檢測
DAD(Duplicate Address Deteꦫction,重復地址檢測)是節🌱點確定即將使用的地址是否在鏈路上唯一的過程。所有的IPv6單播地址,包括自動配置或手動配置的單播地址,在節點使用之前必須要通過重復地址檢測。
DAD機制通過NS和NA報文實現。節點會發送NS報文,其源地址為未指定地址,目的地址為接口配置的IPv6地址。在NS報文發送到鏈路上后,如♔果在規定時間內沒有收到應答的NA報文,則認為這個單播地址在鏈路上是唯一的,可以分配給接口;反之,如果收到應答的NA報文,則表明這個地址已經被其他節點所使用,不能配置到接口。
3.前綴重新編址
前ꦑ綴重新編址(Prefix Renumbering)允許網絡從以前的前綴平穩地過渡♛到新的前綴,用于提供對用戶透明的網絡重新編址能力。路由器通過RA報文中的優先時間和有效時間參數來實現前綴重新編址。
(1)優先時間(Preferred L𒅌ifetime):無狀態自動配📖置得到的地址保持優先選擇狀態的時間。
(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報文,探測該地址是否可達。
路由器重定向
在重定向過程中,路由器通過發送重定向報文來通知鏈路上的報文發送節點,在同一鏈路上存在一個更優的轉發數據報文的路由器。接收到該消息的節點據此修改其本地路由表項。路由器僅為單播數據流發送重定向報文,而重定向報文也僅以單播形式發送🐓到始發主機,并且只會被始發節點處理。
如圖2-12所示,N♔odeA的默認路由器為RTA,現在NodeA想發送數據報文到NodeB,路由器重定向機制需要經過以下過程:
(1)NodeA首先傳送第一個數據報文到它的默認路由器RTA,當該報文經過RTB到達NodeB后,RTA知道🐼RTB是鏈路上轉發報文的𝓀更好選擇。
(2)RTA向始發報文的NodeA發送一個ICMPv6重定向報文,目標地址中含有R⛦TB的IPv6地址,報文選項字𝓰段的目標鏈路層地址中含有RTB的鏈路層地址。
(3)No෴deA獲悉RTB是到ꦐNodeB的更好路徑后,修改自己的目的緩存表,當再發送到NodeB的報文時優先發送到RTB,重定向完成。
感謝各位的閱讀!關于IPv6 NDP更完美的地址解析這篇文章🌃就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的♛人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,請聯系站長郵箱:[email protected]進行舉報,🐼并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。
標題:IPv6 NDP更完美的地址解析
TAG標簽:IPv6
地址://beijingyml.cn/article/20210430111810.html