DHCP
动态主机配置协议(Dynamic Host Configuration Protocol),简称 DHCP。其主要功能是自动为接入局域网内的设备分配IP地址等关键配置参数,实现了“即插即用”的网络接入。
1. DHCP DISCOVER(发现阶段)
场景:客户端刚接入网络或租约到期,需要获取IP配置。
客户端状态:
- IP地址:0.0.0.0
- 配置:无任何网络参数
报文详细信息:
传输层:
源端口:68 (DHCP客户端标准端口)
目标端口:67 (DHCP服务器标准端口)
网络层:
源IP地址:0.0.0.0 (客户端尚无IP)
目标IP地址:255.255.255.255 (受限广播地址)
数据链路层:
源MAC:客户端MAC地址(如00:1A:2B:3C:4D:5E)
目标MAC:FF:FF:FF:FF:FF:FF (广播)
DHCP载荷:
消息类型:DHCPDISCOVER
事务ID:随机生成的32位数字(如0xA1B2C3D4)
客户端硬件地址:客户端的MAC地址
请求选项列表:客户端希望获得的参数
特点:
- 客户端以广播方式发送,因为不知道网络中有哪些DHCP服务器
- 可能有多个DHCP服务器会收到此请求
2. DHCP OFFER(提供阶段)
场景:DHCP服务器收到DISCOVER后,提供一个可用的IP地址提案。
服务器决策:
- 从地址池中选择一个未分配的IP地址(如192.168.1.100)
- 确定相关网络参数:
- 子网掩码:根据网络规划确定(如255.255.255.0)
- 租期:预设的租用时间(如86400秒 = 24小时)
- 网关地址:默认网关(如192.168.1.1)
- DNS服务器:DNS解析服务器(如8.8.8.8, 8.8.4.4)
报文详细信息:
传输层:
源端口:67 (DHCP服务器端口)
目标端口:68 (DHCP客户端端口)
网络层:
源IP地址:DHCP服务器的IP地址(如192.168.1.1)
目标IP地址:255.255.255.255 (广播) 或 客户端MAC关联的单播
数据链路层:
源MAC:服务器MAC地址
目标MAC:客户端MAC地址或广播
DHCP载荷:
消息类型:DHCPOFFER
事务ID:与DISCOVER报文相同的ID(0xA1B2C3D4)
Your IP Address:预分配的IP地址(192.168.1.100)
服务器标识:服务器自身的IP地址(192.168.1.1)
选项字段:
子网掩码(1):255.255.255.0
路由器(3):192.168.1.1
DNS服务器(6):8.8.8.8, 8.8.4.4
IP地址租期(51):86400秒
更新时间(T1)(58):43200秒(租期的50%)
重新绑定时间(T2)(59):75600秒(租期的87.5%)
DHCP消息类型(53):Offer(2)
特点:
- 服务器临时保留提供的IP地址,防止其他客户端占用
- 可能存在多个服务器同时提供OFFER
3. DHCP REQUEST(请求阶段)
场景:客户端从收到的OFFER中选择一个,正式请求使用该配置。
客户端决策:
- 通常选择第一个收到的OFFER
- 记录选中的服务器标识(192.168.1.1)
报文详细信息:
传输层:
源端口:68
目标端口:67
网络层:
源IP地址:0.0.0.0 (客户端尚未正式获得IP)
目标IP地址:255.255.255.255 (广播)
数据链路层:
源MAC:客户端MAC地址
目标MAC:广播地址
DHCP载荷:
消息类型:DHCPREQUEST
事务ID:保持不变(0xA1B2C3D4)
客户端硬件地址:客户端的MAC地址
请求的IP地址(option 50):192.168.1.100
服务器标识(option 54):192.168.1.1(选择的服务器)
选项字段:
请求的IP地址(50):192.168.1.100
服务器标识符(54):192.168.1.1
DHCP消息类型(53):Request(3)
关键作用:
- 正式请求选中的IP配置
- 隐式拒绝其他服务器的OFFER(通过广播告知所有服务器自己的选择)
- 防止冲突:确保只有被选中的服务器最终分配该地址
4. DHCP ACK(确认阶段)
场景:被选中的服务器确认请求,正式分配IP配置。
服务器操作:
- 验证请求的IP地址(192.168.1.100)仍可用
- 正式分配该地址给客户端MAC
- 记录租期开始时间(如2024-01-15 10:00:00)
报文详细信息:
传输层:
源端口:67
目标端口:68
网络层:
源IP地址:DHCP服务器IP(192.168.1.1)
目标IP地址:192.168.1.100 (客户端的正式IP) 或 广播
数据链路层:
源MAC:服务器MAC地址
目标MAC:客户端MAC地址(单播时)
DHCP载荷:
消息类型:DHCPACK
事务ID:保持不变(0xA1B2C3D4)
Your IP Address:192.168.1.100
服务器标识:192.168.1.1
选项字段:
子网掩码(1):255.255.255.0
路由器(3):192.168.1.1(网关)
DNS服务器(6):8.8.8.8, 8.8.4.4
域名(15):example.com(可选)
IP地址租期(51):86400秒
更新时间(T1)(58):43200秒(12小时后)
重新绑定时间(T2)(59):75600秒(21小时后)
服务器标识符(54):192.168.1.1
DHCP消息类型(53):ACK(5)
租期开始时间:2024-01-15T10:00:00Z
租期结束时间:2024-01-16T10:00:00Z
客户端接收后操作:
- 正式绑定IP:将192.168.1.100配置到网络接口
- 配置其他参数:设置子网掩码、网关、DNS等
- 启动租期计时器:
- T1计时器:43200秒后触发(第一次续租尝试)
- T2计时器:75600秒后触发(第二次续租尝试)
- 租期到期:86400秒后(必须释放IP)
5. DHCP NAK(拒绝阶段)- 可能发生
场景:如果服务器无法满足REQUEST的请求(如IP已被分配)。
报文详细信息:
DHCP载荷:
消息类型:DHCPNAK
事务ID:与REQUEST相同
服务器标识:发送NAK的服务器IP
选项字段:
DHCP消息类型(53):NAK(6)
客户端响应:收到NAK后必须重新开始DORA流程
6. 租期管理与续租
T1和T2两个时刻都可以动态刷新新的租期周期(24h),如果错过,在当前租期周期的最后时刻,所被分配的IP会被强制释放掉,客户端必须重新走DORA流程获取新的IP。
T1时刻(50%租期,12小时后):
客户端行为:
发送DHCPREQUEST(单播到原服务器192.168.1.1)
端口:68→67
源IP:192.168.1.100
目标IP:192.168.1.1
包含选项:请求续租当前IP
服务器响应:
成功:回复DHCPACK,刷新租期(从当前时间重新计算24小时)
失败:无响应或回复NAK,客户端继续等待直到租期到期
T2时刻(87.5%租期,21小时后):
客户端行为:
发送DHCPREQUEST(广播)
端口:68→67
源IP:192.168.1.100
目标IP:255.255.255.255
目的:请求网络中任何DHCP服务器续租
服务器响应:
成功:任何服务器可响应ACK,刷新租期(从当前时间重新计算24小时)
失败:无响应或回复NAK,客户端继续等待直到租期到期
租期到期(24小时后):
- 客户端必须停止使用192.168.1.100
- 发送DHCPRELEASE(如果正常关机)或直接丢弃IP
- 重新开始完整的DORA流程获取新地址
IP转换
公网IP和私网IP
公域IP
- 定义:全球唯一的IP地址,由互联网数字分配机构分配给各大运营商,用于在全球互联网上直接标识和定位一台设备。它是互联网上的“门牌号”,任何拥有公网IP的设备都能与互联网上的其他设备直接通信。
- 核心特征:全球可达性、唯一性。两个不同的组织或家庭不能拥有相同的公网IP。
- 地址范围:除私网IP范围外的所有IP地址。
私域IP
- 定义:在私有网络内部使用的IP地址,由网络管理员自由分配,无法在互联网上被直接路由和访问。它用于在一个组织或家庭内部标识设备。
- 核心特征:本地性、可重用性。你家路由器的
192.168.1.100和我家路由器的192.168.1.100可以同时存在,互不冲突,因为它们都在各自的私有网络内。 - 根据RFC 1918,只有三个范围是私有地址:
公网IP和私网IP的转换
由于公网IP地址有限,而设备数量庞大,不可能为每台设备都分配一个公网IP。因此,我们通过 NAT 技术将私网IP“隐藏”在一个或几个公网IP后面。
-
工作原理:家庭或公司的NET路由器拥有一个公网IP(或从运营商那里获得的一个公网IP)。路由器内部为所有设备(手机、电脑、智能电视)分配私网IP(如
192.168.1.x)。 -
当内网设备访问外网(如百度)时:
- 设备用私网IP发出请求包。
- 路由器将该包的源地址从私网IP替换为路由器的公网IP,并记录这个连接(建立一个NAT映射表)。
- 百度将响应发送给路由器的公网IP。
- 路由器根据映射表,将响应包的目标地址从公网IP替换回对应的私网IP,转发给内网设备。
-
结果:对于百度来说,它只看到了一个公网IP在访问它,并不知道内部有多少台设备。这既节省了公网IP,又起到了安全防火墙的作用(外部无法直接发起对私网IP的连接)。
做一个比喻:公网IP 好比公司的总机电话号码(一个对外的、公开的、唯一的号码)。
私网IP 好比公司内部各个分机号(如101, 102),外部的人无法直接拨打分机号。
NAT路由器 好比公司的前台/总机接线员。当内部分机101想打外线时,接线员用总机号拨出;当外线打进来找101时,也必须先拨总机号,由接线员转接。
家庭网络
校园网络
校园网络相较于家庭网络而言,会使用更大,更多的私网层级。
步骤1-2:宿舍内NAT转换
学生电脑发送:192.168.0.100:54321 → 220.181.38.148:80
宿舍路由器转换:分配端口45000
创建映射:192.168.0.100:54321 ↔ 10.1.100.50:45000
步骤3-4:校园网关NAT转换
宿舍路由器转发:10.1.100.50:45000 → 220.181.38.148:80
校园网关转换:分配端口50002
创建映射:10.1.100.50:45000 ↔ 202.120.100.11:50002
步骤5:发送到互联网
最终外发包:202.120.100.11:50002 → 220.181.38.148:80
步骤6-10:响应返回路径
服务器响应:220.181.38.148:80 → 202.120.100.11:50002
校园网关反向转换:50002 → 10.1.100.50:45000
宿舍路由器反向转换:45000 → 192.168.0.100:54321
最终到达:220.181.38.148:80 → 192.168.0.100:54321