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

IPv6的“路由前缀”和“链路前缀”有什么区别?
Wireshark-Trace中的这些差异如何? (如果您观察具有分配的“路由前缀”的主机或具有分配的“链路前缀”的主机)。
邻居发现协议中的这些差异如何? (从其他/外部主机的angular度来看)
他们一起工作,这两种types的前缀?

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

示例层次结构

一个ISP已经从RIR分配了一个前缀,在这个例子中,我们假设它是2001:db8::/32 。 这个前缀不同于传递给客户的意思,即ISP必须通过BGP来公布它。

ISP现在要为客户分配前缀。 首先将2001:db8:0:1::/64分配给连接ISP路由器和CPE路由器的链路。 这是一个链接前缀,因为它被分配给一个链接。 作为一般性build议,IPv6中的所有链接前缀应该是/64

ISP路由器将发送公告此前缀的路由器通告,并且CPE将使用SLAAC为在/64内指向ISP路由器的外部接口构造一个地址。 我们假设外部接口的IP地址为2001:db8:0:1:42:ff:fe00:42/64 (在这个表示中,包含/64是为了提醒我们链接前缀的长度是多less,但是我可以以及已经离开了)。

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

路由前缀可以静态configuration,也可以通过DHCPv6configuration。 CPE路由器如何与ISP提供的DHCPv6服务器协商前缀长度的确切细节超出了本答案的范围。 search前缀委派可以告诉你更多关于这个。 假设路由前缀是2001:db8:1::/48 。 在ISP路由器上将创build一个路由表项,指示2001:db8:1::/48需要通过网关2001:db8:0:1:42:ff:fe00:42进行路由。 这个路由表项是路由前缀的定义特征。

CPE路由器可能有多个内部LAN,从/48可以为每个内部LAN分配一个/64连接前缀。 如果我们假设其中一个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的数据包时,它将执行邻居发现以在/64内查找主机的MAC地址。

这样,ISP路由器将需要为链路前缀内的每个IP地址分开的邻居caching条目。

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

这样,ISP路由器只需要网关的一个邻居caching条目就可以将数据包路由到路由前缀内的任何IP地址。 这个属性对于互联网的可扩展性至关重要。

围绕缺less路由前缀

偶尔客户会发现自己被一个只能提供一个链接前缀和没有路由前缀的ISP卡住。 在这种情况下,客户可能会安装一个守护进程,以响应链路前缀特定子范围内的所有IP地址的邻居发现。 这将产生类似于将该前缀configuration为路由前缀的效果。 但是它有几个缺点:

  • 一般情况下,路由的前缀应该比/64短,但守护进程响应邻居发现请求只能创build一个长度大于/64的“路由”前缀。
  • 每当IP地址不在ISP路由器上的邻居caching中时,由于额外往返导致延迟略微增加。
  • 由于需要更频繁的邻居发现,增加了ISP路由器的负载。 ISP路由器完全可以将数据包转发到一个已知的目标前缀,而这个前缀完全是用硬件实现的,而邻居发现则是用软件完成的。
  • 它增加了ISP路由器的内存消耗。 如果ISP为每个客户分配一个路由前缀,他们可以很容易地离开每个客户只有一个邻居caching条目。 但是对于邻居响应者守护进程,这可能会变成每个客户数千条logging。

ISP路由器上的处理开销可能是一个重要的问题。 一些路由器在处理大量需要邻居发现的数据包时变得非常糟糕,以至于它变成了实际的DoS攻击,并且使用较长的链路前缀(在/120 127范围内)已被用作这种DoS攻击的解决方法。

即使路由器不容易受到DoS攻击,使用上述解决方法时邻居caching条目所需的内存对于ISP来说要比路由前缀的IP地址昂贵得多,所以没有什么原因ISP拒绝发送路由前缀。

点到点链接的特殊情况

在点到点链路(如6in4隧道和PPP链路)上,不需要邻居发现。 在这样一个链路上只有一个方向发送数据包,在发送数据包之前不需要查找硬件地址。

