技术学院 / IP 与网络基础

IP 与网络基础

入门

从 IP 地址、子网掩码讲到 DNS 解析与 NAT,配套本站工具边学边练。

6 章 · 17 节 · 约 10 分钟 · 更新于 2026-09-28 · 免费

章节
01 IP 地址与二进制表示 3 小节
02 子网划分与 CIDR 1 小节
03 公网 IP 与内网 IP 2 小节
04 DNS 是怎么解析的 2 小节
05 Ping 与丢包排查 1 小节
06 NAT 与端口映射 2 小节

IP 地址与二进制表示

IPv4 地址本质上就是一个 32 位的整数,只是为了给人看,才按每 8 位一组切成四段十进制、中间打点,这种写法叫点分十进制。

以 192.168.1.1 为例:

段十进制二进制
第 1 段19211000000
第 2 段16810101000
第 3 段100000001
第 4 段100000001

每段是 8 位,取值范围 0–255,所以 192.168.1.256 这种写法根本不是一个合法地址。搞不清十进制和二进制的对应关系时,用进制计算器挨个换一遍,看几次就有感觉了。

地址与整数互转

把四段拼起来当一个整数看:

text
192 × 256³ + 168 × 256² + 1 × 256 + 1 = 3232235777

数据库里存 IP 经常用这个整数形式:4 字节比 15 字节的字符串省空间,而且整数能直接比大小,做「这个 IP 落在哪个段里」的区间查询时可以走索引。MySQL 内置了转换函数:

sql
SELECT INET_ATON('192.168.1.1');   -- 3232235777
SELECT INET_NTOA(3232235777);      -- 192.168.1.1
 
-- 典型用法:用整数区间存 IP 归属库,查询时一次范围扫描
SELECT * FROM ip_region
 WHERE start_int <= INET_ATON('192.168.1.1')
   AND end_int   >= INET_ATON('192.168.1.1')
 LIMIT 1;

手算容易错位,直接用 IP / 数字互转。

IPv6 怎么读

IPv6 是 128 位,写成 8 组、每组 4 位十六进制,组间用冒号分隔。两条简写规则:每组的前导零可以省,连续的全零组可以用 :: 整体省掉,但 :: 在一个地址里只能出现一次(出现两次就没法还原到底各省了几组)。

text
完整:2001:0db8:0000:0000:0000:ff00:0042:8329
压缩:2001:db8::ff00:42:8329

判断一个 IPv6 写法合不合法、压缩和展开的对应关系,交给 IPv6 检测与计算器。

几个不能当普通地址用的段

地址段含义
0.0.0.0/8本网络,0.0.0.0 在服务端表示监听所有网卡
127.0.0.0/8环回,包不出网卡,127.0.0.1 就是本机
169.254.0.0/16链路本地,拿到这个地址说明 DHCP 没要到 IP
224.0.0.0/4组播
255.255.255.255受限广播

想知道自己此刻的出口地址,打开我的 IP;想查任意一个地址属于哪个国家、哪家运营商,用 IP 地址查询。

子网划分与 CIDR

子网掩码的作用只有一个:划出一条线,线左边是网络号,右边是主机号。掩码写成二进制一定是「连续的 1 后面跟连续的 0」,所以干脆只记 1 的个数,写成 /24 这种形式,这就是 CIDR。

前缀掩码地址总数可用主机常见用途
/30255.255.255.25242点对点链路
/29255.255.255.24886一小撮服务器
/28255.255.255.2401614小型 VPC 子网
/24255.255.255.0256254一个普通局域网
/16255.255.0.06553665534一个中型内网
/8255.0.0.01677721616777214一整个 A 类段

可用主机数是 2^(32-n) - 2,减掉的两个是网络地址(主机位全 0)和广播地址(主机位全 1)。两个例外:/32 表示单台主机,常见于路由条目和防火墙白名单;/31 在点对点链路上按 RFC 3021 两个地址都能用。

手算三件事

text
网络地址 = IP AND 掩码
广播地址 = 网络地址 OR (NOT 掩码)
是否同网段 = 两个 IP 分别 AND 掩码,结果相同即同段

拿 192.168.10.0/26 举例,/26 意味着主机位只剩 6 位,每个子网 64 个地址:

子网网络地址可用范围广播地址
1192.168.10.0.1 – .62192.168.10.63
2192.168.10.64.65 – .126192.168.10.127
3192.168.10.128.129 – .190192.168.10.191
4192.168.10.192.193 – .254192.168.10.255

