下一代IP協議——IPv6鄰居發現協議(NDP)

下一代IP協議——IPv6鄰居發現協議(NDP)

上篇文章寫了IP的報文格和其擴展報文,這篇我們瞭解下IPv6下的鄰居發現協議(NDP)。NDP是IPv6的一個基本功能。

鄰居發現協議(NDP)替代了IPv4的ARP,並且添加了新的功能。它的所有功能都是基於ICMPv6報文來實現。NDP基於ICMPv6實現,NDP使用的所有報文均封裝在ICMPv6報文中,所以ND被認為是3層協議。在三層完成地址解析,主要好處是:地址解析在三層完成,不同的二層介質可以採用相同的地址解析協議。可以使用三層的安全機制避免地址解析攻擊。使用組播方式發送請求報文,減少了二層網絡的性能壓力。

鄰居發現協議的功能:

【1】地址解析

這個功能對應的是IPv4的ARP(地址解析協議)。主機A要和主機B通信,需要知道主機B的二層地址。

地址解析使用兩種報文,鄰居請求NS(neighbor solicitation),鄰居通告NA(neighbor advertisement)。

下一代IP協議——IPv6鄰居發現協議(NDP)

在上圖中主機A發給主機B的報文為組播報文,主機B發給主機A的是單播報文,其他無關的路由器是不會回應的。

上圖過程可以這樣描述:

主機A:誰叫李法拉?你住在哪裡?

主機B: 我叫李法拉,住在MAC地址的xxxxx。

主機C: 不是叫我,不管他。

【2】跟蹤鄰居狀態,NUD(Neighbor Unreachable Detection,鄰居不可達檢測)

下一代IP協議——IPv6鄰居發現協議(NDP)

在網絡拓撲中,鄰居的狀態可能會隨時發生變化,包括掉電,接口卡插拔等。如果目的地失效,則必然無法通信,如果路徑失效,可能找另外一條路徑來走。因此節點需要維護一張鄰居表,可以瞭解鄰居的狀態。 RFC2461中定義了5種鄰居狀態,分別是:

1、未完成(Incomplete,還有沒有票?不知道啊)。表示正在解析地址,但鄰居鏈路層地址尚未確定。

2、可達(Reachable,我就是今天的票!)表示地址解析成功,該鄰居可達。

3、陳舊(Stale,我的這張舊船票還能登上你的破船嗎?)表示可達時間耗盡,未確定鄰居是否可達。

4、延遲(Delay,破船到底還有沒有?),表示未確定鄰居是否可達。DELAY狀態不是一個穩定的狀態,而是一個延時等待狀態。

5、探查(Probe,這張票還能用嗎?能到xx地方嗎?),節點會向處於PROBE狀態的鄰居持續發送NS報文。

Empty表示鄰居表項為空。

【3】重複地址檢測DAD(Duplicate Address Detect)

是在接口使用某個IPv6單播地址之前進行的,主要是為了探測是否有其它的節點使用了該地址。尤其是在地址自動配置的時候,進行DAD檢測是很必要的。

下一代IP協議——IPv6鄰居發現協議(NDP)

DAD機制通過NS和NA報文實現。節點會發送NS報文(有人叫張拉拉嗎?),其源地址為未指定地址,目的地址為接口配置的IPv6地址。如果收到自己的報文(聽到自己的迴音,奧,自己的聲音不管他),直接忽略。在NS報文發送到鏈路上後,如果在規定時間內沒有收到應答的NA報文,則認為這個單播地址在鏈路上是唯一的,可以分配給接口(好了,我就叫張拉拉了);反之,如果收到應答的NA報文(一個響亮的聲音回來,我就叫張拉拉!呀丫丫,有人和我同名啊,算了,改個名字吧),則表明這個地址已經被其他節點所使用,不能配置到接口。

【4】路由器發現

路由器發現功能用來發現與本地鏈路相連的設備,並獲取與地址自動配置相關的前綴和其他配置參數。

下一代IP協議——IPv6鄰居發現協議(NDP)

路由器週期發送RA(route advertisement)消息。每臺設備為了讓二層網絡上的主機和設備知道自己的存在,定時都會組播發送RA報文,RA報文中會帶有網絡前綴信息,及其他一些標誌位信息。

下一代IP協議——IPv6鄰居發現協議(NDP)

主機發送RS(route solicitation),路由器回應RA(route advertisement)。 很多情況下主機接入網絡後希望儘快獲取網絡前綴進行通信,此時主機可以立刻發送RS報文,網絡上的設備將回應RA報文。主機收到包含路由信息的RA報文後,會更新自己的路由表。當主機向其他設備發送報文時,通過查詢該列表的路由信息,選擇合適的路由發送報文。

【5】重定向功能(router redirect)

當網關路由器發現更好的報文轉發路徑時候,會用重定向報文告訴主機。

下一代IP協議——IPv6鄰居發現協議(NDP)

上圖主機H1要發送數據到網絡N2,經過路由器R1,由R1再轉發到到R2,但路由器R1發現R2和它是同一網段,並且R2是直接連接著網絡N2,這時候路由器R1就發送重定向報文(ND redirect)告訴主機H1,以後再給網絡N2的報文就直接給R2好了,別那麼繞彎子,費勁!

在重定向功能中,只有主機才會處理重定向報文,在圖例中,H1會更新自己的路由表,下次再發送到N2的報文便會直接轉發到R2。


分享到:


相關文章: