DHCP简介
DHCP基本概念
DHCP(动态主机配置协议)(Dynamic Host Configuration Protocol)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。
当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。
DHCP具有以下功能
- 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
- DHCP应当可以给用户分配永久固定的IP地址。
- DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。
- DHCP服务器应当向现有的BOOTP客户端提供服务。
DHCP有三种机制分配IP地址:
-
自动分配方式(AutomaticAllocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
-
动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
-
手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。 DHCP消息的格式是基于BOOTP(Bootstrap Protocol)消息格式的,这就要求设备具有BOOTP中继代理的功能,并能够与BOOTP客户端和DHCP服务器实现交互。BOOTP中继代理的功能,使得没有必要在每个物理网络都部署一个DHCP服务器。RFC 951和RFC 1542对BOOTP协议进行了详细描述。
DHCP的优点
-
减少管理员的工作量
-
避免IP地址冲突
-
当前网络更改IP地址段时,不需要再重新配置每个用户的IP地址
-
提高IP地址的利用率
-
方便客户端的配置
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 协议包的组成
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 客户端
- DHCP客户端一般来说是局域网中独立的PC主机。
- DHCP客户端发出的DHCP DISCOVER包是DHCP协议的开始。
- 延续租期、发现、释放IP地址等大多数DHCP中的行为都是由DHCP客户端主动发起。
DHCP 自动状态机
- DHCP获得ip地址的4步骤:discover>offer>request>ack(nak)
- DHCP刷新租期的步骤:request>ack(nak)
- DHCP释放ip的步骤:release
wnr2000v5 1.0.0.8的代码中没有发现rebooting、initreboot状态。所以DHCP client的状态一般从init开始,完整的状态机如下图(红色代表客户端的状态跳转):
服务端
DHCP SERVER指的是服务器端,在路由器上体现的就是给LAN端动态分配IP的功能。DHCP SERVER负责接收客户端的DHCP请求,管理LAN端所有的IP网络设定资料,相比于BOOTP,DHCP通过“租约”来实现动态分配IP的功能,实现IP的时分复用,从而解决IP资源短缺的问题。其地址分配方式有三种,分别是人工配置(由管理员对每台具体的计算机指定一个地址),自动配置(服务器为第一次连接网络的计算机分配一个永久地址),动态配置(在一定的期限内将地址租给计算机,租期结束后客户必须续租或者停用该地址),而对于路由器,经常使用的地址分配方式是动态配置。
两个租约表