IPv6基礎篇(四):鄰居發現協議NDP

IPv6基礎篇(四):鄰居發現協議NDP

上一期我們介紹了ICMPv6的整體介紹,本期我們將基於ICMPv6介紹IPv6體系中基礎的鄰居發現協議,即IPv6 ND。鄰居發現協議代替了IPv4協議棧中的ARP和路由發現的功能,實現了地址解析,重複地址檢測,路由器發現以及路由重定向等功能。

一、IPv6鄰居發現協議使用的ICMPv6訊息型別

IPv6鄰居發現協議使用5種類型的ICMPv6訊息型別,用來實現地址解析,重複地址檢測,路由器發現以及路由重定向等功能。具體的ICMPv6的訊息型別及具體作用如下:

1、ICMPv6鄰居請求(Neighbor Solicitation)訊息

IPv6基礎篇(四):鄰居發現協議NDP

鄰居請求報文NS(Neighbor Solicitation)報文:Type欄位值為135,Code欄位值為0,在地址解析中的作用類似於IPv4中的ARP請求報文。用來獲取鄰居的鏈路層地址,驗證鄰居是否可達,進行重複地址檢測等。

2、ICMPv6鄰居通告(Neighbor Adivertisment)訊息

IPv6基礎篇(四):鄰居發現協議NDP

鄰居通告報文NA(Neighbor Adivertisment)報文:Type欄位值為136,Code欄位值為0,在地址解析中的作用類似於IPv4中的ARP應答報文。用來對NS訊息進行響應。另 外,當節點在鏈路層變化的時候主動發出NA訊息,告知鄰居本節點的變化。

3、 ICMPv6路由器請求(Router Solicitation)訊息

IPv6基礎篇(四):鄰居發現協議NDP

ICMPv6路由器請求(Router Solicitation)訊息:Type欄位值為133,節點啟動後,通 過RS訊息向路由器發出請求,請求字首和其他配置資訊,用於節點的自動配置。

4、 ICMPv6路由器通告 (Router Advertisement) 訊息

IPv6基礎篇(四):鄰居發現協議NDP

I CMPv6路由器通告(Router Advertisement)訊息:Type欄位值為134,對RS訊息進 行迴應。在沒有抑制RA訊息釋出的條件下,路由器會週期性地釋出RA訊息,其中包括字首資訊選項和一些標誌位的資訊。

5、 ICMPv6重定向 (Redirect) 訊息

IPv6基礎篇(四):鄰居發現協議NDP

ICMPv6重定向(Redirect)訊息:Type欄位值為137,當滿足一定的條件時,預設閘道器透過向源主機發送重定向訊息,使主機重新選擇正確的下一跳地址進行後續報文的傳送。

二、地址解析

獲取同一鏈路上鄰居節點的鏈路層地址(與IPv4的ARP功能相同),透過鄰居請求訊息NS和鄰居通告訊息NA實現。節點1 要獲取節點節點2的鏈路層地址。

IPv6基礎篇(四):鄰居發現協議NDP

節點1在向節點2傳送報文之前要解析出節點2的鏈路層地址。地址解析的過程主要如下(我們使用HCL模擬器來模擬這個過程):

組網如下:

IPv6基礎篇(四):鄰居發現協議NDP

整體報文互動總覽(NS和NA):

IPv6基礎篇(四):鄰居發現協議NDP

①節點1會發送一個NS報文,Type值為135,源地址為節點1的IPv6地址。目的地址為節點2的被請求節點組播地址,要請求的為節點2的鏈路層地址。同時NS的報文的Options欄位中攜帶了節點1的鏈路層地址。如下圖:

IPv6基礎篇(四):鄰居發現協議NDP

②節點2收到NS訊息後,會迴應NS訊息,源地址為節點2的IPv6地址,目的地址為節點1的IPv6地址,節點2的鏈路層地址會被放在Option欄位裡。

IPv6基礎篇(四):鄰居發現協議NDP

③節點1獲取到了節點2的鏈路層地址。

最後我們在路由器上可以檢視到RouterA的IPv6地址資訊和所有的鄰居資訊:

IPv6基礎篇(四):鄰居發現協議NDP

IPv6基礎篇(四):鄰居發現協議NDP

在Ping鏈路本地地址時,需要使用-i引數,來指定鏈路本地地址的介面。

IPv6基礎篇(四):鄰居發現協議NDP

三、重複地址檢測

當節點獲取到一個IPv6地址後,需要使用重複地址檢測功能確定該地址是否已被其他節 點使用(與IPv4的免費ARP功能相似)。透過NS和NA可以實現重複地址檢測。

在進行DAD檢測時,一個IPv6單播地址在分配給一個介面之後且透過重複地址檢測之前稱為試驗地址(Tentative Address)。此時該介面不能使用這個試驗地址進行單播通訊,但是仍然會加入兩個組播組:ALL-NODES組播組和實驗地址所對應的Solicited-Node組播組。

IPv6重複地址檢測技術和IPv4中的免費ARP類似:節點向一個自己將使用的試驗地址所在的Solicited-Node組播組傳送一個以該實驗地址為請求的目標地址的NS報文,如果收到節點回應的NA報文,就證明該地址已被網路上使用,節點將不能使用該實驗地址通訊。

IPv6基礎篇(四):鄰居發現協議NDP

DAD檢測過程:

PC1的IPv6地址2000::1為新配置地址,即2000::1為PC1的試驗地址。PC1向2000::1的Solicited-Node組播組傳送一個以2000::1為請求的目標地址的NS報文進行重複地址檢測,由於2000::1並未正式指定,所以NS報文的源地址為未指定地址。當PC2收到該NS報文後,有兩種處理方法:

如果PC2發現2000::1是自身的一個實驗地址,則PC2放棄使用這個地址作為介面地址,並且不會發送NA報文。

如果PC2發現2000::1是一個已經正常使用的地址,那麼PC2會向該地址的ALL-NODES組播組傳送一個NA報文,該訊息中會包含2000::1。這樣,PC1收到這個訊息後就會發現自身的實驗地址是重複的,從而棄用該地址。