目录
IPv6 地址分类
IPv6 地址—IPv6接口ID的生成方式
IPv6 地址—IPv6组播地址
预定义的All Nodes Addresses组播地址:
预定义的All Routers Addresses组播地址:
Solicited-Node多播地址:
icmpv6协议
IPv6 邻居发现协议
重复地址检测
link-local地址自动配置
非link-local地址自动配置
重定向
Path MTU—PMTU发现过程
NS报文作用
ipv4和ipv6地址和DNS获取区别
无状态、有状态地址分配
无状态(Stateless M=0):根据RA中的前缀信息自动配置ipv6地址
有状态(M=1):通过DHCPv6⽅式获得IPv6地址
最后附上一个大佬的文章!!
(IPv6地址组成:前缀 + 接口标识)
- 单播地址:标识一个接口,目的为单播地址的报文会被送到被标识的接口
链路本地地址:用于本地链路寻址,自动地址配置和邻居发现,以FE80开头, 例FE80::E0:F726:4E58
- 组播地址
- 任播地址
(单播地址或任播地址的后64位除特殊情况必须是该接口的接口标识符)
依据IEEE-EUI-64自动生成:将48比特的MAC地址转化为64比特的接口ID(在中间插入FFFE,将表示Universal/Local (U/L)位由0改成1)
前缀:FFxx::/8;
在IPV6中没有广播的概念,而是使用用组播来代替;因此IPv6中存在大量的组播使用。
预定义的All Nodes Addresses组播地址:
FF01:0:0:0:0:0:0:1 (interface-local)
FF02:0:0:0:0:0:0:1 (link-local).
预定义的All Routers Addresses组播地址:
FF01:0:0:0:0:0:0:2 (interface-local)
FF02:0:0:0:0:0:0:2 (link-local).
FF05:0:0:0:0:0:0:2 (site-local).
(Solicited-Node多播地址的前缀都是相同的,只有最后24位不同,而最后24位取自单播或者任播地址的最后24位。这24位实际就是取自于64位接口标识符的后24位。)
RFC 4861 IPv6邻居发现中规定,在节点进行地址解析时,要将邻居请求(NeighborSolicitation)消息发送到请求目标地址(目的地址是一个组播地址)的请求-节点多播地址。
RFC4862 无状态地址自动配置 中规定,在节点执行 DAD重复地址检测(DuplicateAddress Detection) 时,要将邻居请求(NeighborSolicitation)消息发送到请求目标地址的 被请求-节点多播地址。(源地址为空,进行组播检测是否有人在使用此地址了,如果有带上地址的回复,则证明此地址被用了)
回复带了地址(则表示此地址有人在用):
数据包的目的地址是根据target address 生成的
简单描述:
我想用这个target地址,那我就先把这个NS报文发送给这个target地址所在的组放ff02::16,所有的组成员就会收到,如果有某个组成员用了这个target ip,则就会回复带有此target ip的报文证明有人在用此ip了。
IPv6的ND模块中用于报文目的地址、IPv6重复地址检测(DAD)的目的地址(也就是正在被进行地址解析或者重复地址检测的地址)
FF02:0:0:0:0:1:FFXX:XXXX XX:XXXX取单播/任播地址的接口ID的后24Bits
ipv6 与MAC地址的映射关系
FF02:0:0:0:0:1:FFXX:XXXX MAC 地址是3333+接口ID后32bits。
邻居发现、PathMTU发现机制均是基于ICMPv6协议报文实现的
重复地址检测
使用NS和NA的交互过程 邻居请求NS使用组播(根据ip的到mac),相当于IPV4的arp请求,从协议地址向硬件地址映射的功能, 邻居公告NA返回则直接使用单播。
link-local地址自动配置
主机和路由器在接口初始化时都会自动生成 Link-local地址 接口ID通常使用EUI-64格式生成
非link-local地址自动配置
非Link-local地址的自动配置只应用于主机,主机需要从路由器公告获取前缀信息。(isp给我们最外层路由器分配两个地址,一个是全球单播ipv6地址、一个是前缀),只有主机可以直接使用此前缀生成ipv6。想其他设备也可以使用前缀生成地址,则需要再搭建一个服务器,
重定向
可以直接到达想要到的目的地,节省带宽资源、已经减轻中介设备的负担。
Path MTU—PMTU发现过程
( IPV6只在源节点分片,目的节点重组)
路由器转发时,将数据包的大小和出接口的MTU比较,不大于MTU就可以通过,否则就给源节点发送ICMPv6的数据包过大消息,并告知MTU的值。即需要协商最小MTU。
1、DAD地址检测
2、根据ip建立通信获取mac
链路本地地址(Link-local Address)是一类特殊的IP地址,仅用于在网段内、同一广播域内的主机相互通讯使用,这类主机可认为是不须要外部互联网服务的。
inet6 addr: fe80::e267:b3ff:fe00:2/64(链路本地地址,即使没给分配,都会自动根据自己的mac生成,因为NS交互就是要通过ip通信来获取对方mac,但是生成前(NS报文)会进行DAD检测,无冲突则用此地址)
E0:67:B3:00:00:02 ---》fe80::e267:b3ff:fe00:2生成说明:
fe80 :开头的ip地址在ipv6中是链路本地地址。
e2:根据mac中的E0,将第七位翻转而得到 E0: 1110 0000 --》E2:1110 0010
ff:fe:在fe80之后的第4、5字节替换为FFFE
(生成链路本地地址的方式不止这一种)
1.ipv4 dhcp 获取,可以获取一切信息,包括ipv4地址掩码,网关;DNS
2.ipv6地址获取有2种方式,有状态和无状态获取。
通过RA中的M、O标志位决定是无状态还是有状态地址分配
M标记值为0时,表示RA中携带的Prefix Information Option可以用于完成无状态地址分配;
M标记值为1时,表示需要使用DHCPv6协议获取IPv6地址。
M标记为0时,Host可以使用RA中Prefix Information Option中的IPv6 Prefix和自己的接口ID组成IPv6全球单播地址
❑ 手动配置。手动配置 IPv6 地址 / 前缀及其他网络配置参数( DNS 、 NIS 、SNTP 服务器地址等参数)❑ 无状态自动地址分配。由接口 ID 生成链路本地地址,再根据路由通告报文RA ( Router Advertisement )包含的前缀信息自动配置本机地址❑ 有状态自动地址分配,即 DHCPv6 方式。 DHCPv6 又分为如下两种 :➢ DHCPv6 有状态自动分配。 DHCPv6 服务器自动分配 IPv6 地址 /PD 前缀及其他网络配置参数(DNS 、 NIS 、 SNTP 服务器地址等参数)➢ DHCPv6 无状态自动分配。主机 IPv6 地址仍然通过路由通告方式自动生成,DHCPv6 服务器只分配除 IPv6 地址以外的配置参数,包括 DNS 、 NIS 、SNTP服务器等参数
IPv6无状态地址分配,使用ND协议的RS<->RA交互完成
ipv6地址通过路由通告RA方式生成
IPv6地址、其他参数(如DNS)均通过DHCPv6获取
m=0就是无状态(ipv6地址通过ra前缀生成),m=1就是有状态(ipv6地址通过dhcpv6获取)
深入浅出ipv6有状态、无状态