相关问题

相关问题

在具有环回网络接口的 FreeBSD 系统上......

% ifconfig lo0      
洛0
    链接环回 drv_running 运行多播
    nd6 Performnud auto_linklocal no_radr
    链接 rxcsum txcsum hwcsum rxcsum_ipv6 txcsum_ipv6
    链路地址度量 0 mtu 16384
        类型 24 链路状态 0 物理 0 波特率 0
    inet4 地址 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1
    inet6 地址 ::1 范围 0 prefixlen 128 bdaddr ::1 范围 0
    inet6 地址 fe80::1 范围 3 prefixlen 64
    inet6 地址 ::2 范围 0 prefixlen 128
    inet4 地址 127.53.0.1 prefixlen 8 bdaddr 127.53.0.1
    inet4 地址 127.53.1.1 prefixlen 8 bdaddr 127.53.1.1
%

... ping IP 地址 127.0.0.2(未分配给该(或任何其他)网络接口)会导致失败:

% ping -c 1 127.0.0.2  
PING 127.0.0.2 (127.0.0.2):56 个数据字节
ping: sendto: 网络无法访问

--- 127.0.0.2 ping 统计数据 ---
发送 1 个数据包,接收 0 个数据包,100.0% 数据包丢失
%

OpenBSD 也是如此:

% ping -c 1 127.0.0.2      
PING 127.0.0.2 (127.0.0.2):56 个数据字节
ping: sendto: 网络无法访问
ping:写入 127.0.0.2 64 个字符,ret=-1
--- 127.0.0.2 ping 统计数据 ---
发送 1 个数据包,接收 0 个数据包,100.0% 数据包丢失
%

但在 Linux 上,同样没有配置​​ 127.0.0.2……

% ifconfig 洛
    链接环回运行
    链接地址 00:00:00:00:00:00 bdaddr 00:00:00:00:00:00
    inet4 地址 127.0.0.1 prefixlen 8 bdaddr 127.0.0.1
    inet4 地址 127.53.0.1 prefixlen 8 bdaddr 127.255.255.255
    inet6 地址 ::2 范围 0 prefixlen 128
    inet6 地址 fe80:: 范围 1 prefixlen 10
    inet6 地址 ::1 范围 0 prefixlen 128
%

… ping 出人意料地成功:

% ping -c 1 127.0.0.2
PING 127.0.0.2 (127.0.0.2) 56(84) 字节数据。
来自 127.0.0.2 的 64 字节:icmp_seq=1 ttl=64 时间=0.044 ms

--- 127.0.0.2 ping 统计数据 ---
发送 1 个数据包,接收 1 个数据包,丢包 0%,时间 0ms
rtt 最小值/平均值/最大值/mdev = 0.044/0.044/0.044/0.000 毫秒
%

怎么会?

相关问题

其他参考资料

  • 乔纳森·德博因·波拉德 (2019)。ifconfig小吃指南。软件。

答案1

ip-route用于操作内核路由表中的条目。

路线类型:

unicast- 路由条目描述了到路由前缀所覆盖的目的地的真实路径。

...

local- 目的地被分配给该主机。数据包被环回并在当地交付

$ ip -4 route show table all type local
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1 
local 172.16.8.139 dev wlp2s0 table local proto kernel scope host src 172.16.8.139 
local 192.168.122.1 dev virbr0 table local proto kernel scope host src 192.168.122.1

$ ip -4 address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 172.16.8.139/24 brd 172.16.8.255 scope global dynamic noprefixroute wlp2s0
       valid_lft 36391sec preferred_lft 36391sec
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

当接口添加地址时,会自动为该地址添加一条本地路由。此外,当将地址添加到环回接口 ( IFF_LOOPBACK) 时,还会为该接口添加一条本地路由网络前缀地址的。在 Linux 5.0 中,你可以找到这个实现fib_add_ifaddr()


相反,当将地址添加到非环回接口时,单播为网络前缀添加路由。

$ ip -4 route show table all type unicast
default via 172.16.8.1 dev wlp2s0 proto dhcp metric 600 
172.16.8.0/24 dev wlp2s0 proto kernel scope link src 172.16.8.139 metric 600 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

本地路由被添加到名为“local”的特定表中。这样做最明显的意义是,快速ip -4 route不会显示本地表。这是因为它相当于ip -4 route show table main.


linux-ip.net 有一些更广泛的信息。它提到了本地表的另外两个用途。

上述内容可能适用于您遇到的任何 Linux 版本。我不确定它到底可以追溯到多久以前。然而这个ip route命令已经很古老了;它至少可以追溯到 Linux 2.2 时代。

相关内容