企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

笔记06:IPv6主机是如何发送报文的

wudianyun 2025-05-15 21:32:44 精选文章 3 ℃

IPv6主机维护的表项

为了方便邻居节点间的交互,每一个IPv6节点都需要跟踪和维护以下几张表:

  • 邻居节点缓存:即邻居表,负责存储“每个邻居节点的链路中(on-link)IP地址”、“它对应的链路层地址”、“邻居节点可达性状态的标识”,相当于IPv4中的ARP缓存。表项内容既可以手动绑定,也可以通过NDP自动获取;超时后需再通过NDP获取。与ARP不同的是,IPv6节点除了必需的链路本地地址之外可能会有其他的单播地址,因此邻居表会有两个以上的IPv6地址与同一个MAC地址对应,且会标明邻居是路由器网关还是普通主机。在Windows中查看邻居表的命令是netsh interface ipv6 show neighbors
  • 目的缓存 负责存储“最近发送过数据的(本地或远程的)目的IP地址”、“它对应的下一跳IPv6地址”、“到目标的PMTU”,可实现快速转发功能。在Windows中查看缓存的命令是netsh interface ipv6 show destinationcache
  • 路由表:表中至少包括自身接口所在的前缀列表(网段地址),可以将前缀列表理解为主机的直连路由,如FE80::/64和自身IPv6单播地址的前缀;对于不在本网段的目的地址,表中可以有明确的下一跳或者能匹配到的默认路由。在Windows中查看路由表的命令是netsh interface ipv6 show routeroute print

IPv6主机发送报文过程

一台主机如果要向某目的地发送报文,过程如下图

  1. 查找目的地缓存表,看目的地址是否与表中的表项有匹配,如果有,直接跳到第3步查找邻居表,否则到第2步查找路由表。
  2. 查找路由表,看目的地址是否有匹配项。一般情况下,主机如果有默认路由,则最差也能匹配到默认路由。如果有,则转到下一步;否则向数据包中的源IPv6地址发送ICMPv6差错报文。
  3. 检查下一跳地址在邻居表中是否有匹配项,如果有,则提取其对应的链路层地址进行封装转发;如果没有,则通过NDP来获取下一跳节点的链路层地址,再进行封装转发。

默认路由自动发现过程

在IPv6网络中,对于一般主机节点,可以手动在路由表中添加明细路由或默认路由,也可以通过RS和RA报文来自动获取默认路由——默认网关。与IPv4通过DHCP来下发默认路由的机制不同,即使用DHCPv6方式,默认路由也只能由RS和RA报文来完成。

RS既可以是路由器周期性通告的——IPv6路由器在本地链路上周期的发送RS,通告它们目前是一台可用的路由器。该消息也会提供配置参数,如默认跳数限制、MTU、前缀以及路由。

RS也可以是对RA的响应,例如:主机A的以太网MAC地址为00-B0-D0-E9-41-43;路由器的MAC地址为00-10- FF-D6-58-C0,其对应的链路本地地址为FE80::210:FFFF:FED6:58C0。过程如下图

IPv6在RS中包含了路由器生存时间字段——路由器可以充当默认路由器的时长。另外,如果当前默认路由器失效,邻居节点不可达检测就会发现这一状况,而不用等到RS中的路由器生存时间耗尽;节点会立刻从多个默认路由器条目中选择新的路由器,或者主机会发送路由器请求消息以确定链路上是否存在其他的默认路由器。

地址解析过程

  1. 节点发送一个目的地址是被请求者节点组播地址的NS报文,此请求报文选项中携带了节点自身的链路层MAC地址,以便邻居能快速解析自身的链路层MAC地址。被请求节点的组播地址是将FF02::1:FF00:0的末24位(划线部分)用单播地址的末24位替换。
  2. 目的节点收到NS报文后,首先提取源地址和报文选项中的源链路层MAC地址,将其映射关系添加或更新到本地邻居表;然后向请求者发送目的地址为单播地址的NA报文,并在报文中携带自己的链路层MAC地址。
  3. 最初的节点收到NA报文后,根据其内容更新自己的本地邻居表。

邻居节点可达性检测

如果数据包发送到某邻居节点后,此节点发出了已收到并处理包的确认信息,则此邻居节点是可达的。

确认可达性的方法一:发送单播NS,并接收到所请求的NA。(请求标记设置为1的)NA只会在应答NS时才发送。但未经请求的NA和路由器RA都不能作为可达性的依据。NS和NA之间的交互,仅能单向的确认从发送NS的节点到发送NA的节点是可达的。

确认可达性的方法二:利用上层协议。对于TCP,收到发送数据确认(acknowledgement)信息时,可确认端到端的可达性。

邻居节点缓存(邻居表)条目状态

注:任何条目可以在任何时候从任何状态进入无条目(NO ENTRY EXISTS)状态。

如果不可达的邻居节点是路由器,那么主机就会从路由列表中选择另一台路由器,并在此路由器上执行地址解析和邻居节点不可达检测。

如果某台路由器变成主机,它应发送一个条路由器标记设置为0的组播NA;如果主机收到了一条某个路由器发送过来的,路由器标记设置为0的NA,那么主机就会将该路由器从默认路由列表中删除,并且在有必要的情况下选择其它路由器。

重复地址检测

IPv4节点会使用ARP请求消息和一种称为无条件ARP(gratuitous ARP,ARP请求消息头部中的源协议地址字段和目标协议地址字段会设置为被检测的IPv4地址 )的方法来检测本地链路上的重复单播IPv4地址。

IPv6节点则会使用邻居节点请求消息来检测本地链路中的重复地址

  • 在用于重复地址检测的NS中,IPv6头部的源地址字段会被设置为未指定地址(::)。正在检测其是否重复的地址在被认定没有重复之前不能使用。
  • 在应答的NA中,IPv6头部中的目的地址会被设置为链路本地范围内所有节点的组播地址(FF02::1),因为此时NS的发送方还没配置IP地址——无法接收单播NA;NA中的请求标记设置为0。
  • 如果接收到NA(其中的目标地址字段被设置为正在进行重复性检测的那个IP地址),节点会禁用该IP地址;如果节点没有收到此地址不能使用的通告,则会用该地址初始化接口。

路由重定向

当路由器收到一个报文时,若发现同网段有更好的下一跳,则向发送方发送重定向报文(与IPv4类似)。路由重定向的过程如下:

  1. 发送方在向一个目的地址发送IPv6单播报文时,根据路由表中的最佳匹配原则,将报文发送给下一跳路由器。
  2. 路由器收到报文后查找路由表,发现去往目的地的下一跳地址与报文中的源地址处于同一网段。路由器向发送方发送路由重定向报文,告知源节点去往此目的地有更好的下一跳。这个更好的下一跳地址在重定向报文中的目的地址字段中指定,且该地址与源节点处于同一网段。
  3. 路由器转发报文给下一跳路由器。

源节点收到路由重定向报文后,是否采用新的下一跳地址转发后续报文,由源节点的配置决定。

Tags:

最近发表
标签列表