前言
不知道大家在看到这个图的时候第一时间想到的是什么,【好复杂】【看不懂】【终端数好多】,这里不看整体的结构怎么样,来看看终端数量都非常的多,终端要与网络中进行通信,势必需要IP地址,从最开始学习到现在好像都是手动去设置的终端IP地址,如果一个网络中有几百台、几千台的终端设备,难道需要IT维护人员一个一个去设置吗,那工作量太大了,并且如果涉及到整改,比如换了一个新的网段,那岂不是之前设置的又需要重新修改,那估计TCP/IP的体系也没人使用了,使用起来太麻烦,不方便维护跟扩展,所以呢,出了一个应用层协议---DHCP。
DHCP带来了什么功能?
回想下自己平时电脑、手机、平板在接入无线路由器后是不是直接就可以上网了,并没有说去设置IP、掩码、网关等参数,这正式因为家用路由器默认是开了DHCP,而使用的终端设备也处于DHCP模式下,所以接上去就可以自动从家用路由器获取对应的参数信息,然后进行上网,是不是就简化了操作,因为实际中不可能指望普通用户还懂什么IP地址设置,所以DHCP出来解决了这个问题。
刚开机的终端由于是自动获取模式,那它本身是没有IP地址等参数的,那它怎么跟服务器去进行沟通呢?搭建一个环境,来看看整个过程。
DHCP服务器配置还没有讲解,这个提前做好了,该环境会直接发出,大家直接打开就可以。
客户端点击应用后,抓包就显示报文了,4个包。
(1)DHCP Discover
从上面能得到什么信息呢?
简化总结:终端默认没有地址,以Discover广播寻找DHCP服务器,请求地址、掩码、网关、DNS等参数
(2)DHCP Offer
从上面能得到什么信息呢?
简化总结:服务端收到以后,从自己的地址池中分配可用地址,以及自己知道的其他参数一起推送给客户端,以单播回应客户端。(简单理解【服务器】:我这边给你这个地址,以及我知道的参数,看行不行。)
(3)DHCP Request
从上面能得到什么信息呢?
简化总结:第三个用于向服务端请求对应的信息,这个地址跟对应的参数信息都挺喜欢的,给我吧
(4)DHCP ACK
简化总结:告诉客户端,没问题,你用吧,这些参数收好,至此客户端就获取到地址了。
几个疑惑的地方,不知道整体抓包下来细心的你有没有发现几个疑惑的地方
(1)DHCP offer跟ACK到底用广播还是单播呢?
其实这个完全取决于客户端,不知道注意到没有,在客户端发送的Discovery/Requeset里面有这样一个字段。
(2)TCP/IP协议栈没地址前的处理问题?
在之前学习的理论中是没有获取到IP的时候,是只能处理广播报文,destination =255.255.255.255,但是在随着系统的优化,有的系统使用的TCP/IP协议栈,改变了一下规则,只要二层的目的MAC是自己或者是全F广播,三层的destination = Any的IP报文,也会进行处理,DHCP兼容这两种方式,使用哪种方式取决于客户端来决定,如果客户端支持destination =Any的则Bootpflagds=0,如果不支持则=1(大部分Windows7开始就已经支持,抓包可以发现Bootp flagds是=0的)
(3)服务端单播回复有什么好处呢?
我们在二层以及三层中都学过广播的概念,那广播跟单播有什么区别呢?
那广播有什么坏处呢?假设一个局域网内有200台终端(同一个网段),一个终端在请求地址,发送的是广播报文来找服务端,那该局域网内的其他所有主机都会收到这个广播报文,除了DHCP服务端以外,其余终端解封装后发现跟自己没关系,就丢弃了,可以看到广播其实对于一个局域网来说会消耗不必要的带宽资源,并且浪费主机的CPU资源,所以协议的设计跟优化中,会尽力的去避免使用广播。
回过头在来看DHCP offer与ACK为什么使用单播,因为客户端支持这个功能特性,只要Bootp flags=0,服务端会用单播回复客户端的请求,这样可以不影响到其他的主机,这是一种优化。
(4)服务端是怎么知道客户的MAC地址的呢?
之前学过要知道客户的MAC地址必须使用ARP,但是这里客户端连地址都没有,不可能使用ARP了,如果仔细看过报文字段内容的话,里面有一个Client HardwareAddress内容,里面就包含了客户端的MAC,服务端自然就知道客户端的MAC地址是多少了。
(5)假设网络中有多个DHCP服务器存在,那么客户端会使用哪个呢?
如果网络中有多个DHCP存在,客户端会以先收到的谁的offer就使用哪个,所以这样很容易出现问题,比如一个网络中接入了一个小路由器,那么可能导致下面主机获取到错误的参数,导致无法上网,这个后面会讲解决办法。
(6)那这地址是永久的吗?假设该终端获取地址后,过一会就离开回家了,DHCP服务器会怎么处理?
在服务端回应的Offer与ACK中携带了参数的,就是红色框框中,有三个,分别有什么作用呢?
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有