IPv6:“路由前缀”和“链接前缀”之间的区别?


14

IPv6的“路由前缀”和“链接前缀”之间的确切区别是什么?
Wireshark-Trace中的这些差异如何?(如果您观察到具有分配的“路由前缀”的主机或具有分配的“链接前缀”的主机)。
邻居发现协议中的这些差异如何?(从一个角度其它/外部主机的点),
难道他们工作在一起,这两种类型的前缀?

Answers:


19

理解两者之间差异的最简单方法是通过一个显示前缀的层次结构性质的示例。

层次结构示例

ISP已从RIR(区域Internet注册表)中分配了前缀,在本示例中,我们将假定为2001:db8::/32。此前缀与传递给客户的前缀不同,因为ISP必须通过BGP将其通告给与之对等的其他ISP。

ISP现在将为客户分配前缀。首先,它们分配2001:db8:0:1::/64给将ISP路由器连接到CPE(客户驻地设备)路由器的链接。这是链接前缀,因为它已分配给链接。作为一般建议,IPv6中的所有链接前缀都应为/64

ISP路由器将发送通告该前缀的路由器广告,CPE将使用SLAAC为指向ISP路由器内ISP路由器的外部接口构造地址/64。让我们假设外部接口获得了IP地址2001:db8:0:1:42:ff:fe00:42/64(在此标记中/64是为了提醒我们链接前缀的长度是多少,但我也可以省去它)。

此链接前缀足以使CPE路由器与世界其他地方进行通信,但是并不能帮助CPE路由器支持连接到其内部接口的LAN上的任何客户端。CPE路由器需要通过该CPE路由器路由的LAN前缀,因此这称为路由前缀

路由前缀可以静态配置,也可以通过DHCPv6配置。CPE路由器如何与ISP提供的DHCPv6服务器协商前缀长度的确切详细信息超出了此答案的范围。搜索前缀委托可以为您提供更多信息。假设路由前缀最终为2001:db8:1::/48。在ISP路由器上,将创建一个路由表条目,指示2001:db8:1::/48需要通过网关进行路由2001:db8:0:1:42:ff:fe00:42。该路由表条目是路由前缀的定义功能。

CPE路由器可能具有多个内部LAN,从中/48可以/64为每个内部LAN 分配一个链接前缀。如果我们假设已分配一个LAN 2001:db8:1:1::/64作为其链路前缀,则此链路上的节点可能会2001:db8:1:1::42:ff:fe00:43通过SLAAC 获得地址。该节点可能是无线路由器,碰巧需要为其无线接口添加前缀。CPE可以分配2001:db8:1:100::/60为无线路由器的路由前缀,而无线路由器可以分配2001:db8:1:100::/64为无线接口的链路前缀。

现在,在这样的设置中,我们拥有的是前缀层次结构。以下内容相互嵌套:

  • 2001:db8::/32 BGP宣布的前缀
  • 2001:db8:1::/48 路由前缀
  • 2001:db8:1:100::/60 路由前缀
  • 2001:db8:1:100::/64 链接前缀

数据包实际如何处理

当ISP路由器收到2001:db8:0:1::/64其链路前缀的数据包时,它将执行邻居发现以在内找到主机的MAC地址/64

这样,ISP路由器将需要为链接前缀内的每个IP地址使用单独的邻居缓存条目。

当ISP路由器收到2001:db8:1::/48其路由前缀的数据包时,它会执行邻居发现以找到网关的MAC地址2001:db8:0:1:42:ff:fe00:42

这样,ISP路由器只需要网关的一个邻居缓存条目即可将数据包路由到路由前缀内的任何IP地址。此属性对于Internet的可伸缩性至关重要。

解决缺少路由前缀的问题

