IPv6鄰居發現協議基本原理
IPv6通過5種IPMPv6包實現鄰居發現協議,它比IPv4中的ARP更加高效。IPv6鄰居發現協議解決了同一鏈路上多個節點相關問題。
IPv6鄰居發現協議提供下列功能:無服務器自動配置、路由器發現、前綴發現、地址解析、鄰居不可達檢測、鏈路MTU發現、下一跳決定和重復地址檢測等。
IPv6鄰居發現協議定義了5種ICMPv6包:
路由器請求(RS)——當節點不愿等待下一次周期性路由器宣告,希望路由器立刻發送路由器宣告時發送的多播包。一個正在初始化的節點可以發送路由器請求,這樣它可以馬上得到鏈路上路由器的配置參數。
RS是類型133的ICMP包。源地址是分配給發送主機的地址。如果還沒有分配地址,則使用未指定地址0:0:0:0:0:0:0:0。目的地址是所有路由器的多播地址(FF02::2)
路由器宣告(RA)——周期性發送或對請求作應答。路由器報告他們的存在,并提供節點配置自己所需要的信息。
RA是類型134的ICMP包。源地址是發送路由器的本鏈路地址,目的地址是發送路由器請求的節點地址或鏈路范圍所有節點多播地址(FF02::1)。跳數限制必須設置成255。跳數限制255確保非本鏈路的設備不能通過發送路由器宣告來試圖干擾通信流。如果非本鏈路設備向本鏈路發送RA,經過路由器以后跳數限制減1,使該包成為非法。接受節點只認為跳數限制是255的RA是有效的。
RA中包含路由器生存時間。路由器生存時間告訴節點他們能將路由器作為默認路由器多久。其值為0表示該路由器不是候選的默認路由器,不能出現在節點的默認路由器表中。收到RA的節點構造一個默認路由器表。所有發送RA且生存時間不為0的路由器都出現在該列表中。
鄰居請求(NS)——允許節點確定鄰居的鏈路層地址,或者判斷鄰居是否還能從緩存的鏈路層地址可達。同時允許節點判斷鏈路上是否存在重復的IP地址。
鄰居解析消息用來獲得鄰居的鏈路層地址、提供本機的鏈路層地址以及驗證鄰居的可達性。它是一個類型為135的ICMP消息。IP包的源地址是發請求的節點的單播地址。用作獲得鏈路層地址時,目的地址是關聯在目標IP地址的被請求節點多播地址;用作可達性確認時,目的地址是單播地址。跳數限制是255,和RA中一樣,收到NS中跳數255用于確保該包沒有穿過路由器。
鄰居宣告(NA)——對鄰居請求所發的應答或者在鏈路層地址改變時不經請求發送。
鄰居宣告用作應答NS或者在沒有被請求時立即傳播如鏈路層地址改變等新消息。NA是類型為136的ICMP包。源地址是分配給發送接口的任意有效單播地址。當應答NS時,目的地址是請求包的源地址,或者請求源地址是未指定地址時目的地址是所有節點地址(FF02::1)。未經請求的宣告目的地址也是所有節點地址。跳數限制是255。
重定向——由路由器發送,將流量重定向到兩路上更好的***跳地址。
用RS和RA替代ARP
在IPv6中,對節點鏈路層地址的確定使用RS(ICMPv6Type135)、RA(ICMPv6Type136)和被請求節點多播地址(FF02::1:FFxx:xxxx)的組合。
IPv6鄰居發現協議比IPv4中的ARP更加高效:
在IPv6中,只有關心這個機制的鄰居節點才會在它們的協議棧中處理RS和RA的公告消息。而在IPv4中,ARP廣播使本鏈路上所有節點把ARP消息發送給IPv4協議棧。
在IPv6中,節點在相同的請求中相互交換鏈路層地址。在IPv4中,需要兩個ARP廣播消息才能得到相同的結果。
驗證鄰居緩存中IPv6地址和鏈路層地址的可達性。IPv4的ARP中,表項過期后被刪除。