ICMPv6是IPV6的基础协议之一,用于向源节点传递报文转发的信息或错误
协议类型号(即:IPv6Next Header)为58
icmpv6可以提供icmpv4的的对应功能之外,还有其他一些功能的基础如邻居发现、无状态地址配置、重复地址检测、PMTU发现等。
消息类型:
IPv6和IPv4相比有哪些优势?
NDP(Neighbor Discovery Protocol,邻居发现协议) 是IPv6的一个关键协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。该协议使用icmpv6协议实现,作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测、重复地址监测、地址自动配置等功能。
NDP使用的ICMPv6的相关报文 | Type字段 | 说明 |
---|---|---|
RS(router solicitation)路由器请求 | 133 | 当主机刚刚接入网络并被配置为自动获取地址,主机需要自动获得前缀、前缀长度、默认网关等信息时,就会发送RS消息。 |
RA(router Advertisment)路由器通告报文 | 134 | RA消息由路由器周期性地发送,或者在收到主机发送的RS消息后立刻发送,主要为主机提供编址信息以及其他配置信息。 |
NS(Neighbor solicition)邻居请求报文 | 135 | 当节点不知道目标地址的链路层地址时,将发送NS消息。 |
NA(Neighbor Advertisement):邻居通告报文) | 136 | 当节点接收到NS消息后,会快速响应NA消息,或者当节点需要快速传播新的信息(非请求)时,也会发送NA消息。 |
重定向报文 | 137 | 通过重定向消息,路由器可以通告更优的下一跳路由,也可以用于通知目标地址就是邻居。 |
NDP功能点:
IPv6的地址解析实现了从IP地址解析到链路层地址的功能。
与IPv4协议不同,IPv6的地址解析有了以下变化:
① 不再使用ARP协议而是使用NDP协议;
② 不再使用广播方式而是使用组播方式;
③ 地址解析在三层(icmpv6)完成而不是2.5层(arp)。
由此,IPv6的地址解析具有如下优点:
① 由于地址解析在三层完成,不同的二层介质可以使用相同的地址解析协议;
② 采用组播方式发送NS消息,更加高效,减少了二层网络的压力;
③ 可以使用三层的安全机制(如IPSec)以避免地址解析攻击。
ipv6地址解析过程中使用了两种报文:邻居请求报文NS(Neighbor Solicitation)和邻居通告报文NA(Neighbor Advertisement)。
NS报文:Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
NA报文:Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。
流程解析:
① R1要去R2ping包,但是不知道对方地址(即R1想要知道R2的MAC地址),所以R1会发送NS邻居请求报文(源为R1的IPv6地址),目的地址是(R2的被请求节点组播地址,以FF02::1:FF开头),同时需要指出的是在NS报文的Options字段中还携带了一个R1的MAC地址.
NS:
ps:
IPv6组播MAC地址以0x3333开头,低32位为IPv6组播地址的低32位,最终形成48比特的组播MAC地址
RFC4291定义组播地址格式如下;
| 8 | 4 | 4 | 112 |
+---------------+----+------+---------------------------------------------+
|11111111|flgs|scop| group ID |
+--------------+-----+-------+--------------------------------------------+
(1)组播地址高8bit为固定值FF,此高8个bit中4bit为flgs位,4bit为组播组的泛洪范围。
(2)flags位为4bit: |0|R|P|T|
flags位的高1bit为保留,必须设置为0
T位如果为置0表示永久分配或者是well-known组播地址,如果置1表示临时分配动态的地址,不固定。
P位如果置1的话表示此组播地址是一个基于单播前缀的ipv6组播地址。默认为0,如果P位设置为1,那么T位必须为1。
R位如果置1的话表示此组播地址是一个内嵌RP地址的ipv6组播地址。默认为0。
(3)4bit scope位来限制组播组的传播范围。
0 reserved
1 Interface-Local scope
2 Link-Local scope--链路本地范围
3 reserved
4 Admin-Local scope-管理本地范围
5 Site-Local scope--站点本地范围
6 (unassigned)
7 (unassigned)
8 Organization-Local scope-组织本地范围
9 (unassigned)
A (unassigned)
B (unassigned)
C (unassigned)
D (unassigned)
E Global scope--全局范围的
F reserved
(4)低112 bit为组播地址的可用组ID。举例:
所有节点的组播地址: FF02:0:0:0:0:0:0:1
所有路由器的组播地址:FF02:0:0:0:0:0:0:2
Solicited-Node组播地址: FF02:0:0:0:0:1:FFXX:XXXX
所有OSPF路由器组播地址: FF02:0:0:0:0:0:0:5
所有OSPF的DR路由器组播地址: FF02:0:0:0:0:0:0:6
所有RIP路由器组播地址: FF02:0:0:0:0:0:0:9
所有PIM路由器组播地址: FF02:0:0:0:0:0:0:D
② 当R2收到了NS报文后,就会回应NA报文,其中源地址为R2的IPv6地址,目的地址是R1的IPv6地址(使用NS报文中的R1的MAC地址进行单播),R2的MAC地址被放在Options字段中,这样就完成了一个地址解析的过程
NA:
全球单播地址的配置步骤如下:
1)客户端在配置好链路本地地址后,发送RS报文,请求路由器的前缀信息。
2)路由器收到RS报文后,发送RA报文,其中携带M、O flag用于指示进行何种类型配置,A flag用于无状态地址自动配置的前缀信息。同时路由器也会周期性地发送组播RA报文。
3)客户端根据RA报文携带A flag,获取网关信息。如果是自动配置或者是无状态,则根据M、O flag,选择IPv6地址及DNS的获取方式。
M flag:为1通过DHCPv6获取IP地址,为0则是通过RA报文获取地址。
O flag:为1通过DHCPv6获取DNS等其他配置,为0通过RA报文获取其他配置。
A flag:表示是否可以使用RA报文前缀信息配置无状态地址
虚拟机中查看ra生成的路由:
# ip -6 route
default via fe80::216:3eff:fe22:314 dev eth0 proto ra metric 1024 expires 295sec hoplimit 64
下图可以理解其流程:
图片引用自:https://www.cnblogs.com/fzxiaomange/p/ipv6-autoconf-stateless-stateful.html
和IPv4的bootp(DHCPv4)作用类似,DHCPv6基于UDP,通过与服务器协商获取IP地址及DNS等信息
DHCPv6和DHCPv4报文对比:
dhcpv6请求过程如下:
其中的NS报文展开如下,即DAD重复地址检测。
IPv6重复地址检测和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS邻居请求报文。NS报文中目标地址即为试验地址(一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址Tentative Address)。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。
参考
https://blog.csdn.net/u011029104/article/details/119427279
https://www.pudn.com/news/6275d7fe9221806f9db9c56c.html#1.1%E3%80%81NDP%E7%AE%80%E5%8D%95%E8%AF%B4%E6%98%8E%EF%BC%9A