ICMP与IPv6全局单播地址动态分配
ICMP与IPv6全局单播地址动态分配
ICMP
- TCP/IP协议簇会在发生某些错误时提供要发送的信息,这些消息使用ICMP服务发送
- ICMP报文可大致分为两类:差错报文与查询或信息类报文
- ICMP版本类型有ICMPv4与ICMPv6,这分别对应IPv4与IPv6
ICMP报文格式
ICMPv4
ICMPv4报文位置
- 在IPv4的包中,当协议字段为1,则显示该包携带ICMPv4,其位置如下图所示
ICMPv4类型与代码
- 部分ICMPv4报文类型及对应的代码如下(此外还包含重定向等类型)
ICMPv6
ICMPv6报文位置
- IPv6包中存在扩展头部,则ICMPv6报文位于扩展头部之后;若IPv6包中不存在扩展头部,则ICMPv6报文位于IPv6头部之后
ICMPv6类型与代码
- 图片源于百度
-
差错类报文从0-127,信息类报文类型从128-255
-
下面为非0标准报文类型的代码值
ICMPv4与ICMPv6通用消息
- 主机确认
- 目的不可达(网路、主机、协议、端口)
- 超时
- 路由重定向
IPv6全局单播地址动态分配
基础
路由请求与路由器通告消息
由上文可知,ICMP在邻居发现协议(ND或NDP)中包括4个新协议
IPv6路由器与IPv6设备:
- 路由器请求(RS)消息
- 路由器通告(RA)消息
其中RA消息包括:
- 网络前缀和前缀长度
- 默认网关:IPv6本地链路地址,RA消息源IPv6地址
- DNS地址和域名:DNS服务器地址和域名
- 选项:
-
- 选项1:SLAAC--前缀、前缀长度和默认网关
- 选项2:无状态DHCPv6的SLACC--SLAAC信息,但要向DHCPv6服务器请求其他信息(如DNS)
- 选项3:有状态DHCPv6(无SLAAC)--向DHCPv6服务器请求所有信息
EUI-64流程与随机生成
通过EUI-64流程还是随机生成来生成接口ID取决于操作系统
EUI-64流程
该流程使用了MAC地址,并在48位MAC地址中插入16位生成接口ID
- 划分OUI和设备标识符之间的MAC地址
- 插入16进制值FFFE
- 将OUI前两个十六进制值转为二进制,并颠倒U/L位(第7位)
随机生成
- 操作系统随机生成64位接口ID
二者对比
- EUI-64流程优势在于通过MAC生成接口ID,可确保其唯一性且地址可充分利用,但同时会带来隐私问题,因为可通过MAC地址来跟踪IPv6地址。
- 随机生成相对更安全,但其唯一性要通过DAD流程确保。
IPv6设备之间:
- 邻居请求(NS)消息
- 邻居通告(NA)消息
无状态地址自动分配(SLAAC)
描述
- SLAAC是允许设备从IPv6路由器获取IPv6前缀、前缀长度、默认网关地址以及其他信息而无需使用DHCPv6服务器的方法(DHCPv6服务不是必须向)
- 通过此方式获得的地址仅前缀,接口ID通过EUI-64流程或随机生成接口ID
过程
- 设备发送RS
- 路由器发送RA,设备接收,获取前缀、前缀长度、默认网关
SLAAC与无状态DHCPv6
描述
- 通过SLAAC获取信息,并向DHCPv6服务器请求其他信息
过程
- 设备发送RS
- 路由器发送RA,设备接收并获取前缀、前缀长度、默认网关
- 设备发送DHCPv6请求
- DHCPv6服务器响应并返回信息(DNS服务器地址与域名等信息)
- 设备接收来自DHCPv6信息并进行配置
有状态DHCPv6
描述
- 使用本地链路地址,即RA源IPv6地址作为默认网关
- 通过DHCPv6服务器获取全局单播地址、DNS服务器地址、域名和其他信息(而不是通过SLACC生成全局单播地址)
过程
- 设备发送RS
- 路由器发送RA,设备接收,获取默认网关
- 设备发送DHCPv6请求
- DHCPv6回应
- 设备接收,获取全局单播地址、DNS服务器地址、域名和其他信息
注意
- 设备发送的RA是面向全部IPv6路由器的
- 设备发送的DHCPv6请求是面向全部DHCPv6服务器的
- 为确保任何IPv6单播地址唯一性,客户端可以使用重复地址检测(DAD)流程。该过程类似与ARP。若没有回应请求,则该地址唯一。