2. 局域网内的IP分配

47 阅读9分钟

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)
  目标MACFF: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)

关键作用

  1. 正式请求选中的IP配置
  2. 隐式拒绝其他服务器的OFFER(通过广播告知所有服务器自己的选择)
  3. 防止冲突:确保只有被选中的服务器最终分配该地址

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 Address192.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

客户端接收后操作

  1. 正式绑定IP:将192.168.1.100配置到网络接口
  2. 配置其他参数:设置子网掩码、网关、DNS等
  3. 启动租期计时器
    • 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,只有三个范围是私有地址: image.png

公网IP和私网IP的转换

由于公网IP地址有限,而设备数量庞大,不可能为每台设备都分配一个公网IP。因此,我们通过 NAT 技术将私网IP“隐藏”在一个或几个公网IP后面。

  • 工作原理:家庭或公司的NET路由器拥有一个公网IP(或从运营商那里获得的一个公网IP)。路由器内部为所有设备(手机、电脑、智能电视)分配私网IP(如192.168.1.x)。

  • 当内网设备访问外网(如百度)时

    1. 设备用私网IP发出请求包。
    2. 路由器将该包的源地址从私网IP替换为路由器的公网IP,并记录这个连接(建立一个NAT映射表)。
    3. 百度将响应发送给路由器的公网IP。
    4. 路由器根据映射表,将响应包的目标地址从公网IP替换回对应的私网IP,转发给内网设备。
  • 结果:对于百度来说,它只看到了一个公网IP在访问它,并不知道内部有多少台设备。这既节省了公网IP,又起到了安全防火墙的作用(外部无法直接发起对私网IP的连接)。

做一个比喻:公网IP 好比公司的总机电话号码(一个对外的、公开的、唯一的号码)。 私网IP 好比公司内部各个分机号(如101, 102),外部的人无法直接拨打分机号。 NAT路由器 好比公司的前台/总机接线员。当内部分机101想打外线时,接线员用总机号拨出;当外线打进来找101时,也必须先拨总机号,由接线员转接。

家庭网络

image.png

校园网络

校园网络相较于家庭网络而言,会使用更大,更多的私网层级。

步骤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