地址配置与转换:DHCP与NAT
动态主机配置协议DHCP
主机的IP地址可以由系统管理员手工配置,但更常见的做法是使用动态主机配置协议DHCP(Dynamic Host Configuration Protocol)自动获取。DHCP让主机接入网络时“即插即用”,除了IP地址之外,它还能告诉主机子网掩码、默认网关(第一跳路由器)的地址和本地DNS服务器的地址。DHCP分配的地址有租用期(lease time),到期前必须续租,否则地址会被收回,供其他主机使用。
DHCP是客户/服务器协议,运行在UDP之上:客户使用端口68,服务器使用端口67。一台新主机获取地址需要四个步骤:
| 步骤 | 报文 | 源地址:端口 | 目的地址:端口 | 作用 |
|---|---|---|---|---|
| 1 | DHCP发现(discover) | 0.0.0.0:68 | 255.255.255.255:67 | 新主机寻找DHCP服务器 |
| 2 | DHCP提供(offer) | 服务器地址:67 | 255.255.255.255:68 | 服务器提出可用的地址和租期 |
| 3 | DHCP请求(request) | 0.0.0.0:68 | 255.255.255.255:67 | 客户选择一个提供并请求使用 |
| 4 | DHCP确认(ACK) | 服务器地址:67 | 255.255.255.255:68 | 服务器确认,客户开始使用该地址 |
新主机一开始既没有自己的地址,也不知道服务器的地址,所以发现报文的源地址是0.0.0.0,目的地址是受限广播地址255.255.255.255。局域网上可能有多台DHCP服务器,它们都可能回复提供报文。客户在请求报文中回显自己选中的那个提供,并且仍然用广播发送,这样所有服务器都能知道选择结果,未被选中的服务器可以收回为它预留的地址。
租用期过半(租期)时,客户直接向原服务器单播请求续租;如果一直没有得到回答,到租期时改为广播请求,任何服务器都可以为它延长租期;租期届满仍无回答,客户就必须停止使用该地址,重新从发现报文开始。
用DHCP加入局域网:发现、提供、请求、确认
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
网络地址转换NAT
4.3节介绍过,10.0.0.0/8、172.16.0.0/12和192.168.0.0/16这些私有地址只用于局域网,不能出现在公网上。可是家庭和企业网络里的主机确实需要访问因特网。网络地址转换NAT(Network Address Translation)解决了这个问题:NAT路由器面向因特网的一侧只有一个公网地址,内部网络则使用私有地址。对外部世界来说,整个内部网络就像一台只有一个IP地址的设备。
NAT路由器维护一张NAT转换表(NAT translation table),每个表项把一个公网端口号与一个内部的(IP地址,端口号)对应起来:
- 内部主机10.0.0.1用源端口3345向Web服务器128.119.40.186:80发送数据报。
- NAT路由器为它选择一个未被使用的端口号5001,把源地址和源端口改写为138.76.29.7:5001,并在转换表中记录5001 ↔ 10.0.0.1:3345。
- Web服务器只看到138.76.29.7:5001,响应的目的地址和端口就是138.76.29.7:5001。
- 响应到达NAT路由器后,路由器用目的端口5001查转换表,把目的地址和端口改写回10.0.0.1:3345,再转发给内部主机。
| 广域网一侧 | 局域网一侧 |
|---|---|
| 138.76.29.7:5001 | 10.0.0.1:3345 |
端口号字段长16位,所以一个公网地址可以同时支持六万多个连接。
NAT也有一些代价。转换表项只有在内部主机向外发起连接时才会建立,因此外部主机无法主动连接内部的服务器,除非在NAT上手工配置端口转发(port forwarding)这样的静态表项。端口号本来用于标识进程而不是主机,路由器修改端口号也打破了“网络层只处理到网络层首部”的分层原则,给P2P等需要直接连接的应用带来了困难(需要NAT穿越技术)。从长远看,地址短缺问题应当由IPv6来解决(见4.7节)。
观察NAT改写地址与端口
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
追踪三个连接的NAT转换
NAT路由器的公网地址为138.76.29.7,从5001开始分配公网端口。依次发生:(1)10.0.0.1:3345连接128.119.40.186:80;(2)10.0.0.2:3345连接同一服务器;(3)10.0.0.1:3346连接203.0.113.50:443;(4)一个响应从128.119.40.186:80到达138.76.29.7:5002。写出转换表、每个数据报经过NAT前后的源与目的,以及一个公网地址大约能支持多少个连接。
推算DHCP租期时间线
笔记本在08:00:00收到DHCP确认,获得192.168.1.23,租期3600秒。按默认续租时间T1 = 0.5 × 租期、重新绑定时间T2 = 0.875 × 租期,求T1、T2和到期的时钟时间。若在T1续租成功,新的到期时间是多少?若服务器已崩溃,在T2和到期时会发生什么?