1、DHCP定义
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP参数。
协议结构
8 bits | 16 bits | 24 bits | 32 bits |
Op | Htype | Hlen | Hops |
Xid | |||
Secs | Flags | ||
Ciaddr | |||
Yiaddr | |||
Siaddr | |||
Giaddr | |||
Chaddr (16 bytes) | |||
Sname (64 bytes) | |||
File (128 bytes) | |||
Option (variable) |
- Op – 消息操作代码,既可以是引导请求(BOOTREQUEST)也可以是引导答复(BOOTREPLY)
- Htype – 硬件地址类型
- Hlen – 硬件地址长度
- Xid –处理ID
- Secs –客户机地址获取,进程恢复消耗的时刻
- Flags –标记
- Ciaddr –客户机 IP地址
- Yiaddr –“你的”(客户机) IP 地址
- Siaddr –在 bootstrap 中使用的下一台服务器的IP地址
- Giaddr –用于导入的接替代理IP地址
- Chaddr –客户机硬件
- Sname –任意服务器主机名称,空终止符
- File –DHCP 发现协议中的引导文件名、空终止符、属名或者空,DHCP供应协议中的受限目录路径名
- Options –可选参数字段。参考定义选择列表中的选择文件
2、DHCP工作原理
- DHCP请求IP地址的过程
1)发现阶段:即DHCP客户端寻找DHCP服务器的阶段。DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址,只有DHCP服务器才会响应。
2)提供阶段:即DHCP服务器提供IP地址的阶段。DHCP服务器接收到客户端的DHCPDISCOVER报文后,从IP地址池中选择一个尚未分配的IP地址分配给客户端,都会通过UDP端口68向该客户端发送包含租借的IP地址和其他配置信息的DHCPOFFER包。
3)选择阶段:即DHCP客户端选择IP地址的阶段。如果有多台DHCP服务器向该客户端发送DHCPOFFER包,客户端从中随机挑选,然后以广播形式向各DHCP服务器回应DHCPREQUEST包,宣告使用它挑中的DHCP服务器提供的地址,并正式请求该DHCP服务器分配地址。其它所有发送DHCPOFFER包的DHCP服务器接收到该数据包后,将释放已经OFFER(预分配)给客户端的IP地址。 如果发送给DHCP客户端的DHCPOFFER包中包含无效的配置参数,客户端会向服务器发送DHCPCLINE包拒绝接受已经分配的配置信息。
4)确认阶段:即DHCP服务器确认所提供IP地址的阶段。当DHCP服务器收到DHCP客户端回答的DHCPREQUEST包后,便向客户端发送包含它所提供的IP地址及其他配置信息的DHCPACK确认包。然后,DHCP客户端将接收并使用IP地址及其他TCP/IP配置参数。
某日连接无线网络的结果,提示网络状态受限制或者信号非常低,实际上就是不能上网,ipconfig查看获得的ip地址为169.254.X.X,感到非常奇怪,为啥会有这样的状态呢?原来DHCP还有这样的机制:DHCP客户机在发出IP租用请求的DHCPDISCOVER广播包后,将花费1秒钟的时间等待DHCP服务器的回应,如果1秒钟没有服务器的回应,它会将这一广播包重新广播四次(以2,4,8和16秒为间隔,加上1~1000毫秒之间随机长度的时间)。四次之后,如果仍未能收到服务器的回应,则运行Windows 的DHCP客户机将从169.254.0.0/16这个自动保留的私有IP地址(APIPA)中选用一个IP地址,而运行其他操作系统的DHCP客户机将无法获得IP地址。DHCP客户机仍然每隔5分钟重新广播一次,如果收到某个服务器的回应,则继续IP租用过程。
由此可知,169.254.X.X是Windows操作系统在DHCP信息租用失败时自动给客户机分配的IP地址..
- DHCP客户端续租IP地址的过程
DHCP服务器分配给客户端的动态IP地址通常有一定的租借期限,期满后服务器会收回该IP地址。如果DHCP客户端希望继续使用该地址,需要更新IP租约。实际使用中,在IP地址租约期限达到一半时,DHCP客户端会自动向DHCP服务器发送DHCPREQUEST包,以完成IP租约的更新。如果此IP地址有效,则DHCP服务器回应DHCPACK包,通知DHCP客户端已经获得新IP租约。
如果DHCP客户端续租地址时发送的DHCPREQUEST包中的IP地址与DHCP服务器当前分配给它的IP地址(仍在租期内)不一致,DHCP服务器将发送DHCPNAK消息给DHCP客户端。
- DHCP客户端释放IP地址的过程
DHCP客户端已从DHCP服务器获得地址,并在租期内正常使用,如果该DHCP客户端不想再使用该地址,则需主动向DHCP服务器发送DHCPRELEASE包,以释放该地址,同时将其IP地址设为0.0.0.0。
vivilisa 05.20.2009