IP协议基础:IP地址分类、子网掩码、CIDR表示法
聊到HTTP,很多人会直接跳到应用层。但我得说,不理解IP层,你看到的HTTP就像空中楼阁。IP协议是整个互联网的基石,它负责把数据包从源主机送到目标主机。今天我们就来拆解IP协议最核心的三个概念:地址分类、子网掩码和CIDR。
IP地址是什么?
IP地址,说白了就是网络设备的门牌号。IPv4地址由32位二进制组成,通常写成点分十进制,比如 192.168.1.1。这32位被分成网络部分和主机部分。网络部分标识你在哪个网段,主机部分标识你在该网段里的具体位置。
核心要点:IP地址 = 网络号 + 主机号。网络号相同的主机,在同一个广播域内可以直接通信。
IP地址分类:A、B、C、D、E
早期设计IP地址时,人们想了个简单的办法:按前几位固定值来划分网络规模。这就是所谓的"分类编址"(Classful Addressing)。
| 类别 | 前几位 | 地址范围 | 默认子网掩码 | 网络数 | 每网络主机数 |
|---|---|---|---|---|---|
| A类 | 0 | 1.0.0.0 – 126.255.255.255 | 255.0.0.0 | 126 | 16,777,214 |
| B类 | 10 | 128.0.0.0 – 191.255.255.255 | 255.255.0.0 | 16,384 | 65,534 |
| C类 | 110 | 192.0.0.0 – 223.255.255.255 | 255.255.255.0 | 2,097,152 | 254 |
| D类 | 1110 | 224.0.0.0 – 239.255.255.255 | 组播地址 | — | — |
| E类 | 1111 | 240.0.0.0 – 255.255.255.255 | 保留/实验 | — | — |
你看,A类网络能容纳1600多万台主机,C类只有254台。这种划分太死板了。我记得早年做校园网规划时,申请到一个B类地址,结果一个网段里就放了200台机器,剩下6万多个地址全浪费了。这就是分类编址最大的问题——地址利用率极低。
注意:127.0.0.0/8是环回地址段,用于本地测试,不属于任何类别。0.0.0.0/8表示"本网络",通常用于默认路由。
子网掩码:划清网络与主机的边界
子网掩码的作用,就是告诉路由器:这32位里,前多少位是网络号,后多少位是主机号。它也是一个32位的二进制数,网络部分全为1,主机部分全为0。
举个例子:255.255.255.0 的二进制是 11111111.11111111.11111111.00000000。前24位是网络号,后8位是主机号。把IP地址和子网掩码做"与"运算,就能得到网络地址。
IP地址: 192.168.1.100 → 11000000.10101000.00000001.01100100
子网掩码: 255.255.255.0 → 11111111.11111111.11111111.00000000
与运算结果: 11000000.10101000.00000001.00000000
网络地址: 192.168.1.0
我个人习惯用这个口诀:掩码为1的位是网络位,掩码为0的位是主机位。简单粗暴,不容易出错。
避坑指南:我曾经在配置ACL时,把子网掩码写反了,把主机位当成了网络位。结果ACL匹配了半个互联网的流量,差点把核心交换机打挂。从那以后,我每次写掩码都会先在心里默念一遍二进制。
CIDR表示法:打破分类的枷锁
分类编址浪费地址的问题越来越严重。到了1993年,IETF推出了CIDR(无类别域间路由)。CIDR的核心思想是:不再按固定类别划分,而是用前缀长度灵活指定网络位。
CIDR的写法很简单:在IP地址后面加一个斜杠,跟上网络位的位数。比如 192.168.1.0/24,表示前24位是网络号,后8位是主机号。这跟子网掩码 255.255.255.0 是一个意思,但写起来更简洁。
CIDR的好处很明显:
- 灵活划分:你可以用/25、/26、/27等任意长度,不再受A/B/C类限制
- 路由聚合:多条路由可以合并成一条,减少路由表条目
- 节省地址:按需分配,避免浪费
举个例子,一个公司需要500个IP地址。用分类编址,你只能申请一个B类(6万多个地址,浪费99%以上)。用CIDR,你可以申请一个/23(512个地址),刚刚好。
CIDR计算公式:
- 主机数 = 2^(32 - 前缀长度) - 2
- 网络地址 = IP地址 & 子网掩码
- 广播地址 = 网络地址 + 主机数 + 1
减2是因为要去掉网络地址和广播地址。
常见CIDR前缀速查表
| 前缀长度 | 子网掩码 | 可用主机数 | 适用场景 |
|---|---|---|---|
| /30 | 255.255.255.252 | 2 | 点对点链路 |
| /29 | 255.255.255.248 | 6 | 小型网络 |
| /28 | 255.255.255.240 | 14 | 小型网络 |
| /24 | 255.255.255.0 | 254 | 标准C类网段 |
| /23 | 255.255.254.0 | 510 | 中型网络 |
| /22 | 255.255.252.0 | 1022 | 中型网络 |
| /16 | 255.255.0.0 | 65534 | 大型网络 |
你想想看,如果没有CIDR,互联网的路由表早就爆炸了。我记得2010年左右,全球路由表条目数突破了30万条。要是还用分类编址,这个数字恐怕得翻几倍。
IP地址分类与CIDR的对比
| 特性 | 分类编址 | CIDR |
|---|---|---|
| 划分方式 | 固定前缀(/8、/16、/24) | 任意前缀长度 |
| 地址利用率 | 低(大量浪费) | 高(按需分配) |
| 路由聚合 | 不支持 | 支持 |
| 路由表大小 | 大 | 小 |
| 灵活性 | 差 | 强 |
IP地址分类与CIDR结构图
下面这张图展示了从分类编址到CIDR的演进,以及它们之间的关系。
实际应用中的注意事项
嗯,这里要注意几个容易踩坑的地方:
- 全0和全1的主机号不能用:全0代表网络地址,全1代表广播地址。比如
192.168.1.0/24中,192.168.1.0是网络地址,192.168.1.255是广播地址,都不能分配给主机。 - 私有地址段:RFC 1918规定了三个私有地址段,用于内网通信,不会在互联网上路由。分别是
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。我建议你在做内网规划时,优先用10.0.0.0/8,地址空间大,不容易冲突。 - 子网划分时注意增长:我曾经给一个项目做子网规划,按当时的需求分了/28的网段。结果半年后业务扩张,每个网段都不够用了,只能重新做VLAN规划,折腾了好几个通宵。所以,子网划分时一定要留出20%-30%的余量。
个人经验:我现在做网络规划时,习惯先用CIDR算出最小需要的地址数,然后向上取整到2的幂次,再额外加一个幂次作为缓冲。比如需要300个地址,最小是/23(512个),我会直接给/22(1024个)。多出来的地址,以后扩展时就知道有多香了。
好了,IP地址分类、子网掩码和CIDR就讲到这里。这些概念是理解IP层的基础,也是后续学习路由、NAT、VLAN等技术的基石。你想想看,没有这些基础,HTTP请求怎么找到目标服务器?下一层一层往上走,每一步都离不开IP协议的支持。