目录
1.DHCP概要
- DHCP(Dynamic Host Configuration Protocol),动态主机配置协议
- 局域网的网络协议
- 基于UDP协议实现(需要广播查找)
- 常用端口:服务端 67 客户端 68
- 主要作用动态分配IP地址
2.DHCP工作原理
DHCP的实现分为4步,分别是:
①:Client端 发起 DHCP Discover包,目的是想发现 DHCP Server;
②:DHCP Server接收到Discover包后,发送DHCP Offer包给Client端,告诉Client端可以提供IP地址;
③:Client端接收到Offer包后,发送DHCP Request包请求分配IP;
④:DHCP Server端发送ACK数据包,确认信息。
对应的协议包如下:
3.DHCP报文详解
3.1 协议包类型
序号 | 协议包 | 说明 |
---|---|---|
1 | DHCP DISCOVER (常用) | 客户端开始DHCP过程发送的包,是DHCP协议的开始 |
2 | DHCP OFFER (常用) | 服务器接收到DHCP DISCOVER之后做出的响应,它包括了给予客户端的IP(yiaddr)、客户端的MAC地址、租约过期时间、服务器的识别符以及其他信息 |
3 | DHCP REQUEST(常用) | 客户端对于服务器发出的DHCP OFFER所做出的响应。在续约租期的时候同样会使用。 |
4 | DHCP ACK (常用) | 服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的IP和其他信息可以被允许使用。 |
5 | DHCP NAK (常用) | DHCP ACK的相反的报文,表示服务器拒绝了客户端的请求。 |
6 | DHCP RELEASE | 一般出现在客户端关机、下线等状况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址 |
7 | DHCP INFORM | 客户端发出的向服务器请求一些信息的报文 |
8 | DHCP DECLINE | 当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止 使用该IP地址。 |
3.2 协议包内容
序号 | 协议内容 | 说明 |
---|---|---|
1 | Xid | 随机生成的一段字符串,两个数据包拥有相同的xid说明他们属于同一次会话 |
2 | Ciaddr (关键) | 客户端会在发送请求时将自己的ip地址放在此处 |
3 | Yiaddr (关键) | 服务器会将想要分配给客户端的ip地址放在此处 |
4 | Siaddr (关键) | 一般来说是服务器的ip地址.但是注意!根据openwrt源码给出的注释,当报文的源地址、siaddr、option>server_id字段不一致(有经过跨子网转发)时,通常认为option>srever_id字段为真正的服务器ip,siaddr有可能是多次路由跳转中的某一个路由的ip (下图中wireshark抓包中也有标明siaddr为nextserver ip address) |
5 | Chaddr (关键) | 客户端的mac地址 |
6 | Giaddr | 如果需要跨子网进行DHCP地址发放,则在此处填入经过的路由器的ip地址 |
7 | Sname | 服务器主域名 |
8 | Options | 可以自由添加的部分,用于存放客户端向服务器请求信息和服务器的应答信息 |
4.DHCP常用报文案例
4.1 DHCP DISCOVER
4.2 DHCP OFFER
4.3 DHCP ACK