IPv6系列基礎(chǔ)篇(下)——鄰居發(fā)現(xiàn)協(xié)議NDP
【鄰居發(fā)現(xiàn)協(xié)議NDP】IPv6有更加簡潔的地址分配方式,可以通過鄰居發(fā)現(xiàn)協(xié)議實(shí)現(xiàn)IPv6地址的自動(dòng)分配。IPv6鄰居發(fā)現(xiàn)協(xié)議遠(yuǎn)不止這一項(xiàng)功能,本文對(duì)IPv6鄰居發(fā)現(xiàn)協(xié)議做展開講解。
通過上一期文章(IPv6基礎(chǔ)篇(上)——地址與報(bào)文格式),相信大家對(duì)于IPv6的背景、地址和報(bào)文格式有了一定了解,接下來大家可能對(duì)于終端訪問IPv6網(wǎng)絡(luò)資源的過程原理更感興趣。那么一個(gè)終端如果要訪問IPv6的資源,關(guān)鍵的步驟是什么呢?當(dāng)然是它需要一個(gè)IPv6的地址。那么這個(gè)地址又從何而來?是不是只能像IPv4一樣手動(dòng)配置或者通過DHCP服務(wù)器下發(fā)? 其實(shí)不然,IPv6有更加簡潔的地址分配方式,可以通過鄰居發(fā)現(xiàn)協(xié)議實(shí)現(xiàn)IPv6地址的自動(dòng)分配。并且IPv6鄰居發(fā)現(xiàn)協(xié)議遠(yuǎn)不止這一項(xiàng)功能,這一期將對(duì)IPv6鄰居發(fā)現(xiàn)協(xié)議做展開講解。
NDP協(xié)議概述
NDP(Neighbor Discovery Protocol,鄰居發(fā)現(xiàn)協(xié)議)是IPv6協(xié)議體系中一個(gè)重要的基礎(chǔ)協(xié)議。通過使用ICMPv6報(bào)文實(shí)現(xiàn)以下豐富的功能:
• 無狀態(tài)自動(dòng)配置(簡化版的DHCP):路由器發(fā)現(xiàn)、前綴發(fā)現(xiàn)、參數(shù)發(fā)現(xiàn);
• 重復(fù)地址檢測(DAD),相當(dāng)于IPv4的免費(fèi)ARP;
• 地址解析,相當(dāng)于IPv4的ARP;
• 鄰居不可達(dá)檢測(NUD);
•路由器重定向。
為NDP定義的ICMPv6消息
ICMPv6(Internet Control Message Protocol Version 6,互聯(lián)網(wǎng)控制報(bào)文協(xié)議版本6)是IPv6的基礎(chǔ)協(xié)議之一。ICMPv6的協(xié)議類型號(hào)(IPv6報(bào)文中的Next Header字段的值)為58。ICMPv6的報(bào)文格式圖1所示:

▲圖1:ICMPv6報(bào)文格式
報(bào)文中字段解釋如下:
• Type:表明消息的類型,0至127表示差錯(cuò)報(bào)文類型,128至255表示消息報(bào)文類型;
• Code:表示此消息類型細(xì)分的類型;
• Checksum:表示ICMPv6報(bào)文的校驗(yàn)和,校驗(yàn)的部分包括了ICMPv6數(shù)據(jù)和IPv6的報(bào)頭部分(IPv6報(bào)頭不含校驗(yàn));
• Data:ICMPv6數(shù)據(jù)。
ICMPv6消息類型中有5種是為了支持鄰居發(fā)現(xiàn)協(xié)議而定義的,功能如圖2描述:

