Linux 究竟如何使用分配给网络接口的前缀长度?

Linux 究竟如何使用分配给网络接口的前缀长度?

192.168.0.1/24我通过eth0两种方式分配IP地址。

A.192.168.0.1/24照常添加

# ip addr add 192.168.0.1/24 dev eth0
# ping -c 1 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.051 ms

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

B:添加192.168.0.1/32并添加/24路由

# ip addr add 192.168.0.1/32 dev eth0
                                        # 192.168.0.2 should not be reachable.
# ping -c 1 192.168.0.2
ping: connect: Network is unreachable
                                        # But after adding a route, it is.
# ip route add 192.168.0.0/24 dev eth0
# ping -c 1 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.053 ms

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

这是否意味着添加带前缀的 IP 地址只是添加带 /32 前缀的 IP 地址并随后添加路由的简写?也就是说,前缀长度没有任何意义,真正的工作是由路由条目完成的吗?

或者这两种方法在功能上有什么区别吗?


这是另一种情况:两个节点可以通过直接连接(中间没有路由器)相互访问,但不共享子网。

节点1:

# ip addr add 192.168.0.1/24 dev eth0
# ip route add 192.168.1.0/24 dev eth0
                                        # Finish the config on Node 2
# nc 192.168.1.1 8080 <<< "Message from 192.168.0.1"
Response from 192.168.1.1

节点2:

# ip addr add 192.168.1.1/24 dev eth0
# ip route add 192.168.0.0/24 dev eth0
                                        # Finish the config on Node 1
# nc -l 0.0.0.0 8080 <<< "Response from 192.168.1.1"
Message from 192.168.0.1

答案1

也就是说,前缀长度没有任何意义,真正的工作是由路由条目完成的吗?

子网掩码定义了您的子网,因此也定义了广播地址是什么,以及您的计算机回复哪些广播 IP 数据包和 ARP 请求。因此,获取 /32 地址并设置路由表与获取 /24 地址之间存在差异。

请注意,这根本不是 Linux 特有的;这就是 IPv4 的工作原理。

相关内容