IPv6 NDP 详解

注:本文为 “IPv6 邻居发现协议 NDP” 相关文章合辑。


IPv6 邻居发现协议 --NDP 详解

造夢先森 已于 2022-11-08 20:56:49 修改

一、ICMPv6 -Internet 控制报文协议

ICMPv6 是 IPV6 的基础协议之一,用于向源节点传递报文转发的信息或错误

协议类型号(即:IPv6Next Header)为 58

在这里插入图片描述

icmpv6 可以提供 icmpv4 的的对应功能之外,还有其他一些功能的基础如邻居发现、无状态地址配置、重复地址检测、PMTU 发现等。

消息类型:

消息类型 TYPE 名称 CODE
差错消息 1 目的不可达 0 无路由
1 因管理原因禁止访问
2 未指定
3 地址不可达
4 端口不可达
2 数据包过长 0
3 超时 0 跳数到0
1 分片重组超时
4 参数错误 0 错误的包头字段
1 无法识别的下一包头类型
2 无法识别的 IPv6 选项
信息消息 128 Echo request 0
129 Echo reply 0

斐夷所非 增注

在 ICMPv6 中的 Type 字段定义中,0-127 为错误消息 (Error messages),而 128-255 为信息消息 (Informational messages),其中每种 Type 定义一种类型及其含义分类,而部分 Type 中由根据 Code 值指定该类别下更详细的错误或信息分类。
ICMPv6 协议属于 IPv6 协议的一部分,该部分对 IPv6 的 ND 邻居发现协议进行了很详细的分类,ND 邻居发现协议由 ICMPv6 来实现,ND 消息的各种 Type 以及各种选项 options 也在此部分定义。

报文解释:
Type:表明消息的类型,0 至 127 表示差错报文类型,128 至 255 表示消息报文类型。
Code:表示此消息类型细分的类型。
Checksum:表示 ICMPv6 报文的校验和。
错误类消息(error messages),也称为差错报文,8bits 类型字段中的最高 bit 为 0,也就是 ICMPv6 Type=[0,127]
信息类消息(information messages) ,也称为信息报文, 8bits 类型字段中的最高 bit 为 1,也就是 ICMPv6 Type=[128,255]

详细分配类型查询
Internet Control Message Protocol version 6 (ICMPv6) Parameters
http://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml

IPv6 和 IPv4 相比有哪些优势?

  • v4 是用 arp 广播试下地址解析和重复地址检测
  • v6 是用组播形式,减轻设备性能压力
  • v6 在三层完成地址解析,适用更多的链路层(介质独立性)
  • v6 在三层完成解析,可以使自身 ipsec 安全认证机制提高安全性,避免类似 v4 中的 arp 欺骗

二、IPv6 邻居发现协议–NDP 详解

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 功能点:

  • 路由发现 ----- 发现链路上的路由器,获得路由器通告的信息 ( RS RA 报文)
  • 无状态自动配置–通知路由器通告的地址前缀,终端自动生成 IPv6 地址 (NS NA 报文)
  • DAD------- 获得地址后,进行地址重复检测,确保地址不存在冲突 (NS NA 报文)
  • 地址解析 ----- 请求目的网络地址对应的数据链路层地址,类似 IPv4 的 ARP (NS NA 报文)
  • 邻居状态跟踪 — 通过 NDP 发现链路上的邻居并跟踪邻居状态 (NS NA 报文)
  • 前缀重编址 ---- 路由器对所通告的地址前缀进行灵活设置实现网络重编址
  • 路由重定向 ---- 告知其他设备,到达目标网络的更优下一跳

地址解析:

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 要去 R2 ping 包,但是不知道对方地址(即 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   |
    +------+---+---+----------------+
    1234
    

(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值