有时,客户发现自己陷入了仅提供链接前缀而没有路由前缀的ISP的困境。在这种情况下,客户可能会安装守护程序,该守护程序对链接前缀的特定子范围内的所有IP地址的邻居发现做出响应。这将具有类似于将该前缀配置为路由前缀的效果。但是它有几个缺点:

  • 一般而言,路由前缀应该比短/64,但是响应邻居发现请求的守护程序只能创建一个长于的“路由”前缀/64
  • 每当IP地址不在ISP路由器的邻居缓存中时,由于额外的往返行程,它会稍微增加延迟。
  • 由于需要更频繁的邻居发现,因此增加了ISP路由器的负载。ISP路由器很可能可以纯粹在硬件中将数据包转发到已知的目标前缀,但是邻居发现将在软件中完成。
  • 这会增加ISP路由器上的内存消耗。如果ISP为每个客户分配路由前缀,则每个客户仅拥有一个邻居缓存条目就可以轻松摆脱困境。但是,使用邻居响应程序守护程序,每个客户可能会变成数千个条目。

ISP路由器上的处理开销可能是一个重要问题。一些路由器在处理大量需要邻居发现的数据包方面表现不佳,以至于它变成了实际的DoS攻击,并且使用更长的链接前缀(在/120- 127范围内)已被用作此类DoS攻击的解决方法。

即使路由器不容易受到DoS攻击,使用上述解决方法时,邻居缓存条目所需的内存对于ISP而言也比路由前缀的IP地址昂贵得多,因此没有什么理由ISP拒绝分发路由前缀。

点对点链接的特殊情况

在点对点链接(例如6in4隧道和PPP链接)上,无需进行邻居发现。在这样的链路上只有一个方向发送数据包,并且在发送数据包之前不需要查找任何硬件地址。

这意味着在这样的链接上邻居发现的开销不是问题。因此,只要端点对谁使用哪个地址有一定的协议,则点对点链接的一端使用很多地址就不是问题。缺少邻居发现意味着也没有重复的地址检测,因此两个端点都应尝试使用相同的地址,否则它将无法按预期工作(除非您期望它充当任意播地址)。

需要注意的一点是点对点链接。每个端点都将假定未自己分配的链接上的所有地址都分配给了另一端。这意味着点对点链路上未使用的地址容易触发路由循环。这样的路由循环(以及路由循环的其他几种情况)可以避免,端点不会将数据包直接发送回接收其的节点。因此,从一个点对点链路接收到的数据包一定不能通过同一点对点链路发送回去,只要一个端点正确,路由循环就将中断。作为以太网上的边节点,接收数据包并将其转发回相同的链路是有效的,但是最好避免这样做,如果将其从接收位置转​​发回相同的MAC地址。

由于点对点链接上的大多数地址都将被转发到链接的另一端,而无需进行邻居发现,因此它看起来与路由前缀非常相似。例如,如果ISP将2001:db8:42 :: / 64分配给点对点链接,而端点被分配了地址2001:db8:42 :: 1和2001:db8:42 :: 2,则将数据包发送到大多数地址在2001:db8:42 :: / 64中,将从ISP转发给客户的方式与使用2001:db8:42 :: 2作为网关的路由前缀时的方式相同。

这意味着可能会发生某些黑客入侵。在CPE上,实际上可以将2001:db8:42 :: / 64配置为LAN上的链接前缀。为了使CPE知道某个目标在两条链路中的哪一条上,必须将指向ISP的点对点链路的实际配置更改为2001:db8:42 :: / 126。这将全部正常工作,只有一个较小的例外,即LAN上的主机无法与2001:db8:42 :: / 126中的四个IP地址进行通信。由于他们可能根本不需要与这些人进行通信,因此这不是主要问题。但是,不建议您使用此技巧,正确的配置是从ISP获取路由前缀。

保存地址的另一种方法是仅为路由前缀分配全局地址,并为点对点链接使用RFC 4193地址。但是,这是一个愚蠢的破解,因为它仍然引入了一些缺点,以解决不存在的问题。

也可能根本不给点对点链接分配任何前缀。只要每个端点都具有在其上具有全局地址的另一个接口,则在点对点链接上进行通信时,它们可以使用分配给另一个接口的地址。我不知道这种方法有什么缺点,因此,如果您发现这种点对点链接的方法简化了您的网络配置,请随时使用它,但不要将其用作保存地址的措施。

