2.5.1 NDP消息

即插即用
承载所有 NDP 消息的 IPv6 数据包的跳数被限制为 255
功能
· 路由器发现 Router Discovery          发现 本地路由
· 前缀发现 Prefix Discovery           发现分配给该链路的 前缀
· 参数发现 Parameter Discovery            发现相连链路的 参数 链路的 MTU--- 取最新的 、跳数限制
· 地址自动配置 Address Autoconfigutation   能够确定它的 完整地址
· 地址解析 Address Resolution         不需要 ARP 能发现 链路层的地址
· 下一跳确定 Next-Hop Determination        能确定到达目的节点下一条链路层节点 本地目的节点 或到达目的节点的 路由器
· 邻居不可达检测 Neighbor Unreachability Detection
· 地址冲突检查 Duplicate Address Detection        
· 重定向 Redirect                     IPv4 ICMP 协议
NDP 消息
· 路由器请求消息 Router Solicitation RS    请求发送一个 RA
· 路由器通告消息 Router Advertisement RA   通告路由器的 存在 链路细节 链路前缀、链路 MTU 、跳数限制
· 邻居请求消息 Neighbor Solicitation NS   请求邻居链路层地址 并且 冲突检测 邻居不可达检测
· 邻居通告消息( Neighbor Advertisement NA
· 重定向消息( Redirect
RS--------------------------------------------------------------------------------
 

 
IPv6 源地址 1 )发出 接口所分配的 IPv6 地址     2 :: (出现在 没有分配地址的情况 ,节点刚刚开始进行地址自动配置时会出现没有地址)
IPv6 目的地址 所有路由器 FF02::2
Type 133
code 0
checksum
Reserved 保留 32b
option
包括始发接口的链路层地址 若源地址未指定 则不一定包含。
RA--------------------------------------------------------------------------------
 

 
 
Type 134
code 0
checksum
Cur hop limit 跳数限制
如果接收到的 cur hop limit 的值不为 0 则主机应该把它的 curhoplimit 变量值修改成接收到的值。
Flags
M anaged address configuration   管理地址的配置标记 置位则利用 DHCPv6 协议 告诉 链路的主机使用有状态地址分配 否则用 无状态地址分配
O ther configuration 其他的有状态配置 置位则会 告诉 链路的主机 使用 DHCPv6 来获取 其他链路信息 M O 可以一起使用。
Home Agent
Prf Default Router preference 2b
proxy
保留
Router lifetime 路由器生存时间 只有始发路由器是 缺省路由器 才为非 0
· 0      1 主机不存在 添加一个新的条目到默认路由列表        
        2 )主机存在,则重新刷新默认路由列表时间
· 0        马上使该条目失效
reachable time   邻居可达时间,用于实现 NDP 协议中 邻居不可达性检测 功能的字段
retrans timer    重传计时,用于实现 NDP 协议有 关地址解析和邻居不可达性检测功能的字段,它指定重传邻居请求消息之间的最小时间
option
· 发起 RA 消息的 接口的链路层地址
· RA 消息所在链路的 MTU 说明
· 分配给链路的一个或多个 前缀 。该消息是无状态地址自动配置的基本信息
不一定使以前接收到的广播所包含所有信息失效
· 非请求 RA 可能不完整(不包括所有选项)
· 请求式 RA 则必须包含所有选项。
NS--------------------------------------------------------------------------------
 
IPv6 源地址 1 )发出 接口所分配的 IPv6 地址     2 :: (地址冲突时)
IPv6 目的地址 :目标地址或多播地址( FF02::1+ 接口 ID 24 位)
如果 NS 被发送到请求 组播地址 ,则发送该 NS 的主机必须在 NS 中放入自己链路地址作为 源链路地址选项,发送源不确定时不放入 。在其他情况下,发送者应该(没有强制必须)包含源链路选项。在多播式请求中包含源链路地址选项可以让目标主机能够利用该地址来回复 NA
Type 135
code 0
checksum
Reserved
Target Address: 请求目标 IPv6 地址 不可能是一个组播地址 目标地址是一个正在进行重复地址检测的临时地址。
option
始发接口的链路层地址
NS NA 都可以用来进行 重复地址检测 。特别的,重复地址检测通过发送携带 不确定源 ip 地址 目标地址为自己临时地址 NS 信息来进行。这个 NS 信息会 触发已经使用这个地址的节点用这个地址来回复 一个多播 NA 来表明所请求的地址已经在使用。
如果收到的 NS 不满足所有以下的有效性检测,节点必须丢弃这个 NS.
1) IP hop limit 字段的值为 255 。数据报不能被中间路由器转发
2) 如果 NS 包括了 authentication 扩展头 而且数据报检测正确
3) ICMP 校验和正确 有效
4) ICMP code 字段值为 0
5) ICMP 长度至少有 24 字节。
6) Target Address 不是组播地址
7) 所有选项的长度都大于 0
8) 如果 IP 源地址是不确定地址 即全 0 地址 ), IP 目的地址是请求组播地址。
9) 如果 IP 源地址是不确定地址,则数据报中不包括源链路地址选项。
10) 必须忽略保留字段的值,以及无法识别的选项。
NA--------------------------------------------------------------------------------
 
