dhcp的简介

来源:互联网 发布:linux挂载 编辑:程序博客网 时间:2024/05/18 02:50
DHCP协议简介

        本文简单介绍DHCP协议的相关内容,内容大部分来自网络中的总结,如有问题,可以通过后面的方式交流。

主要内容:
一、简介
二、原理
三、其它

一、简介
===================
        DHCP动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,它的前身是 BOOTP,它使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。通过DHCP,我们可以省去传统在内网中手动为每一台机器分配静态IP、以及相关的配置、以及保证分配的IP不会冲突等麻烦。

二、原理
===================
        这里通过DHCP服务和客户端的工作过程,简单介绍DHCP协议原理。DHCP的工作过程大致如下:
1、发现阶段
        即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCPDiscover包来寻找DHCP服务器(即向地址255.255.255.255发送DHCPDiscover包),网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会响应。
        根据客户端是否第一次登录网路,DHCP 的工作形式会有所不同。当 DHCP 客户端第一次登录网路的时候,它会发现本机上没有任何IP资料设定,于是它会向网络广播一个DHCPDISCOVER封包,因为客户端还不知道自己属于哪一个网路,所以封包的来源位址会为 0.0.0.0 ,而目的位址则为 255.255.255.255(即广播地址)。
        在 Windows 的预设情形下,当客户端将第一个Dhcpdiscover封包送出去之后,在1秒之内没有得到回应的话,就会进行第二次Dhcpdiscover广播。若一直得不到回应,客户端一共会有四次Dhcpdiscover广播(包括第一次在内),第一次会等待 1 秒,其余三次的等待时间分别是 9﹑13﹑16 秒。如果都没有得到DHCP服务器的回应,客户端则会显示错误信息,宣告Dhcpdiscover的失败。我们还可以选择系统5 分钟之后再重复一次Dhcpdiscover的过程之类的等。

2、提供阶段
        即DHCP服务器提供IP地址的阶段。在网络中接收到DHCPDiscover包的DHCP服务器向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCPoffer包。
        当DHCP服务器监听到客户端发出的Dhcpdiscover广播包后,它会从那些还没有租出的地址范围内,选择最前面的空闲IP,连同其它TCP/IP设定,封装成一个DHCPOFFER包回应给客户端。
        由于客户端在开始的时候还没有 IP 位址,所以在其Dhcpdiscover封包内会带有其 MAC 位址信息,并且有一个XID编号来辨别该封包,DHCP服务器根据这些信息,将回应的Dhcpoffer封包传递给要求租约的客户。根据服务器端的设定,Dhcpoffer封包会包含一个租约期限的信息。

3、选择阶段
        即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。DHCP客户机接受第一个收到的DHCPoffer包的信息,然后它以广播方式回答一个DHCPrequest包,其中包含向它所选定的DHCP服务器请求IP地址的内容。
        如果客户端收到网路上多台DHCP服务器的回应,则只会挑选其中一个Dhcpoffer 而已(通常是最先抵达的那个),并且会发送一个Dhcprequest广播封包,告诉网络上的所有DHCP服务器,它将指定接受哪一台服务器提供的 IP地址。同时,客户端还会向网络广播一个ARP封包,查询网路上面有没有其它机器使用该IP地址;如果发现该IP已经被占用,客户端则会送出一个DHCPDECLINE封包给DHCP服务,拒绝接受其Dhcpoffer,并重新发送Dhcpdiscover信息。
        事实上,并不是所有DHCP客户端都会无条件接受DHCP服务器的offer,客户端可以向Dhcprequest包中的DHCP Option Field字段填写不同的号码,以向服务器提出DHCP选择(例如子网掩码、路由、DNS服务器等等)。

4、确认阶段
        即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCPack包,告诉DHCP客户机可以使用它所提供的IP地址。
        当 DHCP服务器收到客户端的Dhcprequest之后,会向客户端发出一个DHCPACK回应,以确认IP租约正式生效,这样就结束了一个完整的 DHCP工作过程。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

