温馨提示:本文翻译自stackoverflow.com,查看原文请点击:linux - ip addr command setting incorrect subnet mask while assigning IP to an interface as compared to ifco
linux ubuntu ip static-ip-address ifconfig

linux - 与ifco相比,ip addr命令在为接口分配IP时设置了错误的子网掩码

发布于 2020-03-29 21:30:49

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

在命令及其各自的输出下方共享。

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命令的问题

我也理解克服此问题的机制是明确地,但是我不想现在就使用它们,而是想了解这种行为改变背后的原因。

查看更多

提问者
Krishna Oza
被浏览
118
Robin Thoni 2020-01-31 19:28

分配IPv4地址需要一个子网掩码。这是内核将用来确定目标IP是否在同一网络子网上,以及如何以及如何发送数据包的内核。

网络类未自动设置子网掩码的原因是,您可能正在使用某些“非标准”子网,例如10.12.8.0/21如果出于任何原因而不使用DHCP,则有责任了解网络配置,其中包括网络掩码。

最后但并非最不重要的ifconfig一点是,现在不赞成使用ipiproute2了一段时间,而您进行了实验,ip可能无法反映(完全相同)的行为ifconfig从测试中,可以看到子网掩码(如果未指定)ifconfigip具有不同的默认值。