IP 地址与地址空间

同一个局域网里靠 MAC 地址就能找到人,但互联网上有几十亿台设备,不可能让每台路由器背下全球所有网卡的 MAC 地址。

因此跨网络通信需要一套带层次、能按网段聚合的逻辑地址,也就是 IP 地址(Internet Protocol Address)。路由器不用认识每一块网卡,只要看一眼目的 IP 的前缀属于哪个网段、往哪个方向走,就能把 IP 数据包(IP Packet) 一跳跳传过去。

IPv4 地址

常见的 IPv4 地址长 32 位(4 字节),分成 4 段 8 位二进制,每段转成十进制是 0~255,中间用点隔开,叫点分十进制(比如 192.168.12.170)。如果看到 192.168.12.300,一眼就能看出是错的,因为单段不可能超过 255。

每一段 8 位二进制从左到右的位权依次是 128、64、32、16、8、4、2、1。比如把 170 拆成二进制:

位权      128   64   32   16    8    4    2    1
二进制      1    0    1    0    1    0    1    0   →  128 + 32 + 8 + 2 = 170

把 192.168.12.170 四段全展开成 32 位二进制就是:

192       .168       .12        .170
11000000  .10101000  .00001100  .10101010

查看本机 IP

在 Linux 终端里运行 ip -br address 可以快速查看网卡地址:

crow@laptop:~$ ip -br address
lo      UNKNOWN  127.0.0.1/8 ::1/128
enp1s0  UP       192.168.12.170/26 fe80::10/64
  • lo 是本地回环接口,127.0.0.1(IPv6 为 ::1)永远代表本机自己;
  • enp1s0 是有线网卡,后面的 /26 表示子网前缀长度(前 26 位是网络部分)。

在 Windows 下则可以运行 ipconfig /all 查看当前联网适配器的 IPv4 地址、子网掩码、默认网关和 DNS 服务器:

C:\Users\crow> ipconfig /all

无线局域网适配器 WLAN:
   描述. . . . . . . . . . . . . . . : Intel(R) Wi-Fi 6 AX201 160MHz
   物理地址. . . . . . . . . . . . . : A8-59-5F-**-**-**
   DHCP 已启用 . . . . . . . . . . . : 是
   IPv4 地址 . . . . . . . . . . . . : 192.168.124.3(首选)
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.124.1
   DNS 服务器  . . . . . . . . . . . : 223.5.5.5

私有地址与公网地址

在家里、学校或办公室连网时,电脑拿到的 IP 往往是 192.168.x.x 或 10.x.x.x。根据 RFC 1918,有三段 IPv4 地址专门留给局域网内部作为私有地址(Private Address):

私有地址范围CIDR 简写常见场景
10.0.0.0 ~ 10.255.255.25510.0.0.0/8大型企业内网、校园网、云 VPC
172.16.0.0 ~ 172.31.255.255172.16.0.0/12中型企业网、Docker 容器网络
192.168.0.0 ~ 192.168.255.255192.168.0.0/16家用路由器、小型办公局域网

私有地址可以在不同的局域网里重复使用——你家里的 192.168.1.10 和隔壁邻居家里的 192.168.1.10 互不冲突,因为公网骨干路由器不会直接转发私有地址。当内网设备要访问互联网时,家用路由器会通过 NAT(网络地址转换) 把私有 IP 换成运营商分配的公网 IP。

注意

注意 172 开头的地址不全是私有地址:只有第二段在 16~31 之间(172.16.0.0 ~ 172.31.255.255)才是私有地址,像 172.32.x.x 已经是正常的公网地址了。

识别私有地址

练习

下列哪一个地址不在上表的三段 IPv4 私有地址中?

A. 10.24.6.90 B. 172.20.4.8 C. 192.168.12.170 D. 172.32.4.8

提交选项字母。这里只判断范围,不判断地址上有没有可访问的服务。

提交答案

题解 Hint

公网出口与 IP 属地

平时刷社交平台看到的“IP 属地:广东”,是因为网站服务器收到请求时能直接看到你家路由器的公网出口 IP,再去查 GeoIP 地址归属库,就能知道这个公网 IP 段属于哪个省市运营商(它不是手机 GPS 定位,精确不到街道或小区)。打开 MyIP.la 这类网站看到的公网 IP,跟本机网卡上的 192.168.x.x 私有 IP 不一样,是完全正常的。

IP 查询网站显示的一次来源地址和地区结果,完整 IPv4 已遮挡

IPv6 地址

32 位的 IPv4 最多只有约 42.9 亿个地址,早就不够分了。IPv6 把地址扩到了 128 位,写成 8 组 4 位十六进制数:

2001:0db8:0000:0000:0000:0000:0000:0010

写起来太长,所以有两条简写规则:每组开头的 0 可以省掉(0010 写成 10),连续的全零组可以用双冒号 :: 代替(整个地址里 :: 最多只能用一次)。于是上面这串地址可以简写成:

2001:db8::10

IPv6 里,::1 是本地回环地址(相当于 127.0.0.1),fe80:: 开头的是只在当前直连链路上有效的链路本地地址(Link-Local)。