▲圖2: ICMPv6五種消息類型
無狀態(tài)自動(dòng)配置
IPv6地址配置方式
IPv6地址有128位,即使有簡化書寫的方式,為主機(jī)配置IPv6地址也是一件工作量不小的活兒。IPv6地址除了手工配置外,還能夠自動(dòng)配置,自動(dòng)配置有兩種方式:
• 有狀態(tài)自動(dòng)配置
主機(jī)通過配置協(xié)議(如DHCPv6)獲取IPv6地址以及其他信息(如DNS)。狀態(tài)化自動(dòng)配置相比于手工配置工作效率要高得多,而相比于無狀態(tài)自動(dòng)配置來說更加可控,能夠更加清晰地了解到主機(jī)及地址分配的相關(guān)信息。短板是需要額外部署應(yīng)用服務(wù)器,如DHCPv6 Server。
• 無狀態(tài)自動(dòng)配置
相比于前者,無狀態(tài)地址自動(dòng)配置則顯得更加便捷,IPv6終端使用無狀態(tài)自動(dòng)配置能夠做到即插即用,無需部署額外的應(yīng)用服務(wù)器、無需使用DHCPv6。在IPv6路由器與IPv6主機(jī)之間,利用ICMPv6協(xié)議中的路由器請(qǐng)求消息RS(Router Solicitation)和路由器通告RA(Router Advertisement)消息來完成無狀態(tài)自動(dòng)配置過程。主機(jī)通過RS消息發(fā)現(xiàn)鏈路上的IPv6路由器,而IPv6路由器通過RA消息向主機(jī)通告IPv6地址前綴信息,主機(jī)在收到IPv6前綴信息后,與自己的網(wǎng)卡接口ID一起構(gòu)成128位的IPv6全局單播地址。
路由器通告消息
• RA報(bào)文
每臺(tái)路由器以組播方式定時(shí)發(fā)送RA報(bào)文,用于在二層網(wǎng)絡(luò)中通告自己的存在。RA報(bào)文中會(huì)帶有網(wǎng)絡(luò)前綴信息,及另外的一些標(biāo)志位信息。RA報(bào)文的Type字段值為134。
• RS報(bào)文
主機(jī)接入網(wǎng)絡(luò)后希望盡快獲取網(wǎng)絡(luò)前綴進(jìn)行通信,那么此時(shí)主機(jī)可以立刻發(fā)送RS報(bào)文,網(wǎng)絡(luò)上的路由器將回應(yīng)RA報(bào)文。RS報(bào)文的Tpye字段值為133。
RA報(bào)文詳解如圖3所示:

▲圖3:RA報(bào)文詳解
RA報(bào)文中重要字段的解釋:
• Managed Address Configuration(M比特):默認(rèn)為0。該標(biāo)記指示主機(jī)該使用何種自動(dòng)配置方式來獲取IPv6單播地址。當(dāng)M比特被設(shè)置為1時(shí),收到該RA消息的主機(jī)將使用有狀態(tài)配置協(xié)議(DHCPv6)來獲取IPv6地址。
• Other Configuration(O比特):默認(rèn)為0。該標(biāo)記指示主機(jī)使用何種方式來配置除了IPv6地址外的其他配置信息(如DNS)。當(dāng)O比特被設(shè)置為1,則收到該RA消息的主機(jī)將使用配置協(xié)議(DHCPv6)來獲取除了IPv6地址以外的其他配置信息。
通過M和O比特位的組合,我們可以更清楚地看到終端獲取地址和其他配置信息的方式。下面是關(guān)于M及O比特的組合:
• M=0,O=0
應(yīng)用于沒有DHCPv6服務(wù)器的環(huán)境。主機(jī)使用RA消息中的前綴構(gòu)造IPv6單播地址,同時(shí)使用其他方法(非DHCPv6),例如手工配置的方法設(shè)置其他配置信息(如DNS)。
• M=1,O=1
主機(jī)使用DHCPv6來配置IPv6單播地址以及其他配置信息。這種應(yīng)用也稱為DHCPv6 Stateful。
• M=0,O=1
主機(jī)使用RA消息獲得的IPv6前綴構(gòu)造IPv6地址,同時(shí)使用DHCPv6來獲取除了地址之外的其他配置信息。這種應(yīng)用也被稱為DHCPv6 Stateless。
• M=1,O=0
主機(jī)僅僅使用DHCPv6來獲取IPv6地址,至于其他配置信息則并不通過DHCPv6獲得。
無狀態(tài)自動(dòng)配置過程
IPv6主機(jī)無狀態(tài)自動(dòng)配置的過程如圖4所示:

