源 IP 和目标 IP 的环回地址

源 IP 和目标 IP 的环回地址

IP 地址为 10.100.100.100 的主机想要使用环回测试,其源地址和目标地址是什么?

  • 10.100.100.100 和 10.100.100.100
  • 10.100.100.100 和 255.255.255.255
  • 10.100.100.100 和 127.1.100.1
  • 127.100.100.100 和 10.100.100.100

我们知道环回测试意味着源和目标应该相同。在我看来,选项 1 和 3 都是正确的。不知道哪个选项是正确的。

答案1

所有组合可能用于环回测试,至少在 Linux 中如此,因为在什么情况下会发生环回几乎完全取决于local路由表中的路由类型local(ID 255)。这些路由决定了您可以绑定/使用哪些地址作为源地址,以及哪些流量将被“捕获”在主机本身中(而不是实际发送/转发到另一台主机)。

$ sudo ip r add local 10.100.100.100 dev lo src 10.100.100.100

(您dev eth0也可以将例如用于上述情况。在单播情况下,本地路由的指定接口似乎并不重要。但它似乎会导致某些广播目的地产生差异,例如255.255.255.255,可能是因为它用于确定这种情况下广播链路/域。)

$ ip r show table local type local
local 10.100.100.100 dev lo scope host src 10.100.100.100
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
local 192.168.1.143 dev eth0 proto kernel scope host src 192.168.1.143

src是个首选源地址,将用作不回复当您未指定目的地时,使用相应目的地进行通信,例如不带 的 ping -I some_address。)

$ ping -c 1 10.100.100.100
PING 10.100.100.100 (10.100.100.100) 56(84) bytes of data.
64 bytes from 10.100.100.100: icmp_seq=1 ttl=64 time=0.193 ms

--- 10.100.100.100 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.193/0.193/0.193/0.000 ms
$ ping -c 1 -I 10.100.100.100 127.1.100.1
PING 127.1.100.1 (127.1.100.1) from 10.100.100.100 : 56(84) bytes of data.
64 bytes from 127.1.100.1: icmp_seq=1 ttl=64 time=0.209 ms

--- 127.1.100.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.209/0.209/0.209/0.000 ms
$ ping -c 1 -I 127.100.100.100 10.100.100.100
PING 10.100.100.100 (10.100.100.100) from 127.100.100.100 : 56(84) bytes of data.
64 bytes from 10.100.100.100: icmp_seq=1 ttl=64 time=0.223 ms

--- 10.100.100.100 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.223/0.223/0.223/0.000 ms
$ sudo sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0
net.ipv4.icmp_echo_ignore_broadcasts = 0
$ ping -c 1 -I 10.100.100.100 -b 255.255.255.255
PING 255.255.255.255 (255.255.255.255) from 10.100.100.100 : 56(84) bytes of data.
64 bytes from 10.100.100.100: icmp_seq=1 ttl=64 time=0.199 ms

--- 255.255.255.255 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.199/0.199/0.199/0.000 ms

以下是tcpdump在同一时间在同一主机上运行的相应输出:

$ sudo tcpdump -eni any icmp
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
16:50:01.183360 lo    In  ifindex 1 00:00:00:00:00:00 ethertype IPv4 (0x0800), length 104: 10.100.100.100 > 10.100.100.100: ICMP echo request, id 29, seq 1, length 64
16:50:01.183422 lo    In  ifindex 1 00:00:00:00:00:00 ethertype IPv4 (0x0800), length 104: 10.100.100.100 > 10.100.100.100: ICMP echo reply, id 29, seq 1, length 64
16:50:19.194256 lo    In  ifindex 1 00:00:00:00:00:00 ethertype IPv4 (0x0800), length 104: 10.100.100.100 > 127.1.100.1: ICMP echo request, id 30, seq 1, length 64
16:50:19.194321 lo    In  ifindex 1 00:00:00:00:00:00 ethertype IPv4 (0x0800), length 104: 127.1.100.1 > 10.100.100.100: ICMP echo reply, id 30, seq 1, length 64
16:50:43.600107 lo    In  ifindex 1 00:00:00:00:00:00 ethertype IPv4 (0x0800), length 104: 127.100.100.100 > 10.100.100.100: ICMP echo request, id 31, seq 1, length 64
16:50:43.600173 lo    In  ifindex 1 00:00:00:00:00:00 ethertype IPv4 (0x0800), length 104: 10.100.100.100 > 127.100.100.100: ICMP echo reply, id 31, seq 1, length 64
16:51:24.764481 lo    In  ifindex 1 00:00:00:00:00:00 ethertype IPv4 (0x0800), length 104: 10.100.100.100 > 255.255.255.255: ICMP echo request, id 32, seq 1, length 64
16:51:24.764548 lo    In  ifindex 1 00:00:00:00:00:00 ethertype IPv4 (0x0800), length 104: 10.100.100.100 > 10.100.100.100: ICMP echo reply, id 32, seq 1, length 64

默认情况下,您不能绑定未被任何本地路由覆盖为目的地的地址:

$ ping -I 192.168.1.123 127.0.0.1
ping: bind: Cannot assign requested address

(尽管据我所知,您可以使用 sysctl 来实现这一点。)

由于本地路由是127.0.0.0/8自动添加的(作为前缀路由,因为127.0.0.1/8lo虚拟的127.0.0.1如果接口处于 up 状态,则可以使用和(含)范围内的任意地址127.255.255.254作为源地址。 (127.0.0.0是 的子网 ID 127.0.0.0/8127.255.255.255是 IP 子网的广播地址,因此应避免使用它们。)

虽然127.0.0.0/8预订的作为“环回地址”,这并不意味着只有涉及该块的地址时才会发生环回。

答案2

127.0.0.0/8(即 127.0.0.0-127.255.255.255,包括子网 ID 和广播地址,如果这些在环回中有意义的话)是真正的回送地址,已解析在网卡本身上。 尽管127.0.0.1 被 InterNIC 保留用于测试网卡,我发现其他 IP 地址允许测试多个目的地。

虽然一个可能将 10.100.100.100 称为“环回”地址,这不是 PC 自身 IP 的常用术语。

255.255.255.255播送对本地网络上的所有人进行掩码保护。

相关内容