为什么 DHCP 使用 UDP 而不是 TCP?

网络工程 通讯协议 dhcp 联网 UDP
2021-07-20 13:55:42

DHCP 使用 UDP 作为其传输协议。客户端发送到服务器的 DHCP 消息被发送到众所周知的端口 67(UDP——引导协议和 DHCP)。服务器发送给客户端的 DHCP 消息被发送到端口 68,那么 DHCP 可以使用 TCP 吗?

4个回答

DHCP 不能使用 TCP 作为传输协议,因为 TCP 要求两个端点都具有唯一的 IP 地址。当主机需要使用 DHCP 时,它没有可以从中获取数据包的 IP 地址,也没有 DHCP 服务器的 IP 地址。因此,它0.0.0.0用作源 IP 地址和255.255.255.255(广播)作为目标 IP 地址(这是针对 DHCP - DHCPv6 存在类似行为)。这些 IP 地址不是有效的主机 IP 地址,可以随时被多个客户端使用。因此,由于缺乏更好的术语,TCP 连接不会是“唯一的”。

由于源没有 IP 地址 (0.0.0.0),而目的地是所有人 (255.255.255.255),因此很难看出如何识别特定会话。但即使可以,又有什么好处呢?DHCP 消息中的数据非常小(约 300 字节),因此可以轻松放入单个段。建立 TCP 会话的开销是不值得的。

UDP 的重点在于应用程序数据足够简单,不需要 TCP 的可靠性和流量控制。DHCP 就是一个很好的例子。

TCP 对 DHCP(v4.) 不起作用的原因有很多

首先,TCP是面向连接的。TCP 连接是在两个特定主机之间定义的。但是,当 DHCP 客户端第一次启动时,它不知道要与哪个主机通信。它唯一的选择是向本地网络上的所有主机广播 DHCP DISCOVER 消息。广播本质上与 TCP 面向连接的性质不兼容,因为它不是 1:1 的关系。由于 DHCP 本质上是无连接的,因此 UDP 更有意义。

其次,在 DHCP 过程完成之前,DHCP 客户端没有分配 IP 地址。即使 DHCP 客户端已经知道它想要从中请求地址的特定 DHCP 服务器(它通常不知道)并且知道它的 IP 地址,它也无法打开与它的 TCP 连接,因为客户端没有有一个 IP 地址供服务器响应。当客户端确实拥有分配的 IP 地址时,DHCP 的工作已经完成。

第三,虽然没有上述问题那么重要,但避免 TCP 也将所需的往返次数减少了一次。典型的 DHCP 交换需要两次往返:DISCOVER(客户端->服务器)、OFFER(服务器->客户端)、REQUEST(客户端->服务器)和 ACK(服务器->客户端)。对于 TCP SYN 和 SYN-ACK 连接建立消息,建立 TCP 连接需要在开始时进行额外的往返。数据不能在 TCP 连接上发送,直到3 路 TCP 握手的最终 ACK 消息

当主机启动时,它不知道它应该使用的网络地址或掩码。它进行通信的唯一方法是通过 IP 广播 (255.255.255.255) 到本地网络。DHCP 客户端在 UDP 端口 67 上发起广播请求。客户端无法使用 TCP,因为它没有自己的 IP 地址,也不知道 DHCP 服务器地址。

DHCP 服务器正在侦听 UDP 端口 67 上的广播。一旦它收到 dhcp 客户端请求,它就会启动 bootp 序列,使用客户端的 MAC 地址将配置信息传递给客户端。

一旦客户端分配了它的 IP 地址、网关、子网掩码等,它就可以发起或接收 TCP 连接。

希望有帮助