「同网段」这件事是排障的高频考点:同段内主机直接二层通信,不同段必须走网关。机器配了 IP 却只能 ping 通一半的地址,十有八九是掩码写错,把本该同段的机器劈成了两段。

掩码、网络地址、可用范围一次算全,用 IP 地址、子网掩码在线计算;要把一个 CIDR 展开成起止 IP,或者反过来把一段起止 IP 合并成最少的几条 CIDR,用 IP 段与 CIDR 互转——写防火墙规则和 nginx allow/deny 时特别省事。

公网 IP 与内网 IP

公网地址全球唯一,由 IANA 分给各大区域注册局(亚太是 APNIC),再往下分到运营商和机构。私有地址则是留给局域网自己用的,任何人都可以在自己网里重复使用,路由器不会把它们往公网转发。

私有段前缀备注
10.0.0.0/8/8大型内网、云上 VPC 最常用
172.16.0.0/12/12范围是 172.16 – 172.31,不是 172.0 – 172.255
192.168.0.0/16/16家用路由器默认段
100.64.0.0/10/10运营商级 NAT(CGNAT)专用,不是给你用的

172.16.0.0/12 的边界是最容易记错的一个:172.15.x.x 和 172.32.x.x 都是公网地址。

判断自己有没有公网 IP

登录路由器看 WAN 口地址,再对照我的 IP 显示的出口地址:

  • 两者一致 → 你拿到了公网 IP,端口映射能做。
  • WAN 口是 100.64.x.x / 10.x.x.x / 192.168.x.x,出口却是另一个地址 → 运营商在你上面又套了一层 NAT,端口映射做了也没用,只能打电话申请公网 IP,或者改用内网穿透。

顺手确认一下对外服务到底通不通,用端口检测或网站连通性检测从外面回头探一次,比在本机 curl 127.0.0.1 靠谱得多。

IPv6 的对应概念

段对应 IPv4 里的
fe80::/10链路本地,相当于 169.254.0.0/16
fc00::/7唯一本地地址(ULA),相当于私有段
2000::/3全球单播,相当于公网地址
::1环回,相当于 127.0.0.1

IPv6 地址多到不需要 NAT,内网机器直接拿全球地址,能不能被访问改由防火墙决定——这也意味着默认放行的话内网机器是直接暴露在公网上的,别拿「反正在内网」当安全假设。

DNS 是怎么解析的

浏览器里敲一个域名到拿到 IP,中间按这个顺序找:

  1. 浏览器自己的 DNS 缓存;
  2. 操作系统缓存,以及 hosts 文件(hosts 的优先级高于 DNS 查询,本地调试常用它把域名指到测试机);
  3. 本地 DNS(递归解析器),通常是运营商下发的,也可能被你改成 223.5.5.5、119.29.29.29、8.8.8.8;
  4. 递归解析器如果没有缓存,就从根服务器问起:根告诉它 .com 的服务器在哪 → .com 告诉它这个域名的权威服务器在哪 → 权威服务器给出最终记录。

常用记录类型

类型作用备注
A域名 → IPv4最常用
AAAA域名 → IPv6
CNAME域名 → 另一个域名同名下不能再有别的记录,所以根域名一般用不了
MX收信服务器带优先级,数字小的优先
TXT任意文本SPF、DKIM、各种域名所有权验证
NS该域交给哪些权威服务器换 DNS 服务商改的就是它
SOA该域的起始授权信息含序列号与各种超时
CAA限定哪些 CA 能给该域签证书签不出证书时记得查这条
PTRIP → 域名反向解析,自建邮件服务器必须配

每条记录都带 TTL,决定下游能缓存多久。改解析之前先把 TTL 调小(比如 300 秒),等旧 TTL 过期、新值全网生效之后再调回去,能把切换窗口从几小时压到几分钟。

命令行怎么查

bash
# 只要结果
dig www.ip438.com A +short
 
# 看完整递归路径:从根一路问下来,能定位是哪一级出了问题
dig www.ip438.com +trace
 
# 指定解析器查 MX,用来对比不同 DNS 的返回是否一致
dig @223.5.5.5 ip438.com MX
 
# Windows
nslookup -type=txt ip438.com 8.8.8.8
ipconfig /flushdns

站内对应的工具:DNS 记录在线查询一次看全各类记录;全国 DNS 解析分布看各地运营商解析到的 IP 是否一致,切换 IP 或排查 CDN 调度时必看;DNS 污染与解析一致性检测用来判断是自己没生效还是被中间环节改了;DNS 出口检测看你实际用的是哪家解析器。