▲圖4: IPv6主機(jī)無狀態(tài)自動(dòng)配置的過程
1、根據(jù)接口標(biāo)識(shí)產(chǎn)生鏈路本地地址。
2、發(fā)出鄰居請(qǐng)求,進(jìn)行重復(fù)地址檢測。
3、如果檢測到此鏈路本地地址已在鏈路中使用,即地址沖突,則停止自動(dòng)配置,需要手工配置。
4、如不沖突,鏈路本地地址生效,節(jié)點(diǎn)具備本地鏈路通信能力。
5、主機(jī)發(fā)送RS報(bào)文(或接收到路由器定期發(fā)送的RA報(bào)文)。
6、根據(jù)RA報(bào)文中的前綴信息和通過EUI-64規(guī)范生成的接口標(biāo)識(shí)獲得IPv6全局單播地址。
重復(fù)地址檢測DAD
基本概念
DAD(Duplicate Address Detect,重復(fù)地址檢測)是在接口使用某個(gè)IPv6單播地址之前進(jìn)行的,主要是為了探測是否有其它的節(jié)點(diǎn)使用了該地址。所有的IPv6單播地址,包括自動(dòng)配置和手動(dòng)配置的單播地址,在節(jié)點(diǎn)使用之前都要通過重復(fù)地址檢測。
一個(gè)IPv6單播地址在分配給一個(gè)接口之后且通過重復(fù)地址檢測之前,稱為試驗(yàn)地址(Tentative Address)。此時(shí)該接口不能使用這個(gè)試驗(yàn)地址進(jìn)行單播通信,但是仍然會(huì)加入兩個(gè)組播組:All-Nodes組播組和試驗(yàn)地址所對(duì)應(yīng)的Solicited-Node組播組。
IPv6重復(fù)地址檢測技術(shù)和IPv4中的免費(fèi)ARP類似:節(jié)點(diǎn)向試驗(yàn)地址所對(duì)應(yīng)的Solicited-Node組播組發(fā)送NS報(bào)文。NS報(bào)文中目的地址即為該試驗(yàn)地址。如果收到某個(gè)其他站點(diǎn)回應(yīng)的NA報(bào)文,就證明該地址已被網(wǎng)絡(luò)上使用,節(jié)點(diǎn)將不能使用該試驗(yàn)地址通訊。
重復(fù)地址檢測過程
IPv6主機(jī)重復(fù)地址檢測的過程如圖5所示:

▲圖5: IPv6主機(jī)重復(fù)地址檢測的過程
PC A的IPv6地址2000::1為新配置地址,即2000::1為PC A的試驗(yàn)地址。PC A向2000::1的Solicited-Node組播地址FF02::1:FF00:1發(fā)送一個(gè)以2000::1為請(qǐng)求的目標(biāo)地址的NS報(bào)文進(jìn)行重復(fù)地址檢測,由于2000::1并未正式指定,所以NS報(bào)文的源地址為未指定地址。當(dāng)PC B收到該NS報(bào)文后,有兩種處理方法:
• 如果PC B發(fā)現(xiàn)2000::1是自身的一個(gè)試驗(yàn)地址,則PC B放棄使用這個(gè)地址作為接口地址,并且不會(huì)發(fā)送NA報(bào)文。
• 如果PC B發(fā)現(xiàn)2000::1是一個(gè)已經(jīng)正常使用的地址,PC B會(huì)向FF02::1發(fā)送一個(gè)NA報(bào)文,該消息中會(huì)包含2000::1。這樣,PC A收到這個(gè)消息后就會(huì)發(fā)現(xiàn)自身的試驗(yàn)地址是重復(fù)的,從而棄用該地址。
地址解析
替代IPv4的ARP
在IPv4中,當(dāng)主機(jī)需要和目標(biāo)主機(jī)通信時(shí),需要先通過ARP協(xié)議獲得目的主機(jī)的MAC地址。在IPv6中,同樣需要從IP地址解析到MAC地址的功能,鄰居發(fā)現(xiàn)協(xié)議實(shí)現(xiàn)了這個(gè)功能。
但是IPv6取消了ARP協(xié)議,而是通過鄰居請(qǐng)求報(bào)文NS(Neighbor Solicitation)和鄰居通告報(bào)文NA(Neighbor Advertisement)來解析三層地址對(duì)應(yīng)的鏈路層地址。
• NS報(bào)文
Type字段值為135,Code字段值為0,在地址解析中的作用類似于IPv4中的ARP請(qǐng)求報(bào)文。
• NA報(bào)文
Type字段值為136,Code字段值為0,在地址解析中的作用類似于IPv4中的ARP應(yīng)答報(bào)文。
地址解析過程
IPv6主機(jī)地址解析的過程如圖6所示:

