ipv6知识点
IPV6地址跟IPV4不同,网络中不需要一个单独的服务器来记录哪个地址分配给了哪个设备。他可以通过SLACC地址配置协议来生成地址。
下文参考如下两篇文章:
https://blog.apnic.net/2019/10/18/how-to-ipv6-neighbor-discovery/
IPv6 Stateless Address Auto-configuration (SLAAC)
IPV6的地址由两部分组成,如下图
其中interface ID是根据一些算法算出来的,每次都会不一样。
prefix又分为如下几个类别
其中linklocal地址和多播地址在LTE的地址配置里需要特别关注。多播地址有如下类别
modem如何生成IPV6地址
在Activate default EPS bearer context request 消息里网络会告诉设备一个interface ID
pdn_addr
pdn_addr_len = 13 (0xd)
pdn_type = 3 (0x3) (IPv4v6)
ipv6_interface_id = 0x000000dbf493f01 (0:d:bf49:3f01)
- modem用这个interface id和link local address prefix拼接起来作为源地址(比如 fe80::d:bf49:3f01)给FF02::2这个多播地址发route solicitation (简称为RS)消息。
- 链路里所有的router都可以收到这个消息。route然后返回一个route advertisiment(简称为RA)消息将prefix告知设备。RA消息的目的地址为FF02::1, 源地址为router的link local address(比如fe80::cd54:6209:4984:d2ce)。从下图可知RA里还有可能包含MTU,DNS等信息。
- 拿到prefix后全局公网IPv6地址就是 prefix+ interface id
上面说的RA和RS都是ICMPV6消息,源地址都必须是link local address,也就是说地址的prefix必须是fe80::/64
AP端如何获取IPV6地址。
AP端通过QMI拨号,modem会将如下详细地址告知AP
里面包含了prefix,DNS,网关地址。
AP拿到prefix后会根据MAC或者其他方式生成一个新的interface ID,组成一个新的IPV6的地址,然后配置到rmnet_dataX虚拟王卡。
检查地址是否重复 Duplicate Address Detection (DAD)
从上面的介绍可知,modem以及AP都会用 prefix+interface ID的方式来组建IPV6的地址,那如何确保这个地址唯一呢?通过Neighbor Solicitation (NS)
IPV6地址生成后,这个节点就会加入到一个多播群,他会监听发往这个群组的消息,多播群的地址为FF02::1:FFxx:xxxx,其中xx:xxxx是IPV6地址最后的6个十六进制字符。
去重时设备A会往FF02::1:FFxx:xxxx这个地址发送NS消息,消息的起始地址是未指定的(也就是 ::)。NS消息里会包含设备A的实际地址。
- 如果链路中设备B和设备A有相同的ipv6地址,则设备B能收到发往FF02::1:FFxx:xxxx这个地址的NS消息,并将其打开,然后在NA里告知这个地址被使用了,这样A会重新生成新的地址
- 如果没有收到NA告知重复,那这个地址就可用。
如何获取目的地址的链路地址
发送设备通过DNS可用获知目的地址的IPV6地址,那如何获取目的地址的链路地址呢?通过Neighbor Solicitation (NS)
具体可以参考:Neighbor Solicitation (NS)