IPv6 NDP更完美的地址解析
發(fā)布時間:2021-04-30作者:小編閱讀:0
NDP(Neighbor Discovery Protocol,鄰居發(fā)現(xiàn)協(xié)議)是IPv6的一個關(guān)鍵協(xié)議,它組合了IPv4中的ARP、ICMP路由器發(fā)現(xiàn)和ICMP重定向等協(xié)議,并對它們作了改進(jìn)。作為IPv6的基礎(chǔ)性協(xié)議,NDP還提供了前綴發(fā)現(xiàn)、鄰居不可達(dá)檢測、重復(fù)地址監(jiān)測、地址自動配置等功能。
1.地址解析:地址解析是一種確定目的節(jié)點(diǎn)的鏈路層地址的方法。NDP中的地址解析功能不僅替代了原IPv4中的ARP,同時還用鄰居不可達(dá)檢測(NUD)方法來維持鄰居節(jié)點(diǎn)之間的可達(dá)性狀態(tài)信息。
2.無狀態(tài)地址配置:NDP中特有的地址自動配置機(jī)制,包括一些列相關(guān)功能,如路由器發(fā)現(xiàn)、接口ID自動生成、重復(fù)地址監(jiān)測等。通過無狀態(tài)自動配置機(jī)制,鏈路上的節(jié)點(diǎn)可以自動獲得IPv6全球單播地址。
a)路由器發(fā)現(xiàn):路由器與其他相連的鏈路上發(fā)布網(wǎng)絡(luò)參數(shù)信息,主機(jī)捕獲此信息后,可以獲得全球單播IPv6地址前綴、默認(rèn)路由、鏈路參數(shù)(鏈路MTU)等信息。
b)接口ID自動生成:主機(jī)根據(jù)EUI-64規(guī)范或其他方式為接口自動生成接口標(biāo)識符。
c)重復(fù)地址監(jiān)測(DAD):根據(jù)前綴信息生成或手動配置IPv6地址后,為保證該地址的唯一性,在其可以使用之前,主機(jī)需要檢驗(yàn)它是否已被鏈路上的其他節(jié)點(diǎn)所使用。
d)前綴重新編址:當(dāng)網(wǎng)絡(luò)前綴變化時,路由器在與其相連的鏈路上發(fā)布新的網(wǎng)絡(luò)參數(shù)信息,主機(jī)捕獲這些新信息后,重新配置前綴、鏈路MTU等地址相關(guān)信息。
3.路由重定向:當(dāng)在本地鏈路上存在一個更好的到達(dá)目的網(wǎng)絡(luò)的路由器時,路由器需要通告節(jié)點(diǎn)來進(jìn)行相應(yīng)配置改變。
NDP定義了5種ICMPv6報文類型,包括RS、RA、NS、NA和Redirect報文,如表所示。
ICMPv6報文類型
IPv6地址解析
地址解析在報文轉(zhuǎn)發(fā)過程中具有至關(guān)重要的作用。當(dāng)一個節(jié)點(diǎn)需要得到同一條鏈路上另外一個節(jié)點(diǎn)的鏈路層地址時,需要進(jìn)行地址解析。IPv6使用NDP實(shí)現(xiàn)了這個功能,且有所增強(qiáng)。IPv6的地址解析過程包括兩部分:一部分解析目的IP地址所對應(yīng)的鏈路層地址;另一部分是鄰居可達(dá)性狀態(tài)的維護(hù)過程,即鄰居不可達(dá)檢測。
1、地址解析
與IPv4的ARP相比,IPv6地址解析技術(shù)工作在OSI參考模型的網(wǎng)絡(luò)層,與鏈路層協(xié)議無關(guān)。這一特點(diǎn)的益處如下:
(1)加強(qiáng)了地址解析協(xié)議與底層鏈路的獨(dú)立性。對每一種鏈路層協(xié)議都使用相同的地址解析,無須再為每一種鏈路層協(xié)議定義一個新的地址解析協(xié)議。
(2)增強(qiáng)了安全性。在第三層實(shí)現(xiàn)地址解析可以利用三層標(biāo)準(zhǔn)的安全認(rèn)證機(jī)制來防止ARP攻擊和ARP欺騙。
(3)減小了報文傳播范圍。IPv6的地址解析利用三層組播尋址限制了報文的傳播范圍,可節(jié)省網(wǎng)絡(luò)帶寬。
在IPv6中,NDP通過在節(jié)點(diǎn)間交互NS和NA報文完成IPv6地址到鏈路層地址的解析,然后通過解析后得到的鏈路層地址和IPv6等地址信息來建立相應(yīng)的鄰居緩存表項(xiàng)。
如下圖所示,NodeA的鏈路層地址為00E0-FC00-0001,全局地址為1::1:A;NodeB的鏈路層地址為00E0-FC00-0002,全局地址為1::2:B。當(dāng)NodeA要發(fā)送數(shù)據(jù)報文到NodeB時,需要NDP完成地址解析過程。
(1)NodeA發(fā)送一個NS報文到鏈路上,目的IPv6地址為NodeB對應(yīng)的被請求節(jié)點(diǎn)組播地址(FF02::1:FF02:B),選項(xiàng)字段中攜帶了NodeA的鏈路層地址00E0-FC00-0001。
(2)NodeB接收到該NS報文后,由于報文的目的地址FF02::1::FF02:B是NodeB的被請求節(jié)點(diǎn)組播地址,所以NodeB會處理該報文;同時,根據(jù)NS報文中的源地址和源鏈路層地址選項(xiàng)更新自己的鄰居緩存表項(xiàng)。
(3)NodeB發(fā)送一個NA報文來應(yīng)答NS,同時在消息的目標(biāo)鏈路層地址選項(xiàng)中攜帶自己的鏈路層地址00E0-FC00-0002。
(4)NodeA接收到NA報文后,根據(jù)報文中攜帶的NodeB鏈路層地址,創(chuàng)建一個到目標(biāo)節(jié)點(diǎn)NodeB的鄰居緩存表項(xiàng)。
通過交互,NodeA和NodeB就獲得了對方的鏈路層地址,建立起了到達(dá)對方的鄰居緩存表項(xiàng),從而可以相互通信。
當(dāng)一個節(jié)點(diǎn)的鏈路層地址發(fā)生改變時,將以所有節(jié)點(diǎn)組播地址FF02::1為目的地址發(fā)送NA報文,通知鏈路上的其他節(jié)點(diǎn)更新鄰居緩存表項(xiàng)。
2.鄰居不可達(dá)檢測(NUD)
NUD(Neighbor Unreachable Detection,鄰居不可達(dá)檢測)是節(jié)點(diǎn)確定鄰居可達(dá)性的過程。鄰居不可達(dá)檢測機(jī)制通過鄰居可達(dá)性狀態(tài)機(jī)來描述鄰居的可達(dá)性。
鄰居可達(dá)性狀態(tài)機(jī)保存在鄰居緩存表中,共有如下6種狀態(tài):
(1)INCOMPLETE(未完成狀態(tài)):表示正在解析地址,但鄰居鏈路層地址尚未確定。
(2)REACHABLE(可達(dá)狀態(tài)):表示地址解析成功,該鄰居可達(dá)。
(3)STALE(失效狀態(tài)):表示可達(dá)時間耗盡,未確定鄰居是否可達(dá)。
(4)DELAY(延遲狀態(tài)):表示未確定鄰居是否可達(dá)。DELAY狀態(tài)不是一個穩(wěn)定的狀態(tài),而是一個延時等待狀態(tài)。
(5)PROBE(探測狀態(tài)):節(jié)點(diǎn)會向處于PROBE狀態(tài)的鄰居持續(xù)發(fā)送NS報文。
(6)EMPTY(空閑狀態(tài)):表示節(jié)點(diǎn)上沒有相關(guān)鄰接點(diǎn)的鄰居緩存表項(xiàng)。
圖中實(shí)線箭頭表示由NS/NA報文交互導(dǎo)致的狀態(tài)變化,各狀態(tài)間的相互轉(zhuǎn)換如下:
① 在EMPTY狀態(tài)時,如果有報文要發(fā)送給鄰接節(jié)點(diǎn),則在本地鄰居緩存表建立該鄰接節(jié)點(diǎn)的表項(xiàng),并將該表項(xiàng)置于INCOMPLETE狀態(tài),同時向鄰接節(jié)點(diǎn)以組播方式發(fā)送NS報文。
② 節(jié)點(diǎn)收到鄰居回應(yīng)的單播NA報文后,將處于INCOMPLETE狀態(tài)的鄰居緩存表項(xiàng)轉(zhuǎn)化為REACHABLE狀態(tài)。如果地址解析失敗(發(fā)出的組播NS超時),則刪除該表項(xiàng)。
③ 處于REACHABLE狀態(tài)的表項(xiàng),如果在REACHABLE_TIME時間內(nèi)沒有收到關(guān)于該鄰居的"可達(dá)性證實(shí)信息",則進(jìn)入STALE狀態(tài)。此外,如果該節(jié)點(diǎn)收到鄰居節(jié)點(diǎn)發(fā)出的非S置位NA報文,并且鏈路層地址有變化,相關(guān)表項(xiàng)會進(jìn)入STALE狀態(tài)。
④ 處于STALE狀態(tài)的表項(xiàng),當(dāng)有報文發(fā)往該鄰居時,這個報文會利用緩存的鏈路層地址進(jìn)行封裝,并使該表項(xiàng)進(jìn)入DELAY狀態(tài),等待收到"可達(dá)性證實(shí)信息"。
⑤ 進(jìn)入DELAY狀態(tài)后,如果DELAY_FIRST_PROBE_TIME時間之內(nèi)還未收到關(guān)于該鄰居的"可達(dá)性證實(shí)信息",則該表項(xiàng)進(jìn)入PROBE狀態(tài)。
⑥ 在PROBE狀態(tài)時,節(jié)點(diǎn)會周期性地用NS報文來探測鄰居的可達(dá)性,探測最大時間間隔為RETRANS_TIMER,在最多嘗試MAX_ UNICAST_SOLICIT次后,如果仍未收到鄰居回應(yīng)的NA報文,則認(rèn)為該鄰居已不可達(dá),該表項(xiàng)將被刪除。
NodeA上,NodeB的表項(xiàng)處于STALE狀態(tài)。此時若NodeA有報文發(fā)往NodeB,且沒有上層協(xié)議能夠提供到NodeB的"可達(dá)性證實(shí)信息"時,則NodeA需要重新驗(yàn)證到NodeB的可達(dá)性。
NUD過程與地址解析過程的主要不同之處在于以下兩點(diǎn):
(1)NUD的NS報文的目的MAC是目的節(jié)點(diǎn)的MAC地址;目的IPv6地址為NodeB的單播地址,而不是被請求節(jié)點(diǎn)組播地址。
(2)NA報文中的S標(biāo)記須置位,表示是可達(dá)性確認(rèn)報文,即這個NA報文是專門響應(yīng)NS報文的。
無狀態(tài)地址自動配置
IPv6同時定義了無狀態(tài)和有狀態(tài)地址自動配置機(jī)制。有狀態(tài)地址自動配置使用DHCPv6來給主機(jī)動態(tài)分配IPv6地址,無狀態(tài)地址自動配置通過NDP來實(shí)現(xiàn)。在無狀態(tài)地址自動配置中,主機(jī)通過接收鏈路上的路由器發(fā)出的RA消息,結(jié)合接口的標(biāo)識符而生成一個全球單播地址。
1.路由器發(fā)現(xiàn)
路由器發(fā)現(xiàn)是指主機(jī)定位本地鏈路上的路由器和確定其配置信息的過程,主要包含以下3方面內(nèi)容:
(1)路由器發(fā)現(xiàn)(Router Discovery):主機(jī)發(fā)現(xiàn)鄰居路由器及選擇某一個路由器作為默認(rèn)網(wǎng)關(guān)的過程。
(2)前綴發(fā)現(xiàn)(Prefix Discovery):主機(jī)發(fā)現(xiàn)本地鏈路上的一組IPv6前綴,生成前綴列表。該列表用于主機(jī)的地址自動配置和on-link判斷。
(3)參數(shù)發(fā)現(xiàn)(Parameter Discovery):主機(jī)發(fā)現(xiàn)相關(guān)操作參數(shù)的過程,如MTU、報文的默認(rèn)跳數(shù)限制、地址分配方式等信息。
2.重復(fù)地址檢測
DAD(Duplicate Address Detection,重復(fù)地址檢測)是節(jié)點(diǎn)確定即將使用的地址是否在鏈路上唯一的過程。所有的IPv6單播地址,包括自動配置或手動配置的單播地址,在節(jié)點(diǎn)使用之前必須要通過重復(fù)地址檢測。
DAD機(jī)制通過NS和NA報文實(shí)現(xiàn)。節(jié)點(diǎn)會發(fā)送NS報文,其源地址為未指定地址,目的地址為接口配置的IPv6地址。在NS報文發(fā)送到鏈路上后,如果在規(guī)定時間內(nèi)沒有收到應(yīng)答的NA報文,則認(rèn)為這個單播地址在鏈路上是唯一的,可以分配給接口;反之,如果收到應(yīng)答的NA報文,則表明這個地址已經(jīng)被其他節(jié)點(diǎn)所使用,不能配置到接口。
3.前綴重新編址
前綴重新編址(Prefix Renumbering)允許網(wǎng)絡(luò)從以前的前綴平穩(wěn)地過渡到新的前綴,用于提供對用戶透明的網(wǎng)絡(luò)重新編址能力。路由器通過RA報文中的優(yōu)先時間和有效時間參數(shù)來實(shí)現(xiàn)前綴重新編址。
(1)優(yōu)先時間(Preferred Lifetime):無狀態(tài)自動配置得到的地址保持優(yōu)先選擇狀態(tài)的時間。
(2)有效時間(Valid Lifetime):地址保持有效狀態(tài)的時間。
對于一個地址或前綴,優(yōu)先時間小于或等于有效時間。當(dāng)?shù)刂返膬?yōu)先時間到期時,該地址不能被用來建立新連接,但是在有效時間內(nèi),該地址還能用來保持以前建立的連接。
在重新編址時,站點(diǎn)內(nèi)的路由器會繼續(xù)通告當(dāng)前前綴,但是有效時間和優(yōu)先時間將被減小到接近于0;同時路由器開始通告新的前綴。這樣,在每個鏈路上至少有兩個前綴共存,RA消息中包括一個舊的和一個新的IPv6前綴信息。
4.無狀態(tài)地址自動配置過程
NDP的無狀態(tài)自動配置包含兩個階段:鏈路本地地址的配置和全球單播地址的配置。當(dāng)一個接口啟用時,主機(jī)會首先根據(jù)本地前綴FE80::/64和EUI-64接口標(biāo)識符,為該接口生成一個鏈路本地地址,如果在后續(xù)的DAD中發(fā)生地址沖突,則必須對該接口手動配置本地鏈路地址,否則該接口將不可用。
需要說明的是,一個鏈路本地地址的優(yōu)先時間和有效時間是無限的,永遠(yuǎn)不超時。
對于主機(jī)上全球單播地址的配置步驟如下:
① 主機(jī)節(jié)點(diǎn)NodeA在配置好鏈路本地地址后,發(fā)送RS報文,請求路由器的前綴信息。
② 路由器收到RS報文后,發(fā)送單播RA報文,攜帶用于無狀態(tài)地址自動配置的前綴信息,同時路由器也會周期性地發(fā)送組播RA報文。
③ NodeA收到RA報文后,根據(jù)前綴信息和配置信息生成一個臨時的全球單播地址。同時啟動DAD,發(fā)送NS報文驗(yàn)證臨時地址的唯一性,此時該地址處于臨時狀態(tài)。
④ 鏈路上的其他節(jié)點(diǎn)收到DAD的NS報文后,如果沒有用戶使用該地址,則丟棄報文,否則產(chǎn)生應(yīng)答NS的NA報文。
⑤ NodeA如果沒有收到DAD的NA報文,說明地址是全局唯一的,則用該臨時地址初始化接口,此時地址進(jìn)入有效狀態(tài)。
地址自動配置完成后,路由器可以自動進(jìn)行NUD,周期性地發(fā)送NS報文,探測該地址是否可達(dá)。
路由器重定向
在重定向過程中,路由器通過發(fā)送重定向報文來通知鏈路上的報文發(fā)送節(jié)點(diǎn),在同一鏈路上存在一個更優(yōu)的轉(zhuǎn)發(fā)數(shù)據(jù)報文的路由器。接收到該消息的節(jié)點(diǎn)據(jù)此修改其本地路由表項(xiàng)。路由器僅為單播數(shù)據(jù)流發(fā)送重定向報文,而重定向報文也僅以單播形式發(fā)送到始發(fā)主機(jī),并且只會被始發(fā)節(jié)點(diǎn)處理。
如圖2-12所示,NodeA的默認(rèn)路由器為RTA,現(xiàn)在NodeA想發(fā)送數(shù)據(jù)報文到NodeB,路由器重定向機(jī)制需要經(jīng)過以下過程:
(1)NodeA首先傳送第一個數(shù)據(jù)報文到它的默認(rèn)路由器RTA,當(dāng)該報文經(jīng)過RTB到達(dá)NodeB后,RTA知道RTB是鏈路上轉(zhuǎn)發(fā)報文的更好選擇。
(2)RTA向始發(fā)報文的NodeA發(fā)送一個ICMPv6重定向報文,目標(biāo)地址中含有RTB的IPv6地址,報文選項(xiàng)字段的目標(biāo)鏈路層地址中含有RTB的鏈路層地址。
(3)NodeA獲悉RTB是到NodeB的更好路徑后,修改自己的目的緩存表,當(dāng)再發(fā)送到NodeB的報文時優(yōu)先發(fā)送到RTB,重定向完成。
感謝各位的閱讀!關(guān)于IPv6 NDP更完美的地址解析這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,請聯(lián)系站長郵箱:shawn.lee@eliancloud.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。
標(biāo)題:IPv6 NDP更完美的地址解析
TAG標(biāo)簽:IPv6
地址:http://www.dangdangload.com/article/20210430111810.html