摘要
1、在这篇博客中https://blog.youkuaiyun.com/Kuaisen/article/details/107568797讲述了DHCP的工作流程、状态转换以及报文的分析。
2、但是对于一些具体的细节没有说明,比如,报文的字段,Client和Server又怎么使用,对于DHCP的状态又怎么去区别等等,下面就阐述一下
关键词说明
引用了在RFC文档中常用到的关键词说明
MUST:表示必须携带,不携带就是不正确
MUST NOT:表示绝对不可以携带
SHOULD:表示推荐使用此选项
SHOULD NOT:表示不推荐使用,除非有其他可接受的理由
MAY:表示可选的,不同厂商根据项目特定需求可加可不加
Client的报文填充
具体了解client在组装各种封包是,应该填充哪些字段?字段的值是怎么来的?也可以看出一些特点,比如yiaddr、siaddr以及giaddr字段
client都不需要关心。htype和hlen的值根据硬件类型来决定,图中标出的是常用的10M以太网,其他类型在ARP协议中有所定义
Server的报文填充
client填充的相关options
区别这些有什么用?一是帮助我们知道在组装报文时,哪些一定要填,哪些一定不要填,哪些可以自己按照情况进行配置?
二是,在收到各种报文时,第一步就需要检查这些报文是否正确,才可以进行后面的处理。特别是标注Must和Must not的,
如果收到一种报文,没有包含Must要求的选项或者包含可Must not的选项,那么就需要丢弃这个报文。下面serevr端的也是一样。
options字段的定义,可以参考另一篇文档。https://blog.youkuaiyun.com/Kuaisen/article/details/107772481
Server填充的相关options
server通过收到的报文如何知道DHCP的状态
特别是收到DHCP Request报文时,此时DHCP可能处于四种状态,必须要判断各种状态,进行不同处理,下面的图列出
集中不同状态的特征。
根据上述的特征,就可以很容易区别DHCP状态,例如下面的流程图,供参考:
说明
1、参考了RFC 2131,以及个人再看DHCP源码是总结的部分
2、对之后的错误或者补充将在评论或者其他篇幅中阐述