张彤
张彤
Published on 2025-02-03 / 5 Visits
0
0

CIDR表示法

常见的特殊地址

作为数据库运维人员,常常要和防火墙策略打交道,比如限制不同用户的客服端登录地址。

比如pg_hba.conf中存在以下条目

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             127.0.0.1/32            trust
host    all             postgres        20.19.128.0/24          md5

很明显上面的防火墙策略是对于本地环回地址(Loopback Address)登录全部免密登录。

而postgres账户的登录地址被限制在了20.19.128.020.19.128.255这个IPV4网段中。

环回地址

Loopback 直译为环回,即数据从本机发出后立即“绕回”到本机,不经过物理网络设备(如网卡、路由器)

操作系统会为回环地址创建一个虚拟网络接口(如 lo),所有发送到 127.0.0.1 的数据包会被直接交给本机的网络协议栈处理,而不是发送到外部网络。

需要注意的是,环回地址和本地IP地址不是一回事。如 192.168.1.100就是本地IP地址,是物理或虚拟网卡(如以太网、Wi-Fi)分配的真实地址,数据通过物理网络传输。我们常用的localhost127.0.0.1也不是一回事,localhost是域名,解析后成为 127.0.0.1,或者IPV6表示的::1。两者的功能相同,但是localhost 依赖 DNS 解析,而后者则直接指向本机。

IPv6 的回环地址是 ::1/128,功能与 IPv4127.0.0.1 完全相同。

IPv4 早期设计中,127.0.0.0/8 整个 A 类地址段被保留给回环地址。尽管大部分地址未实际使用,但所有 127.x.x.x 的地址都属于回环地址。

广播地址

什么是广播地址

广播地址(Broadcast Address) 是网络中用于 向同一子网内所有设备发送数据包 的特殊 IP 地址。当数据包发送到广播地址时,子网内的所有设备都会接收并处理该数据包。广播地址是 IPv4 网络中的核心概念,主要用于 网络协议通信设备发现

在 IPv4 中,广播地址是子网中最后一个可用的 IP 地址。例如:

  • 子网 192.168.1.0/24(子网掩码 255.255.255.0)的广播地址是 192.168.1.255

  • 子网 10.0.16.0/22(子网掩码 255.255.252.0)的广播地址是 10.0.19.255

广播地址是子网中一个 明确预留的特殊地址,所有设备都约定俗成地识别它。

广播地址的功能

广播地址是许多网络协议正常运行的关键,比如:

  • ARP(地址解析协议):通过广播查询目标设备的 MAC 地址

    谁的 IP192.168.1.2?请告诉我你的 MAC 地址

  • DHCP(动态主机配置协议):客户端首次接入网络时,通过广播请求 IP 地址

    我是新设备,请 DHCP 服务器给我分配一个 IP

  • 路由协议:某些路由协议(如 OSPFRIP)使用广播或组播来交换路由信息。

广播地址简化了通讯流程

  • 单播(Unicast):数据包发送给单个目标设备(1对1)。

  • 组播(Multicast):数据包发送给一组设备(1对多)。

  • 广播(Broadcast):数据包发送给子网内所有设备(1对所有)。

广播地址提高了网络管理效率

  • 设备发现:管理员可以通过广播快速发现子网内的设备(如网络扫描工具)。

  • 故障排查:广播测试(如 ping 广播地址)可验证子网内设备的连通性。

网络地址

什么是网络地址

网络地址(Network Address) 是用于标识一个子网的唯一地址,它是子网中第一个可用的 IP 地址。网络地址的作用类似于子网的身份证,用于表示一个逻辑上的网络段。所有属于该子网的设备共享相同的网络地址,但拥有唯一的主机地址。

在 IPv4 子网中,网络地址是子网范围内的第一个 IP 地址。例如:

  • 子网 192.168.1.0/24(子网掩码 255.255.255.0)的网络地址是 192.168.1.0

  • 子网 10.0.16.0/22(子网掩码 255.255.252.0)的网络地址是 10.0.16.0

网络地址的功能

  1. 标识子网

    网络地址是子网的唯一标识符。

    • 当路由器收到一个数据包时,会根据目标 IP 的网络地址判断该数据包属于哪个子网,从而决定如何转发。

    • 如果没有网络地址,设备无法区分不同子网(例如 192.168.1.0/24192.168.2.0/24 会被视为同一网络)。

  2. 子网划分的基础

    在 CIDR(无类别域间路由)中,网络地址和前缀长度(如 /24)共同定义了子网的边界。

    • 10.0.16.0/22 表示子网从 10.0.16.0 开始,覆盖到 10.0.19.255。所有主机地址必须属于该网络地址定义的范围。

  3. 协议和设备的依赖

    路由表:路由器通过存储网络地址(而非单个主机地址)来简化路由决策。 例如,路由表中可能有一条记录:10.0.16.0/22 via 192.168.1.1

    网络协议:某些协议(如 OSPF、BGP)依赖网络地址交换路由信息。

CIDR

什么是CIDR

