很多人学网络,第一关就被 IP 地址分类劝退:A 类、B 类、C 类、D 类、E 类是什么鬼?为什么 10.x 不能上公网?IPv6 为什么不用 A/B/C 了?fe80、ff02、2001:db8 又都是啥?
这篇一次讲清楚——从 IPv4 的历史分类,到 IPv6 现在的真实分配体系。
一、IPv4 的 A/B/C/D/E:历史课本里的分类
早期互联网很小,地址按"前几位二进制"硬分类,叫 Classful Addressing(有类地址)。
127.0.0.0/8 是环回,不算 A 类主机地址;0.0.0.0/8 是"本网络"。
问题很快就来了:
给一个大学发 A 类 = 1600 多万个地址,用不完
给一个公司发 B 类 = 6.5 万个地址,还是太多
C 类只有 254 个主机,又太小
路由表被几百万条碎前缀撑爆
于是 1993 年 CIDR(无类别域间路由,RFC 1519) 把 A/B/C 送进了博物馆。现在真实网络里写的是:
192.168.1.0/24
10.0.0.0/8
203.0.113.0/24不再问"你是哪类",只问"你的前缀多长"。
二、比 A/B/C 更重要的分类:公网 / 私网 / 特殊地址
工程上真正天天用的,不是 A/B/C,而是下面这套。
1. 公网地址(Public)
能在互联网路由表里跑。运营商、云厂商、企业从 RIR(APNIC、ARIN、RIPE…)拿到。比如电信 240e::/20、Cloudflare 1.1.1.1、Google 8.8.8.8。
2. 私有地址(RFC 1918)
内网随便用,路由器出公网必须 NAT:
你家路由器 192.168.1.1,公司服务器 10.10.10.10,都是私有地址。
3. 运营商级 NAT 地址(RFC 6598)
100.64.0.0/10不是你家内网,是运营商内部 CGN 用的。你家是 192.168.x.x,运营商再拿 100.64.x.x 套一层,最后才用公网 IP 出网。
4. 链路本地(APIPA)
169.254.0.0/16DHCP 挂了,Windows/Linux 自己给自己配的地址。同网线能通,出不了路由器。
5. 环回
127.0.0.0/8127.0.0.1 就是"我自己"。永远不出网卡。
6. 文档/测试地址
192.0.2.0/24
198.51.100.0/24
203.0.113.0/24RFC 5737 规定:别上公网,别分配真业务。写书、做 PPT、写配置示例用。
7. 组播
224.0.0.0/4OSPF、RIP、视频直播、DHCP 发现都靠它。不是给某台主机"独占"的。
8. 保留
240.0.0.0/4早期叫 Class E,现在基本锁着不分配。
三、IPv6 为什么不玩 A/B/C 了?
IPv6 地址 128 位,空间大到离谱(2^128 ≈ 3.4×10^38)。如果按 A/B/C 分:
A 类 = 前 1 位为 0 → 一半空间给一家?太离谱
随便怎么切,都浪费到让人心疼
所以 IPv6 彻底换了思路:
不按"网大网小"分类,按"这个地址是干啥的"分类。
四、IPv6 的顶层划分:IANA 只开放了 1/8
IANA 把 128 位空间切成几大块,原则很简单:
"目前只分配 2000::/3,其余先锁着。"
2000::/3 的意思是:前 3 位是 001,也就是所有 2 开头和 3 开头 的地址(2000:~3fff:)。
IANA 官方表里大致是这样:
记住:IPv6 的"分类"不是网大网小,而是这个地址能在哪用、跟谁说话。
五、公网单播:2000::/3 再切给五大区
IANA 把 2000::/3 里的大块发给 5 个 RIR(区域互联网注册机构):
所以你看到:
中国电信
240e::/20中国联通
2408:8000::/20中国移动
2409:8000::/20美国 Comcast
2607:fxxx::/32欧洲 Hetzner
2a01:4f8::/32
不是运营商随便选的,是 APNIC/RIPE/ARIN 发到哪就是哪。
为什么中国运营商是 240 开头?
因为 IANA 把亚太区大本营放在 2400::/12,中国三大运营商从 APNIC 领子块:
2400::/12 (APNIC 亚太总块)
├── 2408:… 中国联通
├── 2409:… 中国移动
├── 240e:… 中国电信
├── 240a:… 广电/铁通
└── 240c:… 教育网 CERNET2、百度前缀里 240 只是"亚太的姓",2408/2409/240e 是"中国三家运营商的名"。
同理:
北美 =
2600开头欧洲 =
2a00开头拉美 =
2800开头非洲 =
2c00开头
六、分配链:IANA → RIR → ISP → 你
IANA
└─ /12 ~/23 → RIR(APNIC/RIPE/ARIN…)
└─ /32 → 运营商(中国电信、NTT、Deutsche Telekom)
└─ /48 → 企业/校园
└─ /56 → 家庭宽带(常见)
└─ /64 → 一个 LAN(手机/WiFi/交换机网段)
└─ 64 位接口 ID → 具体某台手机/笔记本为什么 /64 是"神奇数"
IPv6 单播地址通常这么切:
| 前缀(前64位) | 接口ID(后64位) |后 64 位给主机自动生成:
早期:EUI-64(从 MAC 算出来)
现在:隐私扩展(每次随机生成,防追踪)
SLAAC(无状态自动配置)就靠"路由器发 /64 前缀 + 自己凑后 64 位"。比 /64 小的子网(/65、/96、/126)会让 SLAAC 出问题,所以终端网段几乎一律 /64。
各家拿到多少
七、IPv6 的三大通信类型
1. 单播 Unicast(一对一)
发给一个接口。常见子类:
链路本地 fe80::/10 是每台网卡上线就自动有的:
用于邻居发现 NDP、路由器发现
OSPFv3、BGP 邻居建立
没 DHCP 也能通信
路由器不转发,出不了二层链路
唯一本地 fd00::/8 是企业内网用的:
换运营商不用改内网地址
随机生成 Global ID,降低和别家公司撞车概率
边界路由器直接丢,不出公网
2. 组播 Multicast(一对多)
ff00::/8IPv6 没有广播,广播的活全给组播:
ff02::1 本链路所有节点
ff02::2 本链路所有路由器
ff02::5 OSPFv3 路由器
ff02::1:ff12:8844 被请求节点组播(NDP 用)"加群才收",比 IPv4 的 255.255.255.255 文明得多。
3. 任播 Anycast(一对最近一个)
任播没有独立前缀,它从单播空间里拿地址,配到多台机器上:
1.1.1.1
8.8.8.8
根 DNS 服务器
CDN 边缘节点
路由协议选"最近的一个"。地址长一样,物理上是北京/上海/法兰克福好多台。
八、特殊用途地址速查
九、一张"IPv6 分配全景"速查
整个 IPv6 空间 2^128
├─ 2000::/3 公网单播(只用这 1/8)
│ ├─ 2001:db8::/32 文档
│ ├─ 2400::/12 APNIC(中国/日本/澳洲)
│ │ ├─ 2408:… 中国联通
│ │ ├─ 2409:… 中国移动
│ │ ├─ 240e:… 中国电信
│ │ └─ 240c:… 教育网/百度
│ ├─ 2600::/12 ARIN(美国)
│ ├─ 2a00::/12 RIPE(欧洲)
│ ├─ 2800::/12 LACNIC
│ └─ 2c00::/12 AFRINIC
├─ fc00::/7 唯一本地(fd00::/8 常用)
├─ fe80::/10 链路本地
├─ ff00::/8 组播
└─ 其余 85% 保留/未来十、一句话收尾
IPv4 是"地址不够,所以分类 + NAT + 私有地址救场"——A/B/C 是历史妥协,CIDR 是打补丁。
IPv6 是"地址多到用不完,所以按作用域分层":公网归
2000::/3,内网归fd00,本地归fe80,群发归ff00,最近一个归任播。你手机里那个
240e:xxxx:xxxx:1:xxxx:xxxx:xxxx:xxxx不是随机长的,是"IANA → APNIC → 中国电信 → 你家 /56 → 路由器拆出 /64 → 手机自己凑后 64 位"五层叠出来的。