![为什么 DHCP 有固定的客户端和服务器端口号](https://linux22.com/image/613556/%E4%B8%BA%E4%BB%80%E4%B9%88%20DHCP%20%E6%9C%89%E5%9B%BA%E5%AE%9A%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%92%8C%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E5%8F%A3%E5%8F%B7.png)
在大多数客户端-服务器应用程序中,服务器的端口号是众所周知的数字,而客户端使用当前可用的端口号。 DHCP 则不同。 在这里,客户端和服务器都使用众所周知的端口:DHCP 服务器使用 UDP 端口 67,DHCP 客户端使用 UDP 端口 68。
为什么他们这样设计并有一个固定的客户端端口号?
答案1
这是必要的,因为客户端在使用 DHCP 时可能没有 IP 地址(他使用 DHCP 来获取地址)。
服务器和客户端通过广播进行通信,因此服务器将客户端的 IP 地址广播到 UDP 端口 68。服务器没有其他方式可以联系到客户端。这是客户端收到请求答复的唯一方式,因为他没有 IP 地址。
答案2
如果我为 DHCP 客户端分配一个临时端口号(例如 10000),那么我必须为网络中的所有客户端分配相同的端口号。
DHCP 服务器不知道客户端的 IP 地址,它知道的是 DHCP 客户端的端口号。因此,DHCP 服务器广播数据包,客户端端口号等于 10000。如果所有 DHCP 客户端都没有为 DHCP 应用程序分配端口号 10000,则可能某些客户端正在端口号 10000 上运行另一个应用程序。来自 DHCP 服务器的数据包将被传送到错误的客户端应用程序。因此,最好使用众所周知的 DHCP 端口号。