`DHCP介绍(DHCP交互过程以及相关抓包分析)`
DHCP 简介
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,前身是BOOTP协议。在大型局域网中,需要给很多主机配置地址信息,如果采用传统手工配置(累死),效率太低,因此采用此协议可以很方便的给主机配置各种地址信息,例如IP地址,SubMask、网关地址、DNS等等。下面进行简单介绍,下面所述中Client值得就是DHCP Client,Server指的是DHCP Server。
DHCP的报文种类以及作用
DHCP工作流程
1、DHCP Client启动后,如果打开了DHCP功能,那么会以广播方式发送请求报文DHCP Discover,表示寻找DHCP Server给我分配地址信息。
2、可能有多个DHCP Server收到DHCP Discover报文,此时DHCP Server查找静态列表是否有相关静态分配的地址,如果没有就尝试从地址池分配一个ip地址,为了保证这个IP地址可以使用,一般DHCP Server还会发送几个ICMP请求报文,如果没有响应报文,那么就预分配给DHCP Client,DHCP Server以单播/广播(查看后面的说明)发送响应报文DHCP Offer,此时DHCP Offer报文还带有其他附加信息,比如租约时间,子网地址等
3、DHCP Client可能会收到多个DHCP Server的响应的DHCP Offer报文,选择一个最先接收到的报文,DHCP Client收到后,广播发送DHCP Request报文,此时报文附加有选择的DHCP Server的ip地址,一是告诉这个DHCP Server我选择了你,二是告诉其他DHCP Server我没有选择你们
4、DHCP Server收到DHCP Request报文后,再次检查分配的ip地址是否可以分配(不发送ICMP报文了),如果可以分配,就反馈一个DHCP ACK给DHCP Client此时报文带有IP地址、子网掩码等。如果不可以分配就广播发送DHCP NAK报文。
5、DHCP Client如果收到DHCP ACK后,会再连续发送三个ARP请求报文,检查地址是否可用,如果可用就代表分配成功,如果发现不可用就广播发送DHCP Decline报文给DHCP Server,并重新开始请求过程。如果收到DHCP NAK,那么DHCP Client会重新开始请求过程。
6、DHCP Server如果收到DHCP Decline报文,会把这个分配的IP地址加入不可分配条目。
7、如果DHCP Client不想使用这个ip地址了,就单播发送DHCP Release。表示释放这个地址,DHCP Server取消地址租期。
8、如果当前地址租约到达50%,那么DHCP Client就会单播向DHCP Server发送DHCP Request报文,表明我要续租,如果DHCP Server收到报文,可能回复DHCP ACK报文并更新租约时间。如果没有回复,租期到达87.5%时,DHCP Client还会单播发送DHCP Request报文,如果收到并回复DHCP ACK那么更新租约时间。如果不回复等到租约到期DHCP Client发送DHCP Release报文,释放地址。
说明:在DHCP Request报文后,如果DHCP Server验证地址不可以分配,也可能广播发送DHCP NAK报文,那么DHCP Client就会重新开始请求过程
具体工作流程如下图:
DHCP报文字段格式
字段描述:
1、op(1):Message op code / message type报文类型,1 = BOOTREQUEST 2 = BOOTREPLY,即为1时表示client—>server
为2时表示server—>client.就是发送报文的方向
2、htype(1):Hardware address type 硬件地址类型,规定10M Ethernet为1
3、hlen(1):Hardware address length 硬件MAC地址长度,规定10M Ethernet为6
4、hops(1):跳数,客户端设置为0,一般由中继代理设置,当DHCP server不在一个子网内时使用
5、xid(4):Transaction ID 由客户端产生的随机数,用于关联客户端与服务器后续的收发消息
6、secs(2):seconds 由客户端填写,自客户端开始地址获取或续订过程以来经过的秒数
7、flags(2):标志位,最左端一位是Boardcast Flag广播标志位,为1表示要求server广播方式回应,0 表示单播,其余位保留为0
8、ciaddr(4):client ip address 客户端IP地址,只在dhcp状态为BOUND RENEWING REBINDING使用 其他填写0
9、yiaddr(4):your ip address,由server填写,分配给client的IP address
10、siaddr(4):next server ip address,下一个bootstrap的server ip地址
11、giaddr(4):Relay agent IP address,DHCP中继的地址,如果DHCP server和主机不在一个网段,则需要使用DHCP 中继。在发包时,由中继接力发送给server,server发送包时由中继转发给client
12、chaddr(16):client MAC address,客户端的MAC地址6字节,client hardware address padding 10字节
13、sname(64):server host name。server的主机名,如果options字段指定serevr的标识项则使用
14、file(128):Bootfile name 启动文件名,如果option字段的tftp选项打开则使用,用于启动系统的文件,这里指定文件名,options里面指定配置参数,比如tftp的服务器地址,中间可能需要DNS来解析tftp服务器的地址
15、option(variable):可选字段,必须带有Magic cookie,固定值十六进制为(63 82 53 63)
可选字段每一段由code+length+value
DHCP状态
DHCP 有八种状态,其中INIT_REBOOT表示Client开机状态,此时会直接发送DHCP Request报文请求上次分配的IP地址。
其中可以看出Client发送DHCP Request报文后,DHCP的可能处于四种状态,SELECTING、RENEWING、REBINDING以及INIT_REBOOT。对于Server收到DHCP Request报文,不同的状态Server要进行不同的状态。
DHCP抓包报文分析
1、全部分报文交互过程
2、DHCP Discover
3、DHCP Offer
4、DHCP Request
5、DHCP ACK
6、DHCP NAK
7、租约快要过期的DHCP Request
说明
1、对于Server端是广播还是单播回复Client,需要看Client报文中设置的flags的广播标志位(图中的标识,是按照标志位来看的)。另外DHCP NAK一直都是广播回复的。
2、参看的RFC文档有RFC 2132 RFC 1541
3、后续有什么补充,可能会写在评论里或者另外的文章中
4、如果有什么不对的地方,请积极指出,我也是处于学习状态