Networking

為什麼要在 ip addr add 上指定 CIDR?

  • December 26, 2021

在執行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 路由可能並非在所有作業系統上都存在,並且可能必須始終在其中一些作業系統上顯式設置。

引用自:https://unix.stackexchange.com/questions/682851