Ping 与丢包排查

ping 发的是 ICMP Echo Request,对方回 Echo Reply,用来判断「能不能通」和「来回要多久」。

bash
ping -c 10 www.ip438.com
text
64 bytes from 1.2.3.4: icmp_seq=1 ttl=52 time=12.3 ms
...
10 packets transmitted, 10 received, 0% packet loss, time 9012ms
rtt min/avg/max/mdev = 11.802/12.415/13.907/0.612 ms

要看的就三个数:

  • packet loss 丢包率。公网上偶发 1% 以内可以忍,持续超过 5% 就要查了。
  • avg 平均往返时延。同城几毫秒,跨省二三十毫秒,跨国一两百毫秒都算正常。
  • mdev(Windows 上看 max 和 min 的差)抖动。平均值好看但抖动很大,语音、游戏、SSH 一样会卡。

回包里的 ttl=52 还能反推对方系统:初始 TTL 常见值是 Linux/macOS 64、Windows 128、网络设备 255,64 - 52 = 12 说明中间过了 12 跳。

逐段定位

丢包要按「由近及远」的顺序切段,别一上来就怀疑对方:

bash
ping -c 20 192.168.1.1        # 1. 网关,这里丢包就是本地网络/网线/无线的问题
ping -c 20 223.5.5.5          # 2. 公共地址,能到说明出口正常
mtr -r -c 50 www.ip438.com    # 3. 一次性看每一跳的丢包与延迟

看 mtr/路由追踪结果有个必须知道的坑:中间某一跳丢包、但后面的跳和终点都不丢,那是该跳限速 ICMP 的正常现象,不是故障。只有「从某一跳开始一直丢到终点」才说明问题出在那里。

还有一条:对方不回 ping 不等于不通。很多云主机默认在安全组里禁了 ICMP,这时候要用 TCP 去敲端口才准。

站内工具:Ping 在线检测 多地发包,持续 Ping 与延迟曲线 盯一段时间的抖动,路由追踪 看逐跳路径,TCPing 在线检测 用于禁了 ICMP 的目标。

NAT 与端口映射

家里那么多设备共用一个公网 IP,靠的就是 NAT。出方向叫 SNAT:路由器把内网包的源地址和端口换成「公网 IP + 一个临时端口」,并在会话表里记下这条映射;回包到达时按表还原,送回对应的内网机器。

text
内网 192.168.1.20:51314  ──SNAT──▶  公网 1.2.3.4:40021  ──▶  目标 93.184.216.34:443
                         ◀──还原──                        ◀──

会话表是按连接建立的,所以外网无法主动连进来——它不知道该给哪台内网机器。要让外面能访问,就得手动加一条反向规则,也就是端口映射(DNAT)。

端口映射的四个前提

  1. 路由器 WAN 口拿到的是公网地址(见上一章的判断方法),否则做了也不通;
  2. 内网目标机器的 IP 要固定,用路由器的 DHCP 静态绑定,别让它重启后换地址;
  3. 内网服务监听的是 0.0.0.0 而不是 127.0.0.1,否则只有本机能连;
  4. 目标机器自己的防火墙也要放行(ufw allow、firewalld、Windows 防火墙、云安全组,缺一不可)。

对外端口尽量别用默认值,22、3389、3306 这些一暴露到公网,几分钟内就会有人来扫。真要开,配合密钥登录和 fail2ban。

配好之后从外面验证一次,用在线端口扫描或端口检测——在内网里自己连自己是测不出映射有没有生效的。常见端口号对照也在常用端口号里。

UPnP 与内网穿透

UPnP 能让程序自己向路由器申请映射,省事,但也意味着内网里任何程序(包括中招的那个)都能悄悄把自己暴露到公网,不用就在路由器里关掉。

没有公网 IP 时只能走穿透:UDP 打洞依赖 STUN 发现自己的公网映射,打不通再由 TURN 中转。浏览器里的 WebRTC 用的就是这套机制,也正因为它会暴露本机地址,才有了WebRTC 泄漏检测这种工具。

IPv6 环境下这些都不需要:每台机器都有全球地址,开放与否由防火墙决定,配置反而简单——前提是你确实记得配防火墙。

关于本文

本文由 ip438查询网 原创,正文中的命令与配置片段可直接取用。 内容会随实践持续修订,发现错漏欢迎反馈。