这里不想具体讨论的协议字段,看到其中的几个点还蛮有趣,特此记录。
DHCP 是基于 udp 协议,DHCP server 使用的是 67 端口,DHCP client 使用的是 68 端口,协议具体会有 4 个交互步骤。
- 新设备加入网络中,client 会向 255.255.255.255 广播一个 DHCPDISCOVER 的报文。
- 网络内的 server 会向 255.255.255.255 广播一个 DHCPOFFER 的报文
- client 会再次向 255.255.255.255 广播一个 DHCPREQUEST 报文
- server 会回复一个 255.255.255.255 广播一个 DHCPACK 报文
问题一:
为什么需要两次交互,在第一次 DHCPOFFER 的报文的时候就已经发送了合适的 ip 地址给到客户端?
答:DHCP 协议在一开始就考虑到网络内存在多台 server ,每个 server 可能都会提供一个合适的 ip 地址,其实 DHCPREQUEST 就是告诉全网 client 现在已经选择一个 ip 地址了,被选择的 server 会发送DHCPACK,而没有被选择到的 server 会回收发出去的 ip。
问题二:
为什么 DHCPREQUEST 依然使用广播,其实他已经有一个 ip 了?
其实这个和上面解释差不多,因为 client 需要通知所有 server 。
问题三:
整个交互过程中,没有用到 ip,那到底是如何标志客户端唯一 ?
每个包发出的时候会携带它的网卡 id,网卡是唯一的。
问题四:
DHCPACK 还依然使用广播,不使用 client ip?
因为这时候 client 还没有确定使用这个 ip,只有等这个包到达的时候才会使用这个 ip 地址。