NAT 与 DHCP
基于 HTTP 现代标准 · 核于 2026-06
速查
- NAT(网络地址转换):在路由设备上改写 IP 包的地址信息,把一个地址空间映射到另一个;最常见用途是让整片私网共享少量公网 IP,缓解 IPv4 地址耗尽。
- 私有地址段(RFC 1918):
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16——这些地址不在公网路由,只在局域网内有效,出网必须经 NAT 换成公网 IP。 - NAT 工作原理:出方向改写源 IP(+端口)为公网地址并记入转换表(NAT table);回包按目的端口查表,还原成内网地址投递。映射表是 NAT 的心脏。
- PAT / NAPT(端口多路复用):同时改写 IP + 端口,靠端口号区分不同内网设备,让多台设备共用一个公网 IP——这是家用路由器的默认模式(又称 NAT overload)。
- SNAT(源 NAT):改源地址,用于内网→公网的「出门」;DNAT(目的 NAT):改目的地址,用于把公网请求端口转发给内网某台主机(如对外发布服务)。
- NAT 对 P2P 的影响:内网设备默认不能被外部主动连接(表项由出方向建立);P2P / WebRTC 需 STUN / TURN / ICE 做 NAT 穿透(详见实时通信叶)。
- NAT 类型:全锥(Full Cone)/ 受限锥(Restricted)/ 端口受限锥(Port-Restricted)/ 对称(Symmetric)——对称型最难穿透,常须 TURN 中继。
- DHCP(动态主机配置协议):自动给设备下发 IP 地址、子网掩码、默认网关、DNS 服务器等参数,免去逐台手工配置。
- DORA 四步:Discover(客户端广播找服务器)→ Offer(服务器报候选 IP)→ Request(客户端选定并广播请求)→ Ack(服务器确认,配置完成)。
- DHCP 端口:服务器监听 UDP 67,客户端用 UDP 68;首次申请时客户端还没 IP,全程靠广播通信。
- 租约(lease):分配的 IP 有期限;客户端在租期 50%(T1) 单播续租,未果则 87.5%(T2) 广播续租;跨网段靠 DHCP 中继代理转发。
- 边界:本页讲 NAT/PAT/SNAT/DNAT 与 DHCP/DORA;IP 寻址见 IP 协议与 IPv4 寻址,路由转发见 路由原理与路由器/网关。
NAT:为什么要做地址转换
IPv4 地址只有约 43 亿个,早已不够全球设备使用(详见 IPv6 与过渡技术)。NAT(Network Address Translation,网络地址转换) 是缓解这一危机的关键手段:它是「一种在数据包跨越路由设备时,通过修改 IP 首部里的地址信息,把一个 IP 地址空间映射到另一个」的方法。
核心收益用 Wikipedia 的话说:NAT 网关的一个可在公网路由的 IP,就能服务整片私有网络——内网成百上千台设备共用极少量公网地址,从而显著节省 IPv4。
私有地址 vs 公网地址
要理解 NAT,先分清两类地址(RFC 1918 定义的私有地址段):
| 私有地址段 | CIDR | 典型场景 |
|---|---|---|
10.0.0.0 ~ 10.255.255.255 | 10.0.0.0/8 | 大型企业内网 |
172.16.0.0 ~ 172.31.255.255 | 172.16.0.0/12 | 中型网络 |
192.168.0.0 ~ 192.168.255.255 | 192.168.0.0/16 | 家庭 / 小型办公(最常见) |
- 私有地址:只在局域网内部有效,不会出现在公网路由表里,可在无数局域网中重复使用(你家和邻居家都可能用
192.168.1.x)。 - 公网地址:全球唯一、可被互联网路由。私网设备要访问互联网,必须在出口由 NAT 把私有源地址换成公网地址。
一句话类比
私有地址像「公司内部分机号」,对外没有意义;公网地址像「公司总机号」。员工(内网设备)打外线时,外面看到的都是同一个总机号——前台(NAT 网关)记下「哪个分机打的」,回电时再转接回去。
NAT 工作原理:转换表是心脏
NAT 的运作全靠出口设备维护的一张转换表(NAT table / 映射表)。以内网主机访问外部网站为例,转换表中的一条表项大致长这样:
| 内网(原始源) | → 公网(转换后源) | 目的端 | 协议 |
|---|---|---|---|
192.168.1.10:5001 | 198.51.100.1:40001 | 203.0.113.80:80 | TCP |
192.168.1.11:5500 | 198.51.100.1:40002 | 203.0.113.80:80 | TCP |
内网 192.168.1.10 ──出方向──▶ [NAT 改源地址 → 198.51.100.1:40001,记入表] ──▶ 公网 203.0.113.80
内网 192.168.1.10 ◀──回方向── [按目的端口 40001 查表 → 还原回内网地址] ◀── 公网 203.0.113.80流程拆解:
- 出方向:NAT 把数据包的源 IP(必要时连源端口)换成自己的公网地址,从端口池取一个端口分配给本连接,并新建一条表项记录映射关系。
- 回方向:响应包到达 NAT 时,设备按数据包目的端口在转换表中查找;命中后,把目的 IP 和端口替换回内网值,转发给真正的内网主机(首部校验和随之重算)。
NAT 的两种基础形态
- 静态 NAT(Static / Basic NAT):内网 IP 与公网 IP 一对一固定映射,只改 IP 不改端口。地址不省,多用于让某台内网服务器拥有稳定公网身份。
- 动态 NAT(Dynamic NAT):从一个公网地址池里动态借用地址,用完归还,仍是一对一,但地址可复用。
PAT / NAPT:多台设备共享一个公网 IP
家用路由器只有运营商分配的一个公网 IP,却要带动手机、电脑、电视一堆设备同时上网——靠的就是 PAT(Port Address Translation,端口地址转换),又称 NAPT(Network Address and Port Translation)或 NAT overload。RFC 2663 把它正式称为「网络地址与端口转换」。
它在基础 NAT 之上同时改写 IP 和端口:
「端口号被改写,使得回包上的 IP 地址与端口号的组合能无歧义地映射回对应的私网目的地。」——Wikipedia
也就是说,多台内网设备共用同一个公网 IP,靠不同的端口号彼此区分:
| 内网设备 | 转换后(共享同一公网 IP,端口不同) |
|---|---|
192.168.1.10:5001 | 198.51.100.1:40001 |
192.168.1.11:5001 | 198.51.100.1:40002 |
192.168.1.12:6000 | 198.51.100.1:40003 |
即便两台设备碰巧用了相同的内网源端口(都用 5001),NAT 也会分配不同的公网端口(40001 / 40002),回包就不会送错。这正是「一个公网 IP 服务整片网络」得以实现的关键。
PAT 的端口上限
端口号是 16 位,理论上一个公网 IP 最多约 64000 个并发映射(实际可用端口池更小,常约数千)。海量并发连接(如大型 NAT 出口)会逼近这个上限,称为端口耗尽。
SNAT 与 DNAT:方向不同,改的地址也不同
NAT 按「改源地址还是改目的地址」分为两类,二者常配合使用:
| 类型 | 改写对象 | 方向 | 典型用途 |
|---|---|---|---|
| SNAT(Source NAT,源 NAT) | 数据包的源地址 | 内网 → 公网(出门) | 让内网设备共享公网 IP 上网(PAT 即一种 SNAT) |
| DNAT(Destination NAT,目的 NAT) | 数据包的目的地址 | 公网 → 内网(进门) | 端口转发、对外发布服务、DMZ |
你刷网页时是 SNAT(外界只看到公网 IP);想让外部访问内网某台服务器则要 DNAT 做端口转发——把「公网 IP:8080」的请求目的地址改写为「192.168.1.100:80」转发进内网。没有 DNAT,外部无法主动触达内网设备。
NAT 对 P2P 的影响:穿透难题
NAT 带来一个副作用:转换表项默认只能由内网设备出方向发起时建立,因此外部主机无法直接主动连接到内网设备(公网侧不存在指向它的表项)。这对**点对点(P2P)**应用是大麻烦:两台分处各自 NAT 后的设备(如两个用户的浏览器要直连做 WebRTC 音视频)彼此都连不上对方。解决方案是 NAT 穿透(NAT traversal):
- STUN(Session Traversal Utilities for NAT,RFC 5389/8489):客户端向公网 STUN 服务器发包,借此得知自己经 NAT 后的公网 IP:端口,再把该地址告诉对端,尝试**打洞(hole punching)**直连。
- TURN(Traversal Using Relays around NAT):打洞失败时(典型是双方都是对称型 NAT),改用 TURN 中继服务器转发全部流量——能连通但有额外延迟与带宽成本。
- ICE(Interactive Connectivity Establishment):把 STUN、TURN 和本地候选地址统一收集、逐一尝试,自动挑出能连通的最佳路径——WebRTC 用的就是 ICE 框架。
不同 NAT 类型对穿透难度影响很大:
| NAT 类型 | 行为 | 穿透难度 |
|---|---|---|
| 全锥(Full Cone) | 映射后任意外部主机都能经该公网端口连入 | 最易 |
| 受限锥(Restricted Cone) | 仅内网曾发过包的目标 IP 可回连 | 中 |
| 端口受限锥(Port-Restricted Cone) | 仅曾通信过的IP:端口可回连 | 较难 |
| 对称(Symmetric) | 对不同目的地用不同公网端口映射 | 最难,常须 TURN 中继 |
交叉引用
NAT 穿透是**实时通信(WebRTC)**的核心前置知识。STUN/TURN/ICE 的握手细节、信令服务器、RTCPeerConnection 等内容属于实时通信叶的范畴,本页只交代「为什么需要穿透」,不展开协议细节。
DHCP:自动分配网络配置
一台新设备接入网络,要正常上网需要至少四样参数:IP 地址、子网掩码、默认网关、DNS 服务器(参见 子网掩码与 CIDR 划分、路由原理与路由器/网关)。逐台手工配置既繁琐又易冲突——DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 就是来自动化这件事的。
DHCP 服务器维护一个地址池,里面有可分配的 IP 地址、子网掩码、默认网关、域名、DNS(名字服务器)、时间服务器等,按需下发给客户端。
DORA 四步流程
DHCP 的地址获取过程包含四步,首字母组成 DORA:
客户端(UDP 68,暂无 IP) DHCP 服务器(UDP 67)
① ──DHCPDISCOVER(广播)─────────────────────▶ 「有人在吗?给我个 IP」
② ◀─DHCPOFFER(候选 IP/掩码/租期/网关)─────── 「这个 IP 给你用?」
③ ──DHCPREQUEST(广播,选定该 IP)────────────▶ 「我要这个,确认下」
④ ◀─DHCPACK(确认,配置完成)───────────────── 「成交,租期内归你用」| 步骤 | 报文 | 谁发 → 谁 | 含义 |
|---|---|---|---|
| Discover | DHCPDISCOVER | 客户端 → 广播 | 客户端还没 IP,广播寻找网络上的 DHCP 服务器 |
| Offer | DHCPOFFER | 服务器 → 客户端 | 服务器在 YIADDR 字段提供一个候选 IP,附带子网掩码、租期、服务器 IP |
| Request | DHCPREQUEST | 客户端 → 广播 | 客户端选定某个 Offer(含服务器标识),广播请求正式占用(广播让其他服务器知道它已被选) |
| Ack | DHCPACK | 服务器 → 客户端 | 服务器确认,IP 配置过程完成;客户端开始在租期内使用该地址 |
端口与广播
DHCP 服务器监听 UDP 67,客户端使用 UDP 68。由于客户端在 Discover 阶段还没有 IP 地址,无法做单播,因此 DISCOVER 与 REQUEST 都以广播(255.255.255.255)发送。失败拒绝用 DHCPNAK,主动释放用 DHCPRELEASE,只问参数不要地址用 DHCPINFORM。
租约(lease)与续租
DHCP 分配的 IP 不是永久的,而是带租期(lease time) 的「租借」——到期不续则回收,地址得以循环利用。续租分两道闸:
- T1(约租期 50%):客户端向原服务器单播
DHCPREQUEST续租,正常情况服务器回DHCPACK顺延租期。 - T2(约租期 87.5%):若到 T1 续租没成功(原服务器失联),客户端改为广播
DHCPREQUEST,向任意可用 DHCP 服务器求租。 - 租期彻底耗尽仍未续上,则放弃该地址,重新走完整的 DORA 流程。
中继代理与 DHCPv6
DHCP 中继代理(Relay Agent):广播不跨网段,客户端与服务器不在同一子网时,需在本地网段部署中继代理,把客户端广播单播转发给跨网段的 DHCP 服务器,并在 GIADDR 字段填入自己的接口 IP,让服务器知道从哪个子网的地址池分配——一台中心服务器即可服务多网段。 DHCPv6:IPv6 下对应协议,报文与端口(UDP 546/547)都与 v4 不同;且 IPv6 主机还可走 SLAAC(无状态地址自动配置) 自行生成地址,未必依赖 DHCP(详见 IPv6 与过渡技术)。
小结
本页收口「网络层与路由」一叶,把私网与公网之间的两件关键基础设施讲透:
- NAT 是 IPv4 续命的关键:在出口路由设备改写 IP 首部地址,让整片私网(RFC 1918:
10/8、172.16/12、192.168/16)共享少量公网 IP,核心是那张记录映射关系的转换表。 - PAT / NAPT 靠端口多路复用:同时改 IP + 端口,用不同端口号区分内网设备,使多台设备共用一个公网 IP——家用路由器的默认模式。
- SNAT 改源、DNAT 改目的:SNAT 让内网「出门」上网,DNAT 做端口转发让外部「进门」访问内网服务。
- NAT 阻断了外部主动连接:内网设备默认不可被外部直连,P2P / WebRTC 需 STUN / TURN / ICE 穿透(对称型 NAT 最难,常靠 TURN 中继)——细节见实时通信叶。
- DHCP 自动下发网络配置:经 DORA 四步(Discover → Offer → Request → Ack,服务器 UDP 67 / 客户端 UDP 68,全程广播)分发 IP / 掩码 / 网关 / DNS;分配带租约,到 50% / 87.5% 两道闸续租,跨网段靠中继代理。
至此,从 IP 寻址、子网划分、IPv6、路由转发、ICMP 诊断到 NAT/DHCP,「网络层与路由」的全貌已经完整。回顾上一页的网络探测工具,可重读 ICMP 与 ping/traceroute;本叶涉及的 RFC、术语与权威资料汇总见 参考。