ping通道上的所有IPv6主机

距离OTUS的“网络工程师”课程中的新课程开始还有几天。在这方面,我们希望与您分享有关该主题的有用材料的翻译。




有关IPv6 ping故障排除技巧和窍门的一系列博客文章(ICMPv6 Echo Request / Echo Reply),

请注意,我使用Linux(特别是Fedora 31),但是希望其他操作系统使用ping命令语法应该非常相似。

ping通道上的所有IPv6主机


第一个也是最简单的技巧是对通道上的所有IPv6主机执行ping操作。

IPv6将组播地址用于所有类型的一对多通信。没有广播(或广播)IPv6地址。这将IPv6与IPv4区别开来,在IPv4中,广播地址有多种类型,例如“受限广播”地址255.255.255.255 [RFC1122]。

但是,有一个“所有节点多播” IPv6地址,因此我们将使用它来ping通通道中的所有IPv6节点。 (“广播”地址实际上只是一个特别命名的多播地址,它是一个包括所有节点的多播组。请注意,例如,“组”或多播地址位包含在链路级别的以太网广播地址中)。

通道的所有节点组播IPv6地址:ff02::1. ff表示组播IPv6地址。下一个0是带有未设置位的标志的一部分。

进一步2定义多播组的区域。与IPv4组播地址不同,IPv6组播地址具有作用域。作用域值指示允许组播数据包通过的网络部分。一旦数据包到达指定范围的边界,就应丢弃该数据包,无论其跳数字段是否为非零。当然,如果转换计数器在到达多播组的指定边界之前达到零,它也将立即重置。这是组播范围IPv6的完整列表。

最后,::1指示所有节点的多播组。

关于地址ff02::1,应该指出的是模棱两可。在具有多个接口的IPv6主机(例如路由器或多宿主主机)上,地址ff02::1中没有任何内容,您可以其中指定将ICMPv6 ping发送到或等待ICMPv6 ping到达的接口。ff02::1有效,并且可以在连接到多接口节点的任何接口和通道上使用。

因此,当我们对通道上的所有IPv6节点执行ping操作时,我们还需要以某种方式告诉pingIPv6 实用程序使用哪个接口。

接口定义-命令行选项


如我们所见,我们要使用的全节点多播地址ff02::1-不提供有关向哪个接口发送和接收ICMPv6回显请求和回显应答数据包的任何信息。

因此,我们如何指定将用于多播地址空间或单播链接本地地址的接口?

第一种也是最明显的方法是将其作为我们使用的应用程序的参数提供。

对于实用程序,ping我们通过option提供-I

[mark@opy ~]$ ping -w 1 -I enp3s2 ff02::1
ping: Warning: source address might be selected on device other than: enp3s2
PING ff02::1(ff02::1) from :: enp3s2: 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.589 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=5.15 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=58.0 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=62.3 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=62.8 ms (DUP!)
 
--- ff02::1 ping statistics ---
1 packets transmitted, 1 received, +5 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.438/31.544/62.786/29.566 ms
[mark@opy ~]$


使用此全节点多播ping,我们收到了来自6个IPv6节点的响应。响应来自主机Link-Local IPv6地址,以prefix开头fe80::/10

为了ping防止ICMPv6回显请求持续不断直到我们终止它,我们通常通过-c选项指定要发送的数据包数量。但是,这也阻止了ping在发送多播ICMPv6回显请求时接收和显示多个ICMPv6回显应答。相反,我们使用-w选项指示ping应该在1秒后完成,而不管发送或接收了多少ICMPv6 ping或ping。

另一件事要注意的是(DUP!)关于第二个及后续答案的结论。这些数据包被标识为响应的重复,因为它们具有与首先发送的单个ICMPv6 ping相同的ICMP序列值。之所以出现它们,是因为ICMPv6多播回显请求会导致几个单独的单播响应。统计摘要中还指出了重复次数。

接口定义-区域ID


提供使用接口的另一种方法是IPv6地址参数的一部分。

我们可以在ping输出中看到一个示例,其中响应的IPv6节点的地址也带有后缀%enp3s2,例如:

64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms


[RFC4007]“指定了IPv6地址的体系结构”中正式描述了这种定义接口的方法。尽管它们通常被称为操作系统接口,但它们实际上定义了一些更通用的内容-“区域”或“范围”。

拥有更多通用区域或作用域区域的原因是,如[RFC4007]中所述,IPv6主机可以具有连接到同一通道的多个不同IPv6接口。这些接口是同一区域的成员。

