在本篇将会搞清楚如下几个名字所指的概念,以及他们之间的关系
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/