5、重新登录
        以后DHCP客户机每次重新登录网络时,就不需要再发送DHCPdiscover包了,而是直接发送包含前一次所分配的IP地址的DHCPrequest包,当此IP地址已无法再分配给原来的DHCP客户机使用时,再重新发送DHCPdiscover包来请求新的IP地址。
        一旦DHCP客户端成功地从服务器取得过DHCP租约之后,除非其租约已经失效并且IP地址址也重新设为0.0.0.0 ,否则就无需再发送Dhcpdiscover信息了。再次登陆之时,客户端而会直接使用已经租用到的IP位址向之前的DHCP服务器发送Dhcprequest信息,DHCP服务器会尽量让客户端使用原来的IP地址,如果没问题的话,服务器直接回应Dhcpack给客户端完成租约确认,如果该地址已经失效或已经被其它机器使用了,服务器则会回应一个 DHCPNACK 封包给客户端,要求其从新执行 Dhcpdiscover。

6、更新租约
        DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。
        这里的IP租约期限并非如我们租房子那样简单。以 NT为例:DHCP 工作站除了在开机的时候发出 dhcprequest 请求之外,在租约期限一半的时候也会发出 dhcprequest ,如果此时得不到 DHCP 服务器的确认的话,工作站还可以继续使用该 IP ;然后在剩下的租约期限的再一半的时候(即租约的75%),还得不到确认的话,那么工作站就不能拥有这个 IP 了。要是您想退租,可以随时送出 DHCPLEREASE 命令解约。

7、总结
        下面是一个直观的总结。假设我们把DHCP客户机比做餐馆里的客人,DHCP服务器比做服务员(一个餐馆里也可以有多个服务员),IP地址比做客户需要的食物。那么可以这样描述整个过程:
(1)客人走进餐馆,问:“有没有服务员啊?”(DHCPdiscover);
(2)多个服务员同时回答:“有,我这有鸡翅”“有,我这有汉堡”(DHCPoffer)。
(3)客人说:“好吧,我要一份汉堡”(DHCPrequest,这个客人比较死板,总是选择第一次听到的食物);
(4)端着汉堡的服务员回应了一声:“来啦”(DHCPack),并把食物端到客人面前,供其享用(将网卡和IP地址绑定)。
(5)客人下次来的时候,就直接找上次那个服务员点自己喜欢的汉堡了(DHCPrequest);
(6)如果还有汉堡,服务员会再次确认并上菜(DHCPack),而如果已经卖完了,服务员则会告诉客人:“不好意思,已经卖完了”(DHCPnack)。
(7)当然,服务员隔一段时间会来收拾一次桌子,除非客人特别说明这菜还要继续吃的,服务员会将剩菜端走。

三、其他
===================
        上述过程所需的信息,我们都可以通过DHCP包的格式来找到。另外,对于跨网路的 DHCP 运作,从前面描述的过程中,我们不难发现:DHCDISCOVER 是以广播方式进行的,因为 router 是不会将广播传送出去的,所以上述过程只能在同一网络中进行。如果 DHCP 如果在其它的网路上面,由于 DHCP 客户端没有 IP 环境设定,所以也不知道 Router 的IP地址,并且有些 Router 也不会将 DHCP 广播封包传递出去,因此这时DHCPDISCOVER 是永远没办法抵达 另外网络中的DHCP服务器那端的,所以当然也不会发生 OFFER 及其他动作了。
        要想使用网络外面的DHCP服务器提供服务,我们可以用 DHCP Agent (或 DHCP Proxy )主机来接管客户的 DHCP 请求,然后将此请求传递给真正的 DHCP服务器,然后再将服务器的回复传给客户。这里,Proxy 主机必须自己具有路由能力,且能将双方的封包互传对方。若不使用 Proxy,我们也可以在每一个网路之中安装DHCP伺服器,但这样的话,设备成本会增加,而且,管理上面也比较分散,如果在一个十分大型的网路中,这样的均衡式架构还是可取的。
0 0
原创粉丝点击