DHCP offer报文到底是单播还是广播?

作者:车小胖
链接:https://www.zhihu.com/question/280872108/answer/438845996

DHCP在设计之初,充分考虑到TCP/IP协议实现的多样性,具体和DHCP有关的多样性体现在:TCP/IP协议栈没有完成IP地址的配置前,是否可以接受单播(Unicast)报文?

有些IP协议栈在完成IP地址的配置前,是可以接收Destination IP = Any 的IP报文,只要该IP报文能够被硬件网卡接收并过滤给IP协议栈。而有些IP协议栈在完成IP地址的配置前,是不会接收任何单播IP报文的,只会接收广播IP报文,即Destination IP = 255.255.255.255。无论是哪种IP协议栈,都是可以接收广播报文的,对吗?DHCP为了增强协议的健壮性(Robustness),是这样规定的:如果协议栈在初始化过程中,不接收单播IP报文,请在DHCP Discovery / Request报文的Flags里明确告知服务器,通过设置“BROADCAST flag = 1”,服务器就使用广播来和客户端通信。如果协议栈在初始化过程中,可以接收单播IP报文,请在DHCP Discovery / Request报文的Flags里明确告知服务器,通过设置“BROADCAST flag = 0”,服务器就使用单播来和客户端通信。

既然广播方式通信适合所有的协议栈,统统使用广播不就ok了,为何要有这个Flags,岂不是多此一举?单播最大的优点:通信是点对点方式,不会影响到广播域的其它主机。广播的特点:通信是点对所有点的方式,会影响到广播域里其它所有主机。同学们可能没有充分理解这里的“影响”二字。当主机收到广播报文时,网卡会产生一次硬件中断CPU,CPU会暂停手头的工作来处理这个中断,处理完中断,CPU继续工作。IP协议栈取走数据,检查之后和自己无关,丢了。废了那么多功夫,最后的报文和自己无关,这不是资源浪费吗?如果广播域里的广播报文满天飞,主机们会疲于处理无关的广播报文,不仅浪费网络资源,同时也浪费主机的CPU资源。

所以在协议的设计中,要尽可能地避免使用广播。解释完为单播和广播,现在来回答这个问题。

问题一:DHCP Offer为何是单播?题主的DHCP Discovery 里设置了“BROADCAST flag = 0”,所以DHCP 服务器使用单播来发送自己的回应报文,即DHCP Offer报文,避免打扰其它主机。

问题二:服务器是通过ARP请求得到客户端的MAC地址的吗?不是,此时客户端还没有获得任何IP地址,客户端如何回应ARP呢?这点从图中可以清晰看出,ARP请求没有获得回应。是通过下图中DHCP协议字段“chaddr”获得的,chaddr是 “Client Hardware Address”缩写,客户端硬件地址,由客户端填入,通常为网卡的MAC地址,这里chaddr = 7c:04:d0:d6:c6:54。
在这里插入图片描述
服务器端给客户端分配的IP地址则填充在“yiaddr”(Your IP Address),这里yiaddr = 10.0.0.51。DHCP服务器有了客户端的IP、MAC地址,就可以完成整个IP报文的封装,将DHCP Offer发给客户端了。客户端接收一点问题没有,在四次消息交互之后,最终完成IP协议栈的配置工作。

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值