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 的工作原理。