ipv6获取地址

在本篇将会搞清楚如下几个名字所指的概念,以及他们之间的关系

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,我想要一个地址,谁能给我啊,把这些信息编码成网络包的格式如下:

 ipv6获取地址

对于这种编码格式,我们可以稍微看下,它使用的是icmpv6 type 133。

 

2.RA

Router收到pc发出的“想要获取地址”的信息后,就会告诉它 怎么获取。注意是怎么获取,不是直接给它地址。

一个典型的RA包长得像下面这个样子

 ipv6获取地址

信息的编码格式使用的是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报文

 ipv6获取地址

Dhcpv6 server收到后就会回复

Advertise报文

 ipv6获取地址

 

 

至此,整个获取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

ipv6获取地址

 

 

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/

上一篇:【CF-1350 C - Orac and LCM】数学


下一篇:iOS视觉差Parallax效果简析