IPv6 源地址 :发出 接口所分配的 IPv6 地址  
IPv6 目的地址 1 )邻居请求的源地址  2 )所有节点( FF02::1 ------- S 位相关
Type 136
code 0
checksum
Flags
· R outer   : 路由标记位,标明始发节点是路由器,用于在 邻居可达性检测 中检查 变为主机 的路由器
· S olicited    : 请求标记,表示答复一个邻居通告消息
· O verride : 覆盖标记,表示邻居通告消息超出任何现有邻居的缓存条目,需要所缓存的链路层地址。
· Reserved
Target Address: 1 邻居请求信息的目标地址    2 自己地址 未请求的通告 发送者节点的链路层发生变化
option
目标链路层地址(自己的链路层地址)
如果 NA 数据报不满足以下所有条件,主机必须丢弃收到的数据报。
· The IP Hop Limit field has a value of 255, i.e., the packet could not possibly have been forwarded by a router.
· IP 数据报的 hop limit 字段的值为 255
· If the message includes an IP Authentication Header, the message authenticates correctly .
· ICMP Checksum is valid.
· ICMP Code is 0.
· ICMP length (derived from the IP length) is 24 or more octets.
· Target Address is not a multicast address.
· If the IP Destination Address is a multicast address the Solicited flag is zero. 非答复一个邻居请求
· All included options have a length that is greater than zero .
Redirect----------------------------------------------------------------------------
IPv6 源地址 发出 接口所分配的 IPv6 地址  
IPv6 目的地址 1 邻居请求的源地址  2 所有节点 FF02::1
Type 137
code 0
checksum
目标地址 更好的下一跳地址
目的地址 被重定向的目标地址的 ipv6 地址
option
目标节点链路层地址
option 可选项 -----------------------------------------------------------------------
 
TLV
Type
· 1    源链路层地址
· 2    目标链路层地址
· 3    前缀信息
· 4    重定向的报头
· 5    MTU
Length 8B/32B
Value :长度可变( 8b 倍数)
· 只要前缀条目的失效时间一到,这个 条目就被丢弃 。对于目的缓存条目,并 不需要做对应的更新
· 只要默认路由器列表的某个条目的失效时间一到,这个条目就被 丢弃 。当从默认路由器列表中删除某个路由器条目的时候,主机必须 更新 目的缓存中所有使用这个路由器作为下一跳的条目。
前缀列表的更新和默认路由器列表的更新的处理是不一样的。
临时 IP--->NS IP 冲突检测(有状态自动配置) --->IP& 接口绑定 ---> RS& 接收 RA---> 根据 M&O 标志位指示 --->
----------------------------------------------------------
路由器发现
RA 默认间隔: 200s ipv6 nd ra-interval
    生存时间 1800s ipv6 nd ra-lifetime 不希望某个路由作为默认网关 设为 0
    可达时间 0      ipv6 nd reachable-time
    M 标记:      ipv6 nd managed-config-flag
    O 标记:      ipv6 nd other-config-flag
禁止发 RA 包:      ipv6 nd suppress-ra
地址自动分配
MAC-to- EUI64 转换法:
1) MAC 中间插入 FFFE
2) U/L 7 取反
0000:0B0A:2D51 ------ 0020:0BFF:FE0A:2D51 (IPv6 的一半 ) + 64 位前缀 FE80::/64
有状态自动配置:借助 DHCPv6 。(收到 M 置位的 RA
无状态自动配置: RA 中获得链路链路前缀 + 接口 ID
自动配置 只在支持多播的链路上 使用,并且要求接口也支持多播。除了两个例外:一是路由器生成链路本地地址。二是路由器在绑定地址之前进行重复地址检测。
邻居冲突检测(任意播除外)
获取新地址为临时状态的地址(地址冲突检测没完之前,该地址不能用),发送目标为自己的 NS 请求验证。临时地址不是唯一的,自动配置就会停止,然后需要手动配置了。
邻居地址解析 (IPv4 使用 ARP)
私有地址
私有地址回复 .... 安全
邻居不可达检测
· incomplete 正在解析邻居地址解析 发送至被请求节点组播地址 但还没收到 NA
· reachable reachable time 内收到某些可达性信息确认 默认 30s
· stale 超过 reachable time 才收到可达性信息确认
· probe 每经过 retransmit time 或每 1000ms 前者没指定 ), 向目标节点发送 NS 搜索可达性确认
· delay :一个数据包 stable 状态时等待 5s ,如果还没收到可达性确认则转换到 probe 。(可达性机会的优化)
incomplete --- 可达性信息确认 ----> reachable ---- 超过 reachable_time---> stable --- 有数据包到达时 --> delay ----- 超过 5s 没可达性消息确认 ----> Probe ------> 发送 NS