回到本文的主题,CIDR无类别域间路由,Classless Inter-Domain Routing)是一种用于 IP 地址分配和子网划分 的现代方法。

它取代了传统的基于类(A/B/C类)的地址分配方式,大幅提高了 IP 地址的利用率。

CIDR 表示法的格式

CIDR 的表示形式为:IP地址/前缀长度,例如:

  • 192.168.1.0/24

  • 10.0.16.9/22

  • 2001:db8::/32(IPv6)

可以看到,这种表示方法由IP地址和前缀长度两部分构成。

前缀长度(Prefix Length)表示 网络部分的位数(二进制形式中从左到右连续的 1 的数量)。

  • 例如:/24 表示前 24 位是网络地址,剩余 8 位是主机地址。

    可以理解为2^8=256个地址,但是可分配的地址需要排除全 0 的网络地址和全 1 的广播地址,所以256-2=254

CIDR 的核心作用

取代传统的 IP 分类(A/B/C 类)

传统分类的局限性 A 类(/8)、B 类(/16)、C 类(/24)地址划分固定,导致大量 IP 浪费。例如:一个公司需要 500 个 IP,但必须分配一个 B 类地址 /16,浪费 65000+ IP

CIDR 的灵活性 允许任意长度的前缀(如 /23/28),按需分配地址,减少浪费。

支持路由聚合(Route Summarization)

将多个连续的子网合并为一个更大的 CIDR 块,简化路由表。例如:将 192.168.0.0/24192.168.3.0/24 合并为 192.168.0.0/22

CIDR 的计算方法

  1. 将 IP 地址转换为二进制

    10.0.16.9/22 为例:

    IPv4 地址 10.0.16.9 → 二进制:

    00001010.00000000.00010000.00001001
  2. 提取网络部分

    前缀长度为 22,表示前 22 位是网络地址:

    00001010.00000000.000100|00.00001001
    ↑↑↑↑↑↑↑↑ ↑↑↑↑↑↑↑↑ ↑↑↑↑↑↑
    (前 22 位是网络部分)
  3. 计算主机部分

    剩余位数 = 32 - 22 = 10 位 → 可分配的主机数量为 2^{10} - 2 = 1022 个

    • 减 2 是因为排除全 0 的网络地址和全 1 的广播地址

  4. 确定地址范围

    网络地址10.0.16.0

    广播地址10.0.19.255

    可用主机范围10.0.16.110.0.19.254

这么常见的计算,Linux有相关的计算命令ipcalc

[postgres@zhangtongLab data]$ ipcalc 20.19.128.0/24
Network:    20.19.128.0/24
Netmask:    255.255.255.0 = 24
Broadcast:  20.19.128.255
​
Address space:  Internet
Address class:  Class A
HostMin:    20.19.128.1
HostMax:    20.19.128.254
Hosts/Net:  254
​
[postgres@zhangtongLab data]$ ipcalc fe80::5054:ff:fecd:4401/64
Full Address:   fe80:0000:0000:0000:5054:00ff:fecd:4401
Address:    fe80::5054:ff:fecd:4401
Full Network:   fe80:0000:0000:0000:0000:0000:0000:0000/64
Network:    fe80::/64
Netmask:    ffff:ffff:ffff:ffff:: = 64
​
Address space:  Link-Scoped Unicast
HostMin:    fe80::
HostMax:    fe80::ffff:ffff:ffff:ffff
Hosts/Net:  2^(64) = 18446744073709551616

CIDR 与子网掩码的关系

子网掩码(Subnet Mask): 用连续的 1 表示网络部分,0 表示主机部分。 例如:/24 → 子网掩码 255.255.255.0

转换方法

  • /24255.255.255.0

  • /22255.255.252.0

  • /28255.255.255.240

IPV4子网类型速查

Prefix size

Network mask

Usable hosts per subnet

/1

128.0.0.0

2,147,483,646

/2

192.0.0.0

1,073,741,822

/3

224.0.0.0

536,870,910

/4

240.0.0.0

268,435,454

/5

248.0.0.0

134,217,726

/6

252.0.0.0

67,108,862

/7

254.0.0.0

33,554,430

Class A

/8

255.0.0.0

16,777,214

/9

255.128.0.0

8,388,606

/10

255.192.0.0

4,194,302

/11

255.224.0.0

2,097,150

/12

255.240.0.0

1,048,574

/13

255.248.0.0

524,286

/14

255.252.0.0

262,142

/15

255.254.0.0

131,070

Class B

/16

255.255.0.0

65,534

/17

255.255.128.0

32,766

/18

255.255.192.0

16,382

/19

255.255.224.0

8,190

/20

255.255.240.0

4,094

/21

255.255.248.0

2,046

/22

255.255.252.0

1,022

/23

255.255.254.0

510

Class C

/24

255.255.255.0

254

/25

255.255.255.128

126

/26

255.255.255.192

62

/27

255.255.255.224

30

/28

255.255.255.240

14

/29

255.255.255.248

6

/30

255.255.255.252

2

/31

255.255.255.254

0

/32

255.255.255.255

0



Comment