在本篇將會搞清楚如下幾個名字所指的概念,以及他們之間的關系
1.RS: Router Solicitation RA:Router Advertisement
radvd: The Router Advertisement Daemon
2.SLAAC: Stateless Auto Address Configuration
3.DHCPv6和DHCPv6 PD
4.NS:Neighbor Solicitation NA: Neighbor Advertisement
除了第4組概念,其他3組都是與“ipv6當中,怎么獲取ipv6地址有關”這個問題緊密聯系的。下面通過獲取一個ipv6地址的時間軸來分別闡述並串聯這些概念。
1.RS
事情的起點是一台pc上電啟動完成了,他會首先,不借助任何外面的信息,自己給自己配置一個Ipv6地址,類似fe80::xx這種,這就是所謂的link local地址。
這種所謂的link local地址的使用范圍是link之間,即直接相連的node之間。
(這里突然引入了node的名字,因為一個網絡上不僅包含pc,還包含各種網絡設備,比如router,我們用node來指代所有的這些網絡設備。)
所以pc想要與更遠的外界網絡通信,就需要其他地址,site local和global address,具體分配哪個,取決於你的網絡環境。
總之,要想與非link上的其他node網絡通信,你就需要非link local的address。
怎么辦呢,這時候故事就開始了。
Pc首先發出一個RS(Router Solicitation),告訴link上的router,我想要一個地址,誰能給我啊,把這些信息編碼成網絡包的格式如下:
對於這種編碼格式,我們可以稍微看下,它使用的是icmpv6 type 133。
2.RA
Router收到pc發出的“想要獲取地址”的信息后,就會告訴它 怎么獲取。注意是怎么獲取,不是直接給它地址。
一個典型的RA包長得像下面這個樣子
信息的編碼格式使用的是icmpv6 type 134。這里面包含很多信息,我們主要關注兩大類信息: prefix information,其他網絡配置信息(比如dns,mtu等等)
Prefix information是我們最想要的那個用於生成ipv6地址的前綴,但是我們不一定用
其他網絡信息也是我們想要的,相比於上面這個,重要性就低一些。同樣我們也不一定用。
什么?你可能就有疑問了,都給了,為啥不用。
因為在RA包里的信息,router明確說了 你要不要用,雖然我已經給了你prefix information和其他網絡配置信息。
Managed (M flag) = A ‘1’ means the address is provided by stateful DHCPv6.
Other (O flag) = A ‘1’ means that the address is provided by Stateless DHCPv6
M為1表示地址要向dhcpv6 server請求,O為1表示其他網絡配置信息也要想dhcpv6 server請求。
上面的stateful,stateless可以忽略,我覺得這個叫法起的不好。總之,就是向dhcpv6 server要這些信息。
如果M為0那就是使用RA的prefix,下面將發生的過程就叫SLAAC
如果M為1,那就不使用,下面將發生的過程就叫DHCPv6
3. SLAAC: Stateless Auto Address Configuration
Pc收到RA后發現M flag為0,告訴它不需要再向DHCPv6 server申請了,所以它就可以開始自己生成了,生成的方法如下:
RA中的前綴+EUI64(mac地址)
EUI64就是一個方法,具體可以google & baidu。
4.DHCPv6
Pc收到RA后發現M flag為1,告訴它需要再向DHCPv6 server申請了,所以它就開始通過dhcpv6報文向dhcpv6 server發送“我要地址”的信息。
Dhcpv6 Solicit報文
Dhcpv6 server收到后就會回復
Advertise報文
至此,整個獲取ipv6地址的框架就出來了,也結束了。下面在基於這個這個框架之上,再談些其他的幾個概念。
Ps1:關於stateful and stateless有狀態和無狀態
為什么有了RA之后,還需要dhcpv6,這是為了可以記錄狀態,什么狀態?,各個地址分配的情況,分配給了誰。這是單單靠RA做不到的。我認為不管dhcpv4還是v6都是為有狀態而生,所以說什么”slacc + stateless dhcpv6”我不太同意,可能當初這樣叫法的原因是,它只向dhcpv6 server申請其他網絡配置信息,並不申請ip,所以就叫stateless,這樣想,也可以理解,不過很容易誤導人。
Ps2:dhcpv6 PD (DHCPv6 Prefix Delegation)
這個名字是指代這樣一個過程,router b的上級router a會下發前綴給router b,比如prefix 32。router b然后再把這個前綴通過RA告知下面的節點,比如prefix 64,對上級的前綴進行再划分。這樣就可以達到分層次管理的目的。
Ps3: radvd: The Router Advertisement Daemon
發出ra包的那個進程,它的配置文件中可以配置是否置起M flag, O flag
/etc/radvd.conf
Ps4: NS:Neighbor Solicitation NA: Neighbor Advertisement
這兩種報文是用於兩台pc之間的通信時,獲取對方的mac地址,可以完全認為是ipv4中 arp的另一種實現。
參考:
https://cshihong.github.io/2018/02/01/DHCPv6%E5%9F%BA%E7%A1%80/
http://www.h3c.com/cn/d_200805/605924_30003_0.htm
https://www.ictshore.com/free-ccna-course/dhcpv6-basics/
https://blog.apnic.net/2019/10/18/how-to-ipv6-neighbor-discovery/