网吧技术必备理论:DHCP协议原理!
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网吧很多时候,有用到DHCP服务,比如无盘系统服务端所提供的DCHP服务,路由器的DCHP服务,网克时候,所使用的网克服务端DHCP服务等,而且很多同学,不理解DHCP服务到底是啥,那么看这篇DCHP协议原理,你请会明白。
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP 参数。了解DHCP工作过程可以帮助我们排除有关DHCP服务遇到的问题。DHCP 协议是基于UDP层之上的应用,本文结合抓报所得数据分析DHCP协议实现原理。
一、先了解一下需要抓取的DHCP报文
客户发出的IP租用请求报文
DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名。
DHCP回应的IP租用提供报文
任何接收到DHCPDISCOVER广播包并且能够提供IP地址的DHCP服务器,都会通过UDP端口68给客户机回应一个DHCPOFFER广播包,提供一个IP地址。该广播包的源IP地址为DCHP服务器IP,目标IP地址为255.255.255.255;包中还包含提供的IP地址、子网掩码及租期等信息。
客户选择IP租用报文
客户机从不止一台DHCP服务器接收到提供之后,会选择第一个收到的DHCPOFFER包,并向网络中广播一个DHCPREQUEST消息包,表明自己已经接受了一个DHCP服务器提供的IP地址。
该广播包中包含所接受的IP地址和服务器的IP地址,所有其他的DHCP服务器撤消它们的提供以便将IP地址提供给下一次IP租用请求。
DHCP服务器发出IP租用确认报文
被客户机选择的DHCP服务器在收到DHCPREQUEST广播后,会广播返回给客户机一个DHCPACK 消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。
客户配置成功后发出的公告报文
客户机在收到DHCPACK包,会使用该广播包中的信息来配置自己的TCP/IP,则租用过程完成,客户机可以在网络中通信。
至此一个客户获取IP的DHCP服务过程基本结束,不过客户获取的IP一般是用租期,到期前需要更新租期,这个过程是通过租用更新数据包来完成的。
客户IP租用更新报文
(1)在当前租期已过去50%时,DHCP客户机直接向为其提供IP地址的DHCP服务器发送DHCPREQUEST消息包。如果客户机接收到该服务器回应的DHCPACK消息包,客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数,更新自己的配置,IP租用更新完成。如果没收到该服务器的回复,则客户机继续使用现有的IP地址,因为当前租期还有50%。
(2)如果在租期过去50%时未能成功更新,则客户机将在当前租期过去87.5%时再次向为其提供IP 地址的DHCP联系。如果联系不成功,则重新开始IP租用过程。
(3)如果DHCP客户机重新启动时,它将尝试更新上次关机时拥有的IP租用。如果更新未能成功,客户机将尝试联系现有IP租用中列出的缺省网关。如果联系成功且租用尚未到期,客户机则认为自己仍然位于与它获得现有IP租用时相同的子网上(没有被移走)继续使用现有IP地址。如果未能与缺省网关联系成功,客户机则认为自己已经被移到不同的子网上,将会开始新一轮的IP租用过程。
DHCP客户机在发出IP租用请求的DHCPDISCOVER广播包后,将花费1秒钟的时间等待DHCP服务器的回应,如果1秒钟没有服务器的回应,它会将这一广播包重新广播四次(以2,4,8和16秒为间隔,加上1~1000毫秒之间随机长度的时间)。
四次之后,如果仍未能收到服务器的回应,则运行Windows 2000的DHCP客户机将从169.254.0.0/16这个自动保留的私有IP地址(APIPA)中选用一个IP地址,而运行其他操作系统的DHCP客户机将无法获得IP地址。DHCP客户机仍然每隔5分钟重新广播一次,如果收到某个服务器的回应,则继续IP租用过程。
二、抓包分析
用户从DHCP获取IP过程如下:
1、用户发出DHCPDISCOVER报文
开始抓报文时首先执行的IPCONFIG/RELEASE命令的作用是用来释放IP,这条报文后面分析,在释放IP后执行的更新IP命令IPCONFIG/RENEW将发起一个DHCP过程,分析从这里开始。现在,客户机没有地址,它就会发出一个DHCPDiscover报文,该报文是广播报文,所有的具有DHCP Server功能的服务器都会收到该报文。
该报文是在链路层中发的广播报文,由于DHCP协议是初始化协议,更简单的说,就是让终端获取IP 地址的协议,既然终端连IP地址都没有,何以能够发出IP报文呢?
为了解决这个问题,DHCP报文的封装采取了如下措施:
(1)首先链路层的封装必须是广播形式,即让在同一物理子网中的所有主机都能够收到这个报文。在Ethernet_II格式的网络中,就是目标MAC为全1。
(2)由于终端没有IP地址,IP头中的原IP规定填为全0。
(3)当终端发出DHCP请求报文,它并不知道DHCP SERVER的IP地址,因此IP头中的目标IP 填为子网广播IP——全1,以保证DHCP SERVER的IP协议栈不丢弃这个报文。
(4)上面的措施保证了DHCP SERVER能够收到终端的请求报文,但仅凭链路层和IP层信息,DHCP SERVER无法区分出DHCP报文,因此终端发出的DHCP请求报文的UDP层中的源端口为68,目标端口DstPort为67。即DHCP SERVER通过知名端口号67来判断一个报文是否是DHCP报文。
(5)DHCP协议的报文中主要数据格式详解:
Boot record type为1时表示是Client的请求,为2时表示是Server的应答。
Hardware address typeClient 的网络硬件地址类型,1表示Client 的网络硬件是10MB的以太网类型。
/Hardware address lengthClient 的网络硬件地址长度,6表示Client 的网络硬件地址长度是6bytes (即以太网类型的6bytes的MAC地址)。
HOPS跳数,表示当前的DHCP报文经过的DHCP RELAY(中级)的数目,每经过一个DHCP中继,此字段就会加1,此字段的作用是限制DHCP报文不要经过太多的DHCP RELAY,协议规定,当“hops”大于4(现在也有规定为16)时,这个DHCP报文就不能再进行处理,而是丢弃。
Transaction id事务ID,Client每次发送DHCP请求报文时选择的随机数,用来匹配server的响应报文是对哪个请求报文的响应。Client会丢弃“ID”不匹配的响应报文。
Elapsed boot time秒数,用来表示client开始DHCP请求后的时间流逝秒数:
flags标志,在BOOTP中此字段是保留不用的,在DHCP协议中也只使用了其左边的最高位;
Client self-assigned IPaddress客户机IP地址;
Client IP address server分配给client的IP地址;
Next Server to use in bootstrap服务器IP地址;
Relay AgentDHCP中继代理IP地址;
Client hardware address客户机硬件地址MAC;
Host name 服务器的主机名;
Boot file nameClient 的启动配置文件名。
Vendor Information tag选项字段,此字段中包含了大量可选的终端初始配置信息和网络配置信息,对于BOOTP协议,此字段为64bytes,对于DHCP协议,此字段为64—312 bytes。其中最常用的选项列表如下:
Dhcp message typecode = 53,length = 1,value= 1-8,此字段表示DHCP报文类型;
Router Ipcode = 3,length = IP地址长度,value=client的默认网关的IP地址;
DNS Ipcode = 6,length = IP地址长度的倍数,value= client的DNS服务器的IP地址序列;
Wins Ipcode = 44,length = IP地址长度的倍数,value= client的WINS服务器的IP地址序列;
Client idcode = 61,length = client的网络硬件地址的长度+2,value=“htype”+“hlen”+ client的硬件地址;
server idcode = 54,length = IP地址长度,value= DHCP SERVER的IP地址;
其中我们要注意Transaction ID=CF04CD61和DHCP Message Type一项中type=Discover,前一项表示会话ID,即DHCP Server发回的响应报文中该结构的数值要与发出去的DHCP Discover中的该结构数值一样,后一项说明DHCP报文类型为Discover类型报文。