▲圖6: IPv6主機(jī)地址解析的過程
1、PC A在向PC B發(fā)送報(bào)文之前它要先解析出PC B的MAC地址,所以首先PC A會(huì)發(fā)送一個(gè)NS報(bào)文,其中源IP地址為PC A的IPv6地址,目的IP地址為PC B的被請(qǐng)求節(jié)點(diǎn)組播地址(前綴FF02::1:F/104,并結(jié)合請(qǐng)求IPv6地址中的低24位,具體細(xì)節(jié)請(qǐng)參閱上一期),需要解析的目標(biāo)IP為PC B的IPv6地址,這就表示PC A想要知道PC B的MAC地址。同時(shí),NS報(bào)文還攜帶了PC A的MAC地址。
2、當(dāng)PC B接收到了NS報(bào)文之后,就會(huì)回應(yīng)NA報(bào)文,其中源地址為PC B的IPv6地址,目的地址為PC A的IPv6地址(使用NS報(bào)文中的PC A的MAC地址進(jìn)行單播),同時(shí)包含PC B的MAC地址。這樣就完成了一次地址解析的過程。
鄰居不可達(dá)檢測NUD
IPv6的鄰居狀態(tài)
NDP的一個(gè)重要特征是檢測同一鏈路上以前相連通的兩個(gè)節(jié)點(diǎn)現(xiàn)在是否依然連通,這是通過NUD(Neighbor Unreachability Detection,鄰居不可達(dá)檢測)完成的。NUD幫助維護(hù)多個(gè)鄰居條目組成的鄰居緩存,每個(gè)鄰居都有相應(yīng)的狀態(tài),狀態(tài)之間可以遷移。
RFC2461中定義了5種鄰居狀態(tài),分別是:
• 未完成(Incomplete):表示正在解析地址,但鄰居鏈路層地址尚未確定。
• 可達(dá)(Reachable):表示地址解析成功,該鄰居可達(dá)。
• 陳舊(Stale):表示可達(dá)時(shí)間耗盡,未確定鄰居是否可達(dá)。
• 延遲(Delay):鄰居可達(dá)性未知。Delay狀態(tài)不是一個(gè)穩(wěn)定的狀態(tài),而是一個(gè)延時(shí)等待狀態(tài)。
• 探測(Probe):鄰居可達(dá)性未知,正在發(fā)送鄰居請(qǐng)求探針以確認(rèn)可達(dá)性.
鄰居狀態(tài)遷移過程
鄰居狀態(tài)的具體遷移過程如圖7所示:

