1. 程式人生 > >【IPv6】鄰節點不可到達檢測學習(NUD)

【IPv6】鄰節點不可到達檢測學習(NUD)

交互 響應 time 定時器 協議 模塊 ipv 檢測方法 解析過程

鄰節點不可到達檢測

鄰節點不可到達檢測方法有2種:

1. 通過發送單播鄰節點請求報文和接收響應請求的鄰節點公告報文來完成。

2. 借助上層協議確定可達性。(TCP

通過NS/NA報文進行NUD檢測

響應請求的鄰節點公告報文僅用於響應鄰節點請求報文,響應請求的鄰節點公告報文會將其報文中的請求標誌置為1。(響應時,NA報文中請求標誌位設為1)。

自發的鄰節點公告報文或路由器公告報文並不能用於驗證可達性。

鄰節點請求報文和鄰節點公告報文的交互僅能確認從發送鄰節點請求報文的節點A到發送鄰節點公告報文的節點B的可到達性,並不能驗證從BA的可達性。

不可達檢測是單向的。

借助上層協議進行NUD檢測

當上層協議表示使用下一跳地址進行的通信正處於發送數據的過程中時,可以間接確定可到達性。對於

TCP業務流來說,開始發送數據表明已經收到了對方節點發來的對發送數據請求的確認。由接收到的TCP確認所證實的端到端的可到達性,也同時暗示了通往目標的第一跳的可到達性。TCP協議模塊根據現有的機制,把這些暗示提供給了IPv6協議模塊。

鄰節點緩存表項的狀態

1. 未完成(INCOMPLETE )

使用請求節點多播鄰節點請求報文的IPv6地址解析過程正在進行中。當創建一個新的鄰節點高速緩存表項,但此節點相應的鏈路層地址還沒有得到時,會進入未完成狀態。在放棄地址解析並刪除鄰節點高速緩存表項之前可以發送的多播鄰節點請求報文的數目可以由變量來設置。RFC2461使用MAX_MULTICAST_SOLICIT的變量,並建議此變量的值為

3

個人理解:

也就是說,要添加一條鄰居緩存表項,先進入INCOMPLETE狀態,然後在發送MAX_MULTICAST_SOLICITNS請求前,如果獲取到了節點相應的鏈路層地址,那麽該條鄰居緩存狀態變化為REACHABLE。否則刪除該條鄰居緩存。

2. 可到達(REACHABLE)

通過接收響應請求的單播鄰節點公告報文,可以確認鄰節點的可到達性。鄰節點高速緩存的表項會一直保持可到達REACHABLE狀態,直到路由器公告報文的可到達時間字段中規定的時間(毫秒數)(或主機默認值)耗盡為止。

只要上層協議,比如TCP協議,表示傳輸數據的通信仍在進行中,則相關表項就會始終保持可到達狀態。每當上層協議表示要開始傳輸數據時,表項中的可到達時間就會被刷新。

個人理解:

可到達可以保持一段時間,這段時間內,該條鄰居緩存的狀態一直是REACHABLE狀態。

如果有上層協議TCP在通信,表項中的可到達時間就會被刷新。

3. 失效(STALE)

可到達時間(自從上次收到可到達確認後過去的時間)耗盡。當路由器公告報文的時間可到達時間字段中規定的時間(毫秒數)(或主機默認值)耗盡時,鄰居緩存的表項進入失效STALE狀態,並且一致保持該狀態,直到有數據包發送給這個鄰節點。

當主機收到一個公告自己鏈路層地址的自發鄰節點公告報文(NA)時,與此鄰節點對應的表項也會進入失效狀態???

個人理解:

時間耗盡,鄰居緩存表項狀態變為STALE,直到有報文發送到該鄰節點會發生變化。

4. 延遲(DELAY)

為等待上層協議提供可達性確認,在主機發送鄰節點請求報文(NS)前,鄰節點緩存表表項進入延遲DELAY狀態,並且等待一段可以設定的時間。RFC2461中使用名為DELAY_FIRST_PROBE_TIME的變量,並建議此變量的值為5秒。如果在延遲時間結束時,還沒有收到可到達性的確認,則此表項進入探測PROBE狀態,並發送一個單播鄰節點的請求報文。

個人理解:

在失效狀態下,有報文要發送到一個鄰節點,該鄰居緩存的狀態變換為延遲。

在延遲期內如果收到了可達性確認,則進入到REACHABLE狀態。延遲期內沒有收到可達性確認,發送一個單播鄰節點的請求報文(NS),進入到探測階段。

5. 探測(PROBE)

無論鄰節點緩存的表項處於失效狀態還是延遲狀態,都表示正在進行可到達性的確認。主機按照一定的時間間隔發送單播鄰節點請求報文(NS),這個時間間隔等於主機收到的路由器公告中的重傳定時器字段的值(或默認值)。在放棄可達性檢測並刪除相應的鄰節點緩存表項之前可以發送的鄰節點請求報文的數目可以由變量來設置。RFC2461使用名為MAX_UNICAST_SOLICIT的變量,並建議此變量的值為3

個人理解:

探測階段,還可以發送幾次NS報文用來確認可達性。如果不能得到確認,刪除該表項。

任何表項在任何時刻,都可以從任何狀態進入無表項存在狀態。(表項不存在,即刪除之)。

如果不可達的鄰節點是路由器,則主機可以從的默認路由器列表中選擇另一個路由器,並且對新選擇的這個路由器進行地址解析和鄰節點不可到達檢測。

如果路由器變成主機,則它應該發送路由器標誌為0的多播鄰節點公告報文。如果主機收到了從路由器發來的鄰節點公告報文,並且其中的路由器標誌為0,則主機將它的默認路由器列表中刪除該路由器,如果需要,就再選擇另一個路由器。



【IPv6】鄰節點不可到達檢測學習(NUD)