刚连上网络,地址是从哪里来的?
设想家里新接入一台电脑 A。几秒后,它显示地址 192.168.1.10/24,默认网关是 192.168.1.1,还能和电脑 B 同时访问网站。你没有手动输入这些配置,网站也没有为每台家庭设备分配一个公网 IPv4 地址。
这里有两个独立问题:谁给 A 配置地址?多台设备的请求怎样共用出口? 前者通常由 DHCP 完成,后者常用 NAT 的端口转换形式。家用路由器常同时承担这些职责,但不能把它们当作一个协议。
本章沿用这个家庭网络作教学设定。外部地址 203.0.113.8、服务器地址 198.51.100.20 使用文档保留网段,图表中的“公网侧”只表示拓扑位置,不表示这些地址真的可以在公网访问。
DHCP 配置的是一组参数
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)让客户端从服务器获得网络配置。在典型 IPv4 网络中,配置包括本机地址、子网掩码、路由器地址、DNS 服务器,以及地址可以使用多久。
| 参数 | 本例配置 | 主机怎样使用 |
|---|---|---|
| 本机地址与掩码 | 192.168.1.10/24 | 形成接口地址及本地网络范围 |
| 路由器地址 | 192.168.1.1 | 通常用于建立默认路由 |
| DNS 服务器 | 设为路由器提供的解析服务 | 把域名查询交给它 |
| 租约 | 8 小时 | 到期前尝试续租 |
这些参数分别解决寻址、选路与名字解析。RFC 2132 §3.3、§3.5、§3.8定义了掩码、路由器和 DNS 等选项。DHCP 成功只能说明获得了配置;服务器返回了错误网关或不可用 DNS,网站仍可能打不开。
第一次申请:四种报文做四件事
以没有可复用租约、服务器在同一局域网的正常 IPv4 初次分配为例:
| 顺序 | 报文 | 状态变化 |
|---|---|---|
| 1 | A 发 DHCPDISCOVER | 寻找可用服务器 |
| 2 | 服务器发 DHCPOFFER | 提议地址及租约,还不是最终确认 |
| 3 | A 发 DHCPREQUEST | 选择一份提议,请求使用该地址 |
| 4 | 被选服务器发 DHCPACK | 确认租约及配置 |
这就是常说的 DORA:Discover、Offer、Request、Ack。初次 Discover 可从 0.0.0.0 发往 255.255.255.255;此时尚无正常可用地址,也不知道服务器在哪里。选择提议时的 Request 广播让其他服务器知道自己的提议未被选中。Offer、Ack 不必一律广播,其交付方式取决于客户端接收能力、标志和中继等条件。客户端使用 UDP 68,服务器使用 UDP 67。RFC 2131 §3.1、§4.1
A 收到确认后,还应检查地址冲突;发现冲突可发送 DHCPDECLINE 并重新申请。重启后的地址确认、续租等路径也不必完整走四步,所以 DORA 是典型初次分配路径,不能概括每次 DHCP 交互。
广播不会被普通路由器无条件转发到其他子网。公司若集中部署 DHCP 服务器,可配置 DHCP Relay(中继) 代客户端把请求交给服务器,并提供客户端所在链路信息。服务器便能选择对应地址池,而不必每个 VLAN 都放一台服务器。
地址不是拿到之后永久占有
动态租约有有效期。本例采用默认比例,8 小时租约在约 4 小时到达 T1,客户端向原服务器单播续租;未成功,约 7 小时到达 T2,转为广播重绑定,寻找能接手的服务器。T1、T2 可以由服务器配置,默认分别为租约的 50% 与 87.5%。到期仍未获得确认,就不能继续把过期租约当作有效授权。RFC 2131 §4.4.5
因此,“DHCP 服务器暂时离线”和“所有电脑立即失去网络”不是同一件事:已有有效租约的电脑与新接入的电脑,处境不同。
私有地址能在内部路由,为何不能直接当公网地址?
IPv4 私有地址允许不同组织重复使用,主要范围为:
| 前缀 | 地址范围 |
|---|---|
10.0.0.0/8 | 10.0.0.0—10.255.255.255 |
172.16.0.0/12 | 172.16.0.0—172.31.255.255 |
192.168.0.0/16 | 192.168.0.0—192.168.255.255 |
范围由 RFC 1918 §3保留。注意 172.32.0.1 不在第二组内,也不能把所有 172.* 都叫私有地址。
你家和邻居家都能使用 192.168.1.10,因为各自处在不同的地址管理范围。企业内部的路由器也可以转发私有地址;问题出现在公共互联网:这个地址不能唯一标识所有组织中的某台机器,无法按普通公网路由把响应交还给你家。
“不是私有地址”也不等于“必定是可用公网地址”。回环、链路本地、文档保留等特殊用途地址需要另行判断。
两台电脑用了相同端口,响应会不会送错?
NAT(Network Address Translation,网络地址转换)改变报文中的地址。Basic NAT 主要做地址映射;家庭出口常用 NAPT(Network Address Port Translation,网络地址与端口转换),同时利用端口区分流量,厂商也常称其为 PAT。RFC 3022 §2、§3描述了传统 NAT 与 NAPT;该文档是 Informational,不是所有设备行为的统一承诺。
先把 IP:端口 理解为一个传输入口,端口细节留到后面的 Socket 章。假设 A、B 都建立 TCP 连接,访问 198.51.100.20:443,恰好都选了本地端口 50000。出口可以建立这样的示意映射:
| 内部源入口 | 转换后的源入口 | 目标入口 | 协议 |
|---|---|---|---|
192.168.1.10:50000 | 203.0.113.8:40001 | 198.51.100.20:443 | TCP |
192.168.1.11:50000 | 203.0.113.8:40002 | 198.51.100.20:443 | TCP |
外部端口是本例选值,不是固定分配算法。跟着 A 的一轮流量看四个位置:
- A 发出:源
192.168.1.10:50000,目标198.51.100.20:443。 - 出口转换后:源变为
203.0.113.8:40001,本例目标不变。 - 服务器返回:源
198.51.100.20:443,目标203.0.113.8:40001。 - 出口查映射:把返回目标还原为
192.168.1.10:50000,再转发给 A。
B 的响应到达 40002,便进入另一条映射。两台设备的内部端口相同,并不造成这两条外部连接的入口相同。修改相关字段时还需按协议更新校验和;它与普通路由转发仅选择下一跳的动作有别。
真实映射和过滤还可能关联远端入口,UDP 与 TCP 也要区分。上表是一组足以解释回程的 TCP 映射,不能推导出所有 NAT 都只查“公网端口”。 映射会随连接结束或空闲超时回收;端口和状态表容量也有限,共享出口不是无限扩容。
为什么外部通常不能随意连接内部电脑?
外部新请求若到达 203.0.113.8:45000,出口没有对应映射,就不知道该交给 A 还是 B。可以配置静态端口映射,让某个外部入口对应内部服务;是否放行仍取决于防火墙策略和上游网络。多层 NAT 时,只改家中一层也可能不够。
NAT 的这类效果不能代替安全设计。地址转换不提供数据加密;已建立映射、主动访问恶意服务或开放端口后的风险仍在。防火墙负责允许或拒绝流量,NAT 负责转换,两者即使集成在同一设备里,职责也不同。
动手追踪共享出口的一次回程
先选 A,走完请求与响应的四个位置,再选 B:它们的内部源端口都为 50000,服务器响应的目标为什么不同?最后试一个没有映射的外部入口。
两条 TCP 映射已建立。选择设备,逐步观察报文的源与目标入口。
192.168.1.10:50000
↕ 出口映射
203.0.113.8:40001
192.168.1.11:50000
↕ 出口映射
203.0.113.8:40002
源:192.168.1.10:50000
目标:198.51.100.20:443
内部设备保留自己的私有地址。A、B 使用相同源端口,但源 IP 不同。
教学映射,不执行真实 NAT。40001/40002 为示例分配值;真实映射与过滤可能关联远端入口,且有生命周期。地址转换需相应更新校验和,不提供加密,也不替代防火墙。DHCP 配置地址与出口转换是不同职责。
IPv6 只是把地址写长了吗?
IPv6 的源、目的地址都是 128 位,基础头部为 40 字节;它为地址空间和协议演进提供新的基础,而不是扩大私有 IPv4 地址池。RFC 8200 §3
地址通常写为冒号分隔的十六进制组,例如 2001:db8:1::10。这里的 2001:db8::/32 也是文档示例范围。:: 表示连续的零组,一个地址里只能使用一次,以免省略位置产生歧义。链路本地地址属于 fe80::/10,只用于本链路,不能拿它直接访问远端网站。RFC 4291 §2.2、§2.5.6
在普通原生 IPv6 部署中,主机可以拥有全局单播地址,访问同样支持 IPv6 的服务时不必依赖家庭 IPv4 式的 NAPT。但可路由地址不等于允许外部访问:边界防火墙仍然可以拒绝新入站连接,应用也仍需认证和 TLS。
IPv4 和 IPv6 是不同协议;只有 IPv6 连接能力的主机,不能仅因地址更长就直接访问仅支持 IPv4 的服务。双栈让设备同时使用两种协议,转换机制则解决部分跨协议访问问题。本章不展开转换部署。
自动配置:SLAAC、DHCPv6 与 RA 各做什么?
SLAAC(Stateless Address Autoconfiguration,无状态地址自动配置)由主机依据路由器通告中的适用前缀信息及接口标识生成地址,按生命周期管理,并通常进行 DAD(Duplicate Address Detection,重复地址检测)。这里“无状态”主要是指不依赖 DHCP 服务器逐台维护地址租约,并非主机没有状态。接口标识也不必机械地由 MAC 推导。RFC 4862 §5
DHCPv6 则通过客户端与服务器交互提供地址、前缀或其他配置,可与 SLAAC 配合。它是独立协议,不能照搬 IPv4 的广播 DORA;其通常的有状态分配使用 Solicit、Advertise、Request、Reply,也有简化交互。RFC 9915是本章核验时的 DHCPv6 规范,已替代 RFC 8415。
RA(Router Advertisement,路由器通告)属于邻居发现机制。主机可由它发现默认路由器;通告中的前缀信息可以分别用于判断本链路范围和支持自动配置;这两种用途由不同标志控制。RA 的 Router Lifetime 为 0 时,该通告不能把发送者加入默认路由器列表,因此收到 RA 也不一定获得默认出口。不要把“DHCPv6 分配了地址”理解为“默认网关也已经正确配置”:正常的动态默认路由器发现依赖 RA,地址配置与下一跳选择仍要分别检查。RFC 4861 §6
不用 ARP,仍然需要找到本跳接收者
IPv6 在以太网上仍需知道下一跳的 MAC,只是由 NDP(Neighbor Discovery Protocol,邻居发现协议)处理。它使用 ICMPv6:NS(Neighbor Solicitation,邻居请求)与 NA(Neighbor Advertisement,邻居通告)承担地址解析等交互,RS/RA 用于路由器发现。NDP 的职责还包括邻居可达性检测。RFC 4861 §3、§7.2
IPv6 没有 IPv4 式广播。正常的以太网邻居地址解析把 NS 发往目标对应的请求节点多播地址,而不是向所有设备广播 ARP。“没有广播”因此不等于“没有发现机制”。粗暴屏蔽全部 ICMPv6,可能连这些基础交互一起破坏。
显示了地址,为什么仍然上不了网?
| 观察 | 可以继续核对的证据 |
|---|---|
| A 没拿到预期 IPv4 配置 | DHCP 是否响应、地址池是否可用、VLAN 与 Relay 是否对应 |
| A 有地址,访问远端却失败 | 掩码、默认路由、网关邻居项、出口与回程 |
| 同一出口下部分新连接失败 | NAPT 状态与端口资源、空闲超时、过滤策略 |
| IPv6 有地址,却没有外部路径 | 地址作用域、有效 RA、默认路由、NDP 与防火墙 |
表中是定位方向,不是仅凭症状就能下结论的故障诊断。下一章会进一步分清“网络能到”“端口能连”和“网站正常”。
面试时怎样回答?
30—60 秒参考回答
电脑通常通过 DHCP 获取 IPv4 地址、掩码、路由器、DNS 和租约,初次分配常见 Discover、Offer、Request、Ack,之后按租约续租。私有地址可在内部复用,家庭出口常用 NAPT,把多台设备的地址与端口映射到共享出口,响应再按状态映射返回。NAT 不等于防火墙,也不加密数据。IPv6 使用 128 位地址,可用 SLAAC 或 DHCPv6 配置;RA 发现默认路由器,NDP 用 ICMPv6 完成邻居发现等工作。获得地址仍不代表路由和应用都正常。
四个追问及解析
- DHCP 的四种报文都广播吗? 不能这样概括。初次 Discover、选择提议的 Request 使用广播;服务器回应和后续续租的交付方式要按状态及条件判断。
- A、B 都用源端口 50000,NAPT 怎么区分? 本例把它们映射为不同外部入口 40001、40002,响应分别还原;真实实现还要考虑协议及远端相关条件。
- 私有地址完全不能被路由吗? 可以在组织内部路由;它不能作为普通全球唯一地址在公共互联网中传播并承载端到端回程。
- IPv6 有全局地址,就一定能被公网主动连接吗? 不一定。需要有效路由、可达链路、允许入站的策略以及正在监听的服务。
两个易错说法
- “DHCP 就是 NAT,路由器把地址换成公网地址后交给电脑。”DHCP 给主机配置参数;NAPT 在出口处理经过的报文,内部主机通常保留私有地址。
- “IPv6 不用 ARP,因此不用解析 MAC。”IPv6 以太网仍需本跳链路层交付,邻居发现承担相关工作。
资料与核验日期
核验于 2026-10-08。配置、租约时刻与映射均为教学设定,没有声称执行了真实 DHCP 抓包或 NAT 部署。本文采用相关基础条款,并单独核对 DHCPv6 的替代规范;涉及具体设备策略时应查实现资料。