DHCP offer报文到底是单播还是广播?(Bootp flags)

DHCP offer报文到底是单播还是广播?(Bootp flags)

图片.png

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。

图片.png

服务器端给客户端分配的IP地址则填充在“yiaddr”(Your IP Address),这里yiaddr = 10.0.0.51。DHCP服务器有了客户端的IP、MAC地址,就可以完成整个IP报文的封装,将DHCP Offer发给客户端了。客户端接收一点问题没有,在四次消息交互之后,最终完成IP协议栈的配置工作。


1.客户机发送广播discover报文请求分配ip地址
2.收到discover报文的dhcp服务器都会回应offer报文,里面携带了给客户机分配的IP地址
3.客户机收到offer报文之后会再次广播(只对收到的第一个offer报文进行回复动作)发送request报文,携带接收的dhcp服务器的ip地址,向外部宣告接受的是哪台dhcp服务器
4.服务器收到request报文,会对报文里dhcp的ip进行校验,若ip与自己一致,则回复ack报文(携带分配给客户机的ip地址),若不一致,则将报文丢弃
5.客户机收到ack报文,核对自身ip与ack报文携带的分配ip是否一致,一致则分配成功,不一致则通知服务器禁用这个ip,避免地址冲突

可能在部分人印象里dhcp服务器回复的offer和ack报文应该是单播,实际运用的也大多是单播,但这不代表不可以是广播,dhcp在设计之初为了照顾到某些只接受广播的协议栈(配置ip之前),在设计服务器回复报文的时候加入了广播回复的选择,如果DHCP Discovery / Request报文的字段BROADCAST flag = 1,则dhcp服务器回复报文使用广播进行回复,如果字段BROADCAST flag = 0,则使用单播进行回复,所以dhcp服务器的回复是单播还是广播取决于客户机发送的discover/request报文携带的BROADCAST flag 字段。
在现在的实际运用中,大部分情况采用的还是单播回复(可以减轻设备压力,避免广播风暴)

Bootp flags

注意:其中Bootp flags为客户端对服务器端回复报文形式的标志,并不是客户端发送报文的形式,也就是在DHCP DISCOVER报文中的bootp flags为由服务器向客户端作出回应发出的DHCP OFFER报文的形式,DHCP REQUEST报文中的bootp flags为由服务器向客户端作出回应发出的DHCP ACK报文的形式,并且若Bootp flags为0x0000(Unicast)则为单播,0x8000(Broadcast)为广播,这也就说明了DHCP OFFER报文和DHCP ACK报文既可以以广播形式发送,也可以以单播形式发送给客户端。

图片.png

图片.png


DHCP服务器与MAC地址绑定、snooping(列表、list、全)maclist、dhcplist、dhcpsnoopinglist
http://www.zh-cjh.com/wenzhangguilei/1005.html
文章归类、所有文章列表、LISTLIST
http://www.zh-cjh.com/wangzhangonggao/2195.html

1、本站资源长期持续更新。
2、本资源基本为原创,部分来源其他付费资源平台或互联网收集,如有侵权请联系及时处理。
3、本站大部分文章的截图来源实验测试环境,请不要在生产环境中随意模仿,以免带来灾难性后果。

转载请保留出处:  www.zh-cjh.com珠海陈坚浩博客 » DHCP offer报文到底是单播还是广播?(Bootp flags)

作者: cjh


手机扫一扫,手机上查看此文章:

一切源于价值!

其他 模板文件不存在: ./template/plugins/comment/pc/index.htm

未雨绸缪、居安思危!

数据安全、有备无患!

注意操作、数据无价!

一切源于价值!