这意味着邻居发现的开销在这样的链路上不是问题。 因此,点对点链接的一端使用大量地址不是问题,只要端点对谁使用哪个地址有一定的约定。 缺less邻居发现意味着没有重复的地址检测,所以两个端点都应该使用相同的地址,否则它将无法正常工作(除非您期望它的行为如同任播地址一样)。

有一点需要注意点到点链接。 每个端点将假定链路上所有未被分配的地址都被分配给另一端。 这意味着点对点链路上未使用的地址很容易触发路由循环。 这样的路由环路(以及其他几种路由环路)可以由端点永远不发送包直接返回到从其接收到的节点来避免。 因此,从点对点链路接收到的数据包不能通过相同的点对点链路发回,只要一个端点得到这个权利,路由环路就会中断。 作为以太网上的一个节点,接收数据包并将其转发回相同的链路是有效的,但是如果将数据包从接收的地址转发回相同的MAC地址,则避免这样做是一个好主意。

由于点对点链路上的大多数地址只是要转发到链路的另一端,而不需要邻居发现,它看起来非常类似于路由前缀。 例如,如果ISP将2001:db8:42 :: / 64分配给点对点链接,而端点被分配了地址2001:db8:42 :: 1和2001:db8:42 :: 2,则将数据包分配给大多数地址在2001年:db8:42 :: / 64将被​​从ISP转发给客户,就像使用2001:db8:42 :: 2作为网关的路由前缀一样。

这意味着一定的破解是可能的。 在CPE上,可以在LAN上实际configuration2001:db8:42 :: / 64作为链接前缀。 为了使CPE知道某个目的地所在的两个链路中的哪一个,实际的到ISP的点对点链路的configuration将不得不改变为2001:db8:42 :: / 126。 这将只有一个小例外,局域网上的主机无法与2001年的四个IP地址进行通信:db8:42 :: / 126。 既然他们可能不需要和那些人沟通,这也不是什么大问题。 然而,不build议使用这种黑客,正确的configuration是从ISP获得路由前缀。

另一种保存地址的方法是只为路由前缀分配全局地址,并为点对点链接使用RFC 4193地址。 然而,这是一个愚蠢的黑客,因为它仍然带来一些缺陷,以解决一个不存在的问题。

也可以不分配任何前缀到一个点到点的链接。 只要每个端点具有另一个具有全局地址的接口,则可以在点对点链路上进行通信时使用分配给其他接口的地址。 我不知道这种方法有什么缺点,所以如果你发现这种点对点链接的方法可以简化你的networkingconfiguration,可以随意使用它,但是不要把它作为一种措施来保存地址。

使用路由前缀的用例

  • 像我的第一个例子一样, 分层路由是为路由前缀devise的。
  • VPN /隧道将另一层添加到需要前缀的路由器的层次结构中。 虽然它们是虚拟的,而不是真正的硬件,但它们在寻址方面没有什么不同,并且需要路由前缀,就像物理链路一样。
  • 分配许多地址给主机 。 有许多地址分配给单个主机的用例。 对于less数几个地址,他们可以简单地分配和处理,每个caching条目的数量和地址一样多。 但是,如果需要数千个地址,则路由前缀更好。

最后一点的更详细的例子是DNS recursors。 由于我们没有看到DNSSEC在我们与IPv4战斗之后获得了很大的牵引力,所以需要采取其他措施来防范DNS中毒。 努力已尽可能多地获得查询的熵。 ID和端口号最多可以容纳32位熵,如果在域名中混合使用大小写字母进行parsing,则可以在请求中保留另外几位。 这种方法你很less会达到48位以上。 将一个完整/64分配给DNS recursor将允许熵一次增加64个比特,这比所有其他努力的组合都要多。

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

路由前缀在您的networking中使用。

如果您从ISP处收到/ 64路由前缀,那么您只需让路由器在您的LAN上通告该前缀。 如果前缀小于/ 64(也许是/ 48),则应该考虑如何以逻辑方式对前缀进行子网划分,以供组织中的所有路由器使用。

在Wireshark中,根据捕获数据包的位置,您可能只会看到正在使用的路由前缀(如果在LAN上捕获),或者您可能看到使用了两个前缀(如果在WAN上捕获的话)。

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

希望这可以帮助。