应该可以在操作系统下的区域内对几个接口进行分组;目前,我不知道在Linux下这是否可行以及如何实现。

使用后缀%<zone_id>,我们可以删除命令行参数-I ping

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.606 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=6.23 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=157 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=159 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=161 ms (DUP!)
64 bytes from fe80::23d:e8ff:feec:958c%enp3s2: icmp_seq=1 ttl=64 time=179 ms (DUP!)
 
--- ff02::1%enp3s2 ping statistics ---
1 packets transmitted, 1 received, +7 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.106/82.858/179.216/81.281 ms
 
[mark@opy ~]$



链接本地地址响应


从此所有节点多播ping操作,我们总共收到6个唯一响应。

这些响应来自单播链接本地IPv6主机地址。例如,这是第一个答案:

64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms


所有启用IPv6的接口[RFC4291],IP版本6寻址体系结构上都需要单播链接本地IPv6地址。原因是IPv6主机始终自动拥有一个单播IPv6地址,至少可以通过其直接连接的通道与其他主机通信,该地址可以使用。这包括通过本地链接主机地址与其他主机的应用程序进行通信。

这简化了协议的开发和实施,例如IPv6邻居发现和OSPFv3。它还允许主机上的最终用户应用程序通过通道进行通信,而无需通道上任何其他支持IPv6基础结构。连接的IPv6主机之间的直接通信不需要连接IPv6路由器或DHCPv6服务器。

本地链接地址以10位前缀开头fe80,后跟54个零位,然后是64位接口标识符(IID)。在上面的第一个答案中2392:6213:a15b:66ff,这是一个64位IID。

循环多播


默认情况下,多播数据包在内部返回到发送它们的节点。IPv6和IPv4地址都会发生这种情况。

此默认行为的原因是,在发送多播数据包时,发送主机本身以及网络上的某个地方可能还会运行侦听的本地多播应用程序。此本地应用程序还应该接收多播数据包。

我们可以在ping输出中看到此多播本地循环:

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
...


第一个也是最快的响应(0.106 ms,相比之下0.453 ms)来自接口本身上配置的Link-Local地址enp3s2

[mark@opy ~]$ ip addr show dev enp3s2 | grep fe80
    inet6 fe80::2392:6213:a15b:66ff/64 scope link noprefixroute 
[mark@opy ~]$


该实用程序ping提供了一种使用参数抑制多播邮件的本地反馈的方法-L如果我们发送带有此标志的所有节点多播ping,则响应将仅限于远程节点。我们没有收到来自发送方接口的本地链接地址的响应。

[mark@opy ~]$ ping -L -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.383 ms
 
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.467 ms (DUP!)
...


Ping Link本地地址


您可能会猜到,单播链接本地地址本身也没有提供足够的信息来指示要使用哪个接口来访问它们。与所有节点多播ping一样,ping在ping Link-Local地址时,还需要将接口指定为带有该地址的命令行参数或区域ID。

这次,由于我们执行了单播ping操作,因此可以-c用来限制发送和接收的数据包以及响应的数量ping

[mark@opy ~]$ ping -c 1 fe80::f31c:ccff:fe26:a6d9%enp3s2
 
PING fe80::f31c:ccff:fe26:a6d9%enp3s2(fe80::fad1:11ff:feb7:3704%enp3s2) 56 data bytes
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.395 ms
 
--- fe80::f31c:ccff:fe26:a6d9%enp3s2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.395/0.395/0.395/0.000 ms
[mark@opy ~]$


ping(所有)其他IPv6地址?


在本文中,我们看到了如何使用全节点多播IPv6地址ping通通道上的所有IPv6节点ff02::1。我们还看到了如何指定与所有节点多播IPv6地址一起使用的接口,因为仅该地址不能提供此信息。我们使用命令行参数ping或通过后缀指定接口%<zone_id>

然后,我们了解了单播链接本地地址,这些地址是用于响应所有节点多播ICMPv6回显请求的地址。

我们还看到了默认情况下多播数据包如何返回到发送主机,以及如何对该实用程序禁用此功能ping

最后,我们使用后缀ping通单个Link-Local地址%<zone_id>因为仅链接本地地址不会提供有关传出接口的信息。

那么,对所有其他节点执行ping操作并检索其全局单播地址(GUA)(即其公共Internet地址)或其唯一的本地单播地址(ULA),该怎么办?我们将在下一篇博客文章中介绍。

就这样。

您可以在开放日条目中找到有关我们课程的更多信息

All Articles