与 ifconfig 命令相比,ip addr 命令在将 IP 分配给接口时设置了不正确的子网掩码

ip addr command setting incorrect subnet mask while assigning IP to an interface as compared to ifconfig command

我正在尝试使用 ip addr 命令将 IP 地址设置到我的 Ubuntu 18.04 机器上的接口,但是 ip addr 命令将子网掩码设置为 255.255.255.255 Class C IP 地址,其中 ifconfig 命令将相同 Class C IP 地址的子网掩码设置为 255.255.255.0

在下面分享命令及其各自的输出。

ip addr 命令及其输出。

nvidia@tegra-ubuntu:~$ sudo ip addr flush dev hv0                                                                                                                                                                               
nvidia@tegra-ubuntu:~$ sudo ip add 192.168.0.2 dev hv0
nvidia@tegra-ubuntu:~$ ifconfig
hv0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.2  netmask 255.255.255.255  broadcast 0.0.0.0
        ether 0a:86:4c:f8:4f:01  txqueuelen 1000  (Ethernet)
        RX packets 867  bytes 77026 (77.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 756  bytes 71072 (71.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 5  

ifconfig 命令及其输出。

nvidia@tegra-ubuntu:~$ sudo ip addr flush dev hv0
nvidia@tegra-ubuntu:~$ sudo ifconfig hv0 192.168.0.2 up                                                                                                                                                                                       
nvidia@tegra-ubuntu:~$ ifconfig
hv0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.2  netmask 255.255.255.0  broadcast 192.168.0.255
        ether 0a:86:4c:f8:4f:01  txqueuelen 1000  (Ethernet)
        RX packets 867  bytes 77026 (77.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 756  bytes 71072 (71.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 5  

我想了解这是预期的行为还是 ip addr 命令的问题。

我也明白克服这个问题的机制是明确的,但是我不想像现在一样使用它们,并且想了解这种行为变化背后的原因。

分配 IPv4 地址需要子网掩码。这是内核将用来确定目标 IP 是否在同一网络子网上的内容,从而确定发送数据包的方式和位置。

网络 class 未自动设置子网掩码的原因是您可能正在使用某些 "non-standard" 个子网,例如 10.12.8.0/21。如果出于某种原因您没有使用 DHCP,那么您有责任了解网络配置,其中包括网络掩码。

最后但并非最不重要的一点是,ifconfig 现在已弃用一段时间,取而代之的是 ip (iproute2),并且您进行了实验,ip 可能不会反映 (确切)与 ifconfig 相同的行为。从您的测试中,您可以看到 ifconfigip 在未指定子网掩码时具有不同的默认值。