27 DCHP协议
DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。
主机如何获得IP地址
- 静态配置
- 动态主机配置协议-DHCP
动态主机配置协议-DHCP
DHCP: Dynamic Host Configuration Protocol
从服务器动态获取: • IP 地址 • 子网掩码 • 默认网关地址 • DNS 服务器名称与IP 地址 “即插即用” 允许地址重用 支持在用地址续租 支持移动用户加入网络
DHCP属于应用层协议,它在传输层使用UDP协议,目的端口是67。
DHCP协议中的报文
DHCP报文共有一下几种:
- DHCP DISCOVER :客户端开始DHCP过程发送的包,是DHCP协议的开始
- DHCP OFFER :服务器接收到DHCP DISCOVER之后做出的响应,它包括了给予客户端的IP(yiaddr)、客户端的MAC地址、租约过期时间、服务器的识别符以及其他信息
- DHCP REQUEST :客户端对于服务器发出的DHCP OFFER所做出的响应。在续约租期的时候同样会使用。
- DHCP ACK :服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的IP和其他信息可以被允许使用。
- DHCP NAK :DHCP ACK的相反的报文,表示服务器拒绝了客户端的请求。
- DHCP RELEASE :一般出现在客户端关机、下线等状况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址
- DHCP INFORM :客户端发出的向服务器请求一些信息的报文
- DHCP DECLINE :当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止使用该IP地址。
DHCP 报文格式
DHCP服务的8种报文的格式是相同的,不同类型的报文只是报文中的某些字段取值不同。DHCP报文格式基于BOOTP的报文格式。下面是各字段的说明。
- Xid :随机生成的一段字符串,两个数据包拥有相同的xid说明他们属于同一次会话
- Ciaddr :客户端会在发送请求时将自己的ip地址放在此处
- Yiaddr :服务器会将想要分配给客户端的ip地址放在此处
- Siaddr :一般来说是服务器的ip地址.但是注意!根据openwrt源码给出的注释,当报文的源地址、siaddr、option>server_id字段不一致(有经过跨子网转发)时,通常认为option>srever_id字段为真正的服务器ip,siaddr有可能是多次路由跳转中的某一个路由的ip (下图中wireshark抓包中也有标明siaddr为nextserver ip address)
- Chaddr :客户端的mac地址
- Giaddr :如果需要跨子网进行DHCP地址发放,则在此处填入经过的路由器的ip地址
- Sname :服务器主域名
- Options :可以自由添加的部分,用于存放客户端向服务器请求信息和服务器的应答信息
DHCP过程
主机广播 “DHCP discover”(发现报文) DHCP服务器利用 “DHCP offer” (提供报文) 进行响应 主机请求IP地址: “DHCP request” (请求报文) DHCP服务器分配IP地址: “DHCP ack” (确认报文)
DHCP协议在应用层实现
请求报文封装到UDP数据报中 IP广播 链路层广播(e.g. 以太网广播)
DHCP服务器构造ACK报文
包括分配给客户的IP地址、子网掩码、默认网关、DNS服务器地址