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

一、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 选项
信息消息128Echo request0
129Echo reply0

在 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)路由器通告报文134RA 消息由路由器周期性地发送,或者在收到主机发送的 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: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 的获取方式。

  • 路由器请求 RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送 RS 报文,网络上的设备将回应 RA 报文。RS 报文的 Tpye 字段值为 133。
    在这里插入图片描述

  • 路由器通告 RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送 RA 报文,RA 报文中会带有网络前缀信息,及其他一些标志位信息。RA 报文的 Type 字段值为 134。

  • 在这里插入图片描述

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
12

下图可以理解其流程:
在这里插入图片描述

三、DHCPv6 协议

和 IPv4 的 bootp (DHCPv4) 作用类似,DHCPv6 基于 UDP,通过与服务器协商获取 IP 地址及 DNS 等信息。

DHCPv6 和 DHCPv4 报文对比

               ~~~~~~~~~~~~~~               报文类型                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                             DHCPv6                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                               DHCPv4说明
1SOLICITDHCP DISCOVERDHCPv6客户端使用Solicit报文来确定DHCPv6服务器的位置。
2ADVERTISEDHCP OFFERDHCPv6服务器发送Advertise报文来对Solicit报文进行回应,宣告自己能够提供DHCPv6服务。
3REQUESTDHCP REQUESTDHCPv6客户端发送Request报文来向DHCPv6服务器请求IPv6地址和其它配置信息。
4CONFIRM-DHCPv6客户端向任意可达的DHCPv6服务器发送Confirm报文检查自己目前获得的IPv6地址是否适用与它所连接的链路。
5RENEWDHCP REQUESTDHCPv6客户端向给其提供地址和配置信息的DHCPv6服务器发送Renew报文来延长地址的生存期并更新配置信息。
6REBINDDHCP REQUEST如果Renew报文没有得到应答,DHCPv6客户端向任意可达的DHCPv6服务器发送Rebind报文来延长地址的生存期并更新配置信息。
7REPLYDHCP ACK/NAKDHCPv6服务器在以下场合发送Reply报文:DHCPv6服务器发送携带了地址和配置信息的Reply消息来回应从DHCPv6客户端收到的Solicit、Request、Renew、Rebind报文。DHCPv6服务器发送携带配置信息的Reply消息来回应收到的Information-Request报文。用来回应DHCPv6客户端发来的Confirm、Release、Decline报文。
8RELEASEDHCP RELEASEDHCPv6客户端向为其分配地址的DHCPv6服务器发送Release报文,表明自己不再使用一个或多个获取的地址。
9DECLINEDHCP DECLINEDHCPv6客户端向DHCPv6服务器发送Decline报文,声明DHCPv6服务器分配的一个或多个地址在DHCPv6客户端所在链路上已经被使用了。
10RECONFIGURE-DHCPv6服务器向DHCPv6客户端发送Reconfigure报文,用于提示DHCPv6客户端,在DHCPv6服务器上存在新的网络配置信息。
11INFORMATION-REQUESTDHCP INFORMDHCPv6客户端向DHCPv6服务器发送Information-Request报文来请求除IPv6地址以外的网络配置信息。
12RELAY-FORW-中继代理通过Relay-Forward报文来向DHCPv6服务器转发DHCPv6客户端请求报文。
13RELAY-REPL-DHCPv6服务器向中继代理发送Relay-Reply报文,其中携带了转发给DHCPv6客户端的报文。

dhcpv6 请求过程如下:

在这里插入图片描述

其中的 NS 报文展开如下,即 DAD 重复地址检测。

在这里插入图片描述

IPv6 重复地址检测和 IPv4 中的免费 ARP 类似:节点向试验地址所对应的 Solicited-Node 组播组发送 NS 邻居请求报文。
NS 报文中目标地址即为试验地址(一个 IPv6 单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址 Tentative Address)。
如果收到某个其他站点回应的 NA 报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。

参考


via

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值