# ND

IPv6 ND 提供機制來解決鄰近nodes間相互作用的下列問題：

```
Router Discovery - Hosts如何查尋到連接在link上的router？

Prefix Discovery - Hosts如何得知哪些prefix是屬於link上可直接傳送的位址？（Nodes利用prefix是否為on-link來決定直接傳送封包或透過router傳送封包到目的地）

Parameter Discovery - How to get link related parameter by each node？ ex： link MTU，Hop Limit值

Address Autoconfiguration - 提供機制來允許hosts對每個interface自動配置參數。ex：IPv6位址，link MTU等

Address resolution - 如何從鄰近nodes的IPv6位址解析到其link層地址

Next-hop determination - 如何將欲傳送的封包的目的地對應到next-hop位址？ 對於非鄰近（off-link）目的位址，Next-hop位址是router的位址。對於鄰近的（on-link）目的位址，next-hop位址就是目的位址本身

Neighbor Unreachability Detection - 如何偵測鄰近的nodes的可達性？對於不可達的nodes，可嘗試用位址解析機制來確認是否還可達。此外，如果link上有2個以上的routers，還可以透過更換default router來解決鄰近router不可達問題。

Duplicate Address Detection(DAD) - node如何確定它欲使用的位址是否已經被鄰近的其它node使用了？

Redirect（重新導向） - 當link上有2個以上routers時，Router如何告知host使用更佳的next-hop （即別的router）將封包送達特定的目的位址？
```

ND利用 ICMPv6 packet structure並且定義新的ICMPv6 type **133\~137** 分別來解決鄰近nodes間相互作用的問題。ND messages include

* ICMPv6 header
* 零到多個 ND options

  ![](https://2624629372-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MJaHzLj43p3JQXL7BGE%2Fsync%2Fbf0d2f86e4cf354cb98baaf8bb2d903eb57a3951.png?generation=1602665379860217\&alt=media)

ND 包括 5 種messages：

```
Router Solicitation（路由器請求，RS）- Message from host to router, 當host的interface被啟動時，host可以發送RS message要求router立即發佈RA message，不用等待router下次自發性發佈RA message的時間。

Router Advertisement（路由器公告，RA）- router將週期性發佈RA message, 當host發出RS message時， router也會立即發送RA message。RA message包含on-link或off-link的prefix，hop limit，和link MTU等。經host發出RS message而回應的RA亦稱為Solicited RA message（經由請求後才發送的）。Router週期性發佈的RA亦稱為Unsolicited RA message（非經由請求後才發送的）

Neighbor Solicitation（鄰居請求，NS）- 用來解析鄰近nodes的link層地址，也可檢測鄰近的nodes是否還reachable，還可用來做Duplicate Address Detection（DAD）檢測

Neighbor Advertisement（鄰居公告，NA）- NA主要包含發送者的link層地址，用來回應NS message。此外，當link層地址發生變化時，node會馬上發佈NA來通知所有的nodes。 回應NS的NA 亦稱為Solicited NA message，非因回應NS而發送的NA亦稱為Unsolicited NA message

Redirect（重新導向）- Router用來告知host使用路徑更佳的next-hop將封包送達特定的目的位址。
```

在具有multicast能力的link上 (RA 發送的時機點)

* 每個router週期性地send RA來宣告他的可用性
* 當host發出RS message時，router也會立即發送RA message

Hosts藉由收到的RA， 建立一個table稱為Default Router List。當host發現目前的default router unreachable 或不可用（router可能宣佈不再當router或者router的lifetime已經到期） 時， 可利用default router list找到其它可用的router後，更換default router

RA 包含零到多個prefix，每個prefix包括個別的on-link及autonomous flags，用來指定此prefix的用途。Hosts利用on-link flag值為1的prefix，建立一個列表稱為prefix list。發送封包時用prefix list決定直接送到目的地或者透過router轉送。Autonomous flag用來告知host是否使用此prefix自建Global或Unique Local Address。

Node透過發送NS 要求目標透過NA message來回應它的link層地址。NS的IP 目標位址為目標的Solicited-node multicast address，回應的NA message的IP 目標位址為NS message的來源位址。

Summary

DAD

* Implement by NA, NS

**Reference:**

```
RFC 4191  Router Preferences and More-Specific Routes

RFC 4861  Neighbor Discovery in IPv6
```
