Networking
為什麼要在 ip addr add 上指定 CIDR?
在執行
ip addr add
為網路介面分配地址時,您需要(或可以)指定介面的子網。因此,當您執行 ifconfig 時,您可以看到子網:enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::f36f:407:e015:2633 prefixlen 64 scopeid 0x20<link> ether 08:00:27:73:e9:14 txqueuelen 1000 (Ethernet) RX packets 105172 bytes 120417336 (120.4 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 27040 bytes 4403397 (4.4 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我不明白為什麼這是必要的?我不相信它是為了路由目的,因為路由表是用來做這個的,那麼它有什麼用呢?
編輯:更清楚一點:我知道網路遮罩用於了解直接連結到網路的地址範圍,即無需路由即可到達。但這是在路由表中設置的。所以我的問題是:介面的設置和路由表有什麼關係。
似乎它們沒有直接連接,請參見:
root@yoav-VirtualBox:/home/yoav# ip addr add 192.168.1.2/24 dev first root@yoav-VirtualBox:/home/yoav# ip addr 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: second@first: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether a2:a9:4f:c3:c5:be brd ff:ff:ff:ff:ff:ff 3: first@second: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether f2:38:32:ea:b4:8f brd ff:ff:ff:ff:ff:ff inet 192.168.1.2/24 scope global first valid_lft forever preferred_lft forever root@yoav-VirtualBox:/home/yoav# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface root@yoav-VirtualBox:/home/yoav#
在 Linux 上,為介面分配地址會添加基於此地址的*隱式LAN 路由。*此路由將使用分配給地址的 CIDR 遮罩(以及地址本身作為提示源地址):
# ip link set eth0 down # ip address flush dev eth0 # ip address add 192.0.2.3/24 dev eth0 # ip route
(沒什麼:路由要求介面也必須是 UP)
# ip link set eth0 up # ip route 192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.3
刪除地址總是會刪除由於缺少引用地址或地址定義的網路而無法存在的路由。
# ip address flush dev eth0 # ip route
(沒有什麼)
一些特殊的網路設置(通常涉及使用衝突地址的其他介面)可以通過使用 flag 來避免添加此隱式路由
noprefixroute
。NetworkManager 等工具經常設置此標誌,以便他們更好地控製配置路由的方式。# ip address add 192.0.2.3/24 dev eth0 noprefixroute # ip route
(沒有什麼)
此隱式 LAN 路由可能並非在所有作業系統上都存在,並且可能必須始終在其中一些作業系統上顯式設置。