▲圖7: 鄰居狀態(tài)遷移的具體過程
下面以A、B兩個(gè)鄰居節(jié)點(diǎn)之間相互通信過程中A節(jié)點(diǎn)的鄰居狀態(tài)變化為例(假設(shè)A、B之前從未通信),說明鄰居狀態(tài)遷移的過程。
1、A先發(fā)送NS報(bào)文,并生成緩存條目,此時(shí),鄰居狀態(tài)為Incomplete。
2、若B回復(fù)NA報(bào)文,則鄰居狀態(tài)由Incomplete變?yōu)镽eachable,否則固定時(shí)間后鄰居狀態(tài)由Incomplete變?yōu)镋mpty,即刪除表項(xiàng)。
3、經(jīng)過鄰居可達(dá)時(shí)間,鄰居狀態(tài)由Reachable(默認(rèn)30s)變?yōu)镾tale,即未知是否可達(dá)。
4、如果在Reachable狀態(tài),A收到B的非請(qǐng)求NA報(bào)文,且報(bào)文中攜帶的B的鏈路層地址和表項(xiàng)中不同,則鄰居狀態(tài)馬上變?yōu)镾tale。
5、在Stale狀態(tài)若A要向B發(fā)送數(shù)據(jù),則鄰居狀態(tài)由Stale變?yōu)镈elay,并發(fā)送NS請(qǐng)求。
6、在經(jīng)過一段固定時(shí)間后,鄰居狀態(tài)由Delay(默認(rèn)5s)變?yōu)镻robe(每隔1s發(fā)送一次NS報(bào)文,連續(xù)發(fā)送3次),其間若有NA應(yīng)答,則鄰居狀態(tài)由Delay變?yōu)镽eachable。
7、在Probe狀態(tài),A每隔1s發(fā)送單播NS,發(fā)送3次后,有應(yīng)答則鄰居狀態(tài)變?yōu)镽eachable,否則鄰居狀態(tài)變?yōu)镋mpty,即刪除表項(xiàng)。
總 結(jié)
鄰居發(fā)現(xiàn)協(xié)議NDP是IPv6協(xié)議體系中一個(gè)重要的基礎(chǔ)協(xié)議,替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器發(fā)現(xiàn)(Router Discovery),定義了使用ICMPv6報(bào)文實(shí)現(xiàn)地址解析、跟蹤?quán)従訝顟B(tài)、重復(fù)地址檢測、路由器發(fā)現(xiàn)以及重定向等功能。銳捷網(wǎng)絡(luò)的主流產(chǎn)品,包括交換機(jī)、路由器、無線等均支持NDP協(xié)議。
更多IPv6相關(guān)技術(shù)講解,敬請(qǐng)期待《技術(shù)盛宴》后續(xù)的IPv6系列文章。
本期作者:楊萬里
銳捷網(wǎng)絡(luò)互聯(lián)網(wǎng)系統(tǒng)部行業(yè)咨詢
往期精彩回顧
- 【第一期】淺談物聯(lián)網(wǎng)技術(shù)之通信協(xié)議的紛爭
- 【第二期】如何通過網(wǎng)絡(luò)遙測(Network Telemetry)技術(shù)實(shí)現(xiàn)精細(xì)化網(wǎng)絡(luò)運(yùn)維?
- 【第三期】暢談數(shù)據(jù)中心網(wǎng)絡(luò)運(yùn)維自動(dòng)化
- 【第四期】基于Rogue AP反制的無線安全技術(shù)探討
- 【第五期】流量可視化之ERSPAN的前世今生
- 【第六期】如何實(shí)現(xiàn)數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)“去”堆疊
- 【第七期】運(yùn)維可視化之INT功能詳解
- 【第八期】淺析RDMA網(wǎng)絡(luò)下MMU水線設(shè)置
- 【第九期】第七代無線技術(shù)802.11ax詳解
- 【第十期】數(shù)據(jù)中心自動(dòng)化運(yùn)維技術(shù)探索之交換機(jī)零配置上線
- 【第十一期】 淺談數(shù)據(jù)中心100G光模塊
- 【第十二期】數(shù)據(jù)中心網(wǎng)絡(luò)等價(jià)多路徑(ECMP)技術(shù)應(yīng)用研究
- 【第十三期】如何為RDMA構(gòu)建無損網(wǎng)絡(luò)
- 【第十四期】基于EVPN的分布式VXLAN實(shí)現(xiàn)方案
- 【第十五期】數(shù)據(jù)中心自動(dòng)化運(yùn)維技術(shù)探索之NETCONF
- 【第十六期】一文讀懂網(wǎng)絡(luò)界新貴Segment Routing技術(shù)化繁為簡的奧秘
- 【第十七期】淺談UWB(超寬帶)室內(nèi)定位技術(shù)
- 【第十八期】PoE以太網(wǎng)供電技術(shù)詳解
- 【第十九期】機(jī)框式核心交換機(jī)硬件架構(gòu)演進(jìn)
- 【第二十期】 IPv6基礎(chǔ)篇(上)——地址與報(bào)文格式
相關(guān)推薦:
客戶評(píng)論
“地址解析”章節(jié)的“地址解析過程”中,“目的IP地址為PC B的被請(qǐng)求節(jié)點(diǎn)組播地址(前綴F02::1:F/104......”。這里的前綴是否寫錯(cuò)了,應(yīng)該是FF02吧
我要評(píng)論
您的姓名
您的手機(jī)號(hào)*
您的郵箱
公司名稱
更多技術(shù)博文
-
解密DeepSeek-V3推理網(wǎng)絡(luò):MoE架構(gòu)如何重構(gòu)低時(shí)延、高吞吐需求?DeepSeek-V3發(fā)布推動(dòng)分布式推理網(wǎng)絡(luò)架構(gòu)升級(jí),MoE模型引入大規(guī)模專家并行通信,推理流量特征顯著變化,Decode階段對(duì)網(wǎng)絡(luò)時(shí)度敏感。網(wǎng)絡(luò)需保障低時(shí)延與高吞吐,通過端網(wǎng)協(xié)同負(fù)載均衡與擁塞控制技術(shù)優(yōu)化性能。高效運(yùn)維實(shí)現(xiàn)故障快速定位與業(yè)務(wù)高可用,單軌雙平面與Shuffle多平面組網(wǎng)方案在低成本下滿足高性能推理需求,為大規(guī)模MoE模型部署提供核心網(wǎng)絡(luò)支撐。
-
#交換機(jī)
-
-
高密場景無線網(wǎng)絡(luò)新解法:銳捷Wi-Fi 7 AP 與 龍伯透鏡天線正式成團(tuán)銳捷網(wǎng)絡(luò)在中國國際大學(xué)生創(chuàng)新大賽(2025)總決賽推出旗艦Wi-Fi 7無線AP RG-AP9520-RDX及龍伯透鏡天線組合,針對(duì)高密場景實(shí)現(xiàn)零卡頓、低時(shí)延和高并發(fā)網(wǎng)絡(luò)體驗(yàn)。該方案通過多檔賦形天線和智能無線技術(shù),有效解決干擾與覆蓋問題,適用于場館、辦公等高密度環(huán)境,提供穩(wěn)定可靠的無線網(wǎng)絡(luò)解決方案。
-
#無線網(wǎng)
-
#Wi-Fi 7
-
#無線
-
#放裝式AP
-
-
打造“一云多用”的算力服務(wù)平臺(tái):銳捷高職教一朵云2.0解決方案發(fā)布銳捷高職教一朵云2.0解決方案幫助學(xué)校構(gòu)建統(tǒng)一云桌面算力平臺(tái),支持教學(xué)、實(shí)訓(xùn)、科研和AI等全場景應(yīng)用,實(shí)現(xiàn)一云多用。通過資源池化和智能調(diào)度,提升資源利用效率,降低運(yùn)維成本,覆蓋公共機(jī)房、專業(yè)實(shí)訓(xùn)、教師辦公及AI教學(xué)等多場景需求,助力教育信息化從分散走向融合,推動(dòng)規(guī)模化與個(gè)性化培養(yǎng)結(jié)合。
-
#云桌面
-
#高職教
-
-
醫(yī)院無線升級(jí)必看:“全院零漫游”六大謎題全解析銳捷網(wǎng)絡(luò)的全院零漫游方案是新一代醫(yī)療無線解決方案,專為智慧醫(yī)院設(shè)計(jì),通過零漫游主機(jī)和天線入室技術(shù)實(shí)現(xiàn)全院覆蓋和移動(dòng)零漫游體驗(yàn)。方案支持業(yè)務(wù)擴(kuò)展全適配,優(yōu)化運(yùn)維管理,確保內(nèi)外網(wǎng)物理隔離安全,并便捷部署物聯(lián)網(wǎng)應(yīng)用,幫助醫(yī)院提升網(wǎng)絡(luò)性能,支持舊設(shè)備利舊升級(jí),降低成本。
-
#醫(yī)療
-
#醫(yī)院網(wǎng)絡(luò)
-
#無線
-
