DHCP介绍(DHCP交互过程以及相关抓包分析)

DHCP 简介

DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,前身是BOOTP协议。在大型局域网中,需要给很多主机配置地址信息,如果采用传统手工配置(累死),效率太低,因此采用此协议可以很方便的给主机配置各种地址信息,例如IP地址,SubMask、网关地址、DNS等等。下面进行简单介绍,下面所述中Client值得就是DHCP Client,Server指的是DHCP Server。

DHCP的报文种类以及作用

DHCP message 介绍

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 Client和Server交互过程

DHCP报文字段格式

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 状态转换图
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
DHCP Discovee
3、DHCP Offer
DHCP Offer
4、DHCP Request
DHCP Request
5、DHCP ACK
DHCP ACK
6、DHCP NAK
DHCP NAK
7、租约快要过期的DHCP Request
DHCP Request

说明

1、对于Server端是广播还是单播回复Client,需要看Client报文中设置的flags的广播标志位(图中的标识,是按照标志位来看的)。另外DHCP NAK一直都是广播回复的。
2、参看的RFC文档有RFC 2132 RFC 1541
3、后续有什么补充,可能会写在评论里或者另外的文章中
4、如果有什么不对的地方,请积极指出,我也是处于学习状态

  • 14
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值