DHCP 是应用层的协议,因此它必须依赖于网络层的 IP 协议。但是 IP 协议需要为网络接口分配 IP 地址,而这正是 DHCP 的工作。DHCP 和 IP 是否相互依赖,因此需要彼此事先存在?这种循环依赖是如何工作的?
答案1
DHCP 是应用层的协议,因此它必须依赖于网络层的 IP 协议。但是 IP 协议需要为网络接口分配 IP 地址,而这正是 DHCP 的工作。DHCP 和 IP 是否相互依赖,因此需要彼此事先存在?这种循环依赖是如何工作的?
这不是一个难的依赖性;DHCP 只是为了方便用户,IP(v4) 在 DHCP(或 BOOTP 或 RARP)出现之前就已经存在很长时间了。主机可以手动或以任何其他方式1配置其 IP 地址,而无需 DHCP。
0.0.0.0
但是 IPv4 上的 DHCP 工作方式有些不寻常 - 与其他(正常)基于 UDP 的协议不同,当主机尚未具有有效 IP 地址时,DHCP 客户端可以从“零”地址发送数据包。
(安装 Wireshark 或其他数据包捕获工具即可查看。)
DHCP 客户端软件通过使用“原始套接字”来实现这一点,它手动构建整个 IP 数据包(添加 UDP 报头和 IP 报头),而不是让操作系统添加通常的低层处理。因此,尽管协议好像它是在 UDP/IP 内部传输的,实际上它根本不依赖于操作系统的 IP 堆栈工作。
在 IPv6 上情况有所不同,因为每个支持 IPv6 的接口都会自动具有一个“链路本地”IPv6 地址(地址fe80:…
),因此主机可以使用它来发送和接收其 DHCPv6 数据包 - 或 ICMPv6 路由器请求,或配置所需的任何其他内容。
1某些链路类型有自己的配置机制:例如,任何使用 PPP 的东西(如 ADSL 的 PPPoE、PPTP VPN 或老式拨号)都将使用 PPP 集成配置而不是 DHCP。移动网络也有自己的机制。通常,所有这些机制仅用于“面向用户”的连接,而路由器之间的“核心”连接几乎总是使用手动配置的 IP 地址。