我正在尝试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
命令的问题。
我也理解克服此问题的机制是明确地,但是我不想现在就使用它们,而是想了解这种行为改变背后的原因。
分配IPv4地址需要一个子网掩码。这是内核将用来确定目标IP是否在同一网络子网上,以及如何以及如何发送数据包的内核。
网络类未自动设置子网掩码的原因是,您可能正在使用某些“非标准”子网,例如10.12.8.0/21
。如果出于任何原因而不使用DHCP,则有责任了解网络配置,其中包括网络掩码。
最后但并非最不重要的ifconfig
一点是,现在不赞成使用ip
(iproute2
)了一段时间,而您进行了实验,ip
可能无法反映(完全相同)的行为ifconfig
。从测试中,可以看到子网掩码(如果未指定)ifconfig
并ip
具有不同的默认值。