ICMP与IPv6全局单播地址动态分配

ICMP

  • TCP/IP协议簇会在发生某些错误时提供要发送的信息,这些消息使用ICMP服务发送
  • ICMP报文可大致分为两类:差错报文查询或信息类报文
  • ICMP版本类型有ICMPv4ICMPv6,这分别对应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的SLAAC--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服务器地址、域名和其他信息(而不是通过SLAAC生成全局单播地址)

过程

  • 设备发送RS
  • 路由器发送RA,设备接收,获取默认网关
  • 设备发送DHCPv6请求
  • DHCPv6回应
  • 设备接收,获取全局单播地址、DNS服务器地址、域名和其他信息

注意

  • 设备发送的RA是面向全部IPv6路由器的
  • 设备发送的DHCPv6请求是面向全部DHCPv6服务器的
  • 为确保任何IPv6单播地址唯一性,客户端可以使用重复地址检测(DAD)流程。该过程类似与ARP。若没有回应请求,则该地址唯一。
最后修改:2022 年 04 月 21 日
如果觉得我的文章对你有用,请随意赞赏