路由前缀的用例

  • 在我的第一个示例中,分层路由是为路由前缀设计的。
  • VPN /隧道在需要前缀的路由器层次结构中增加了另一层。尽管它们是虚拟的而不是真实的硬件,但是它们在寻址方面没有什么不同,并且像物理链接一样需要路由前缀。
  • 为主机分配许多地址。在某些情况下,可以为单个主机分配很多地址。对于几个地址,它们可以简单地分配给每个地址并与地址一样多,并通过邻居发现进行处理。但是,如果需要数千个地址,则路由前缀会更好。

最后一点的更详细示例是DNS递归。由于直到我们完成与IPv4的对抗后,我才认为DNSSEC不会获得太大的吸引力,因此需要采取其他措施来防止DNS中毒。已经尽力使熵尽可能多地进入查询。ID和端口号最多可以容纳32位熵,如果要解析的域名中混合使用大小写,则请求中可以保留另外几位。这样,您很少会获得超过48位的数据。将完整/64的域名分配给DNS递归将使熵一次增加64位,这比所有其他努力的总和还多。


如果我能找到一个不错的选择,我将链接到有关CIDR的Q / A。在阅读此答案之前,绝对需要了解CIDR。
kasperd 2015年

对于CIDR来说,Wikipedia-Article对我来说似乎还不错,我认为指向en.wikipedia.org/wiki/Classless_Inter-Domain_Routing的链接对于进一步理解很有帮助
Erik

我的回答有些问题。它们没有涵盖观察到的行为,不是针对我的ISP在家,也不针对我的服务器的托管提供商(都不使用经典邻居发现)。<br />我想我需要更详细的描述我的主要范围题。我应该更新我的问题还是存在其他首选方式?抱歉,我是serverfault.com/StackExchange的新手。
Erik

我对你所说的情况感到困惑。您是指用于私人住宅的Internet连接的ISP(例如,在DSL线路上),还是您指的是连接服务器(具有基于真实以太网的LAN)的主机提供商?
Erik

1
@ 1'OR1--如果到/48结果内部任何未使用地址的数据包都导致目标IP的邻居请求数据包,那么确实听起来像提供商将其配置/48为链接前缀。/48不建议将a 配置为链接前缀,但是我听说提供商还是这样做。如果它是路由前缀,则无论/48数据包内的哪个IP地址被定位为目标,您每次看到的邻居请求都将针对相同的IP地址。并且,一旦您对此做出回应,您将不会再看到邻居的请求。
卡巴斯德(Kasperd)

3

路由器和ISP之间使用链接前缀。

路由前缀在网络内部使用。

如果您从ISP收到/ 64路由前缀,则只需让路由器在LAN上发布该前缀即可。如果您的前缀小于/ 64(也许是/ 48?),则应考虑如何以合理的方式对该前缀进行子网划分,以供组织中的所有路由器使用。

在Wireshark的,这取决于在那里你捕获的数据包,您可能会看到正在使用的只有路由前缀(如果你的局域网上捕获),或者你可能会看到使用(如果你在WAN捕捉)两个前缀。

关于邻居发现协议,它也取决于链接。在ISP和路由器之间的链路上,NDP用于发现路由器的WAN接口的MAC地址和ISP的上游路由器的MAC地址。在您的LAN接口上,NDP用于发现您的LAN网段上的主机的MAC地址。

希望这可以帮助。


1
If you received a /64 from your ISP, then you would simply have your router advertise that prefix on your LAN如果您明确指出该句子/64是指路由前缀,则该句子不太可能会被误解。
kasperd '16

2

如果到达该前缀的数据包需要通过路由器到达目的地,则前缀是路由前缀。如果前缀位于本地网络接口所连接的网段上,则它是链接前缀。

当数据包通过Internet传输时,/ 64的目标将是路由前缀,直到您到达最后一跳为止。然后它将是一个链接前缀。

路由前缀通常是聚合的。可以将许多/ 64聚合为一个较短的前缀,以使路由表更小。在互联网提供商之间的边界上,通常强制最大前缀长度为/ 48。

如果前缀是/ 0到/ 63之间的任何值,通常可以假定它是路由前缀。如果前缀为/ 64,则需要更多信息以了解它是路由前缀还是链接前缀。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.