DHCP原理与实践详解.docx
《DHCP原理与实践详解.docx》由会员分享,可在线阅读,更多相关《DHCP原理与实践详解.docx(89页珍藏版)》请在冰豆网上搜索。
![DHCP原理与实践详解.docx](https://file1.bdocx.com/fileroot1/2023-4/16/d3cfe81f-ee4e-469e-95b0-82e86e11fbdf/d3cfe81f-ee4e-469e-95b0-82e86e11fbdf1.gif)
DHCP原理与实践详解
Dhcp原理与配置手册
(一)开篇、概述
从本节开始,我们将开始讨论有关DHCP服务器的相关问题,从易到难一步步理解DHCP服务。
还是一样,在第一节里,首先将介绍有关DHCP的一些基本知识点。
对于一个小型网络来说,为每个客户端分配IP地址是件很轻松的事,无法就是打开网络属性,在合适的地方填入阿拉伯数字即可。
但如果网络规模很大、客户端很多,或者需要对分配下去的IP地址进行统一规划和管理,显然这些需求通过手工配置IP地址是无法实现的。
这样我就需要一个工具来帮我们打点这些繁杂的IP,也就是我们要谈的DHCP。
从字面理解,DHCP是DynamicHostConfigurationProtocol的缩写,即动态主机配置协议。
请注意这里的一个关键字,Dynamic即动态,意为在这个工具管理下的客户端的IP地址并非固定不变的,而是会根据具体的配置而动态变更。
其实,不仅仅是IP,还有很多网络参数都可以通过DHCP进行分配,比如dns地址、wins地址等等。
说到dhcp就需要提一下bootp协议,这个是用于早期的无盘工作站网络中的协议,DHCP在此基础上进行了修改和加强,使之更易于应用和管理。
作为一个基础性的服务,DHCP广泛被部署在企业各种环境中,无论是独立的工作组环境还是集中式的域环境,几乎都少不了DHCP的身影,所以理解并掌握DHCP就显得很重要了。
本系列旨在为大家较详尽地介绍DHCP的诸多知识点、以及与之相关的重要应用,使得大家对DHCP能有一个全面的认识,无法做到面面俱到,只求用自己的切身体会和实际经历来帮助大家更好的掌握DHCP服务。
(二)三种途径
和WINS服务类似,DHCP大体上也由两部分组成,DHCP服务器和DHCP客户端。
那么相对的,也会有非DHCP客户端。
今天这几节先着重讨论在没有DHCP环境下,客户端是如何获取IP地址的。
说到获取IP地址,我们就有必要先到网络连接的属性里去看一下,那里看是IP地址是根据地哦!
打开一个网络连接的属性,如下图:
在【常规】选项中,当我们勾选“自动获得...”也就是图中标记为蓝色的选项,那么系统就会认为用户会通过一个外部程序获取IP地址、子网掩码以及DNS等网络信息。
如果此时您就一口咬定这里所说的“外部程序”就是DHCP服务器的话,不能说错,但至少不完全。
勾选这两项后,意为着客户机获取IP的来源有2个,第一个来源是大家熟知的DHCP服务器,第二个来源是PPP点对点协议。
第一个不用怎么解释,可以很容易想到是DHCP,后面还会详细讲解。
第二个呢?
不急,先说点别的。
我们现在家庭普遍使用的网络接入方式,当然肯定不是古老的56k小猫拨号了,而是DSL专线,这其中又以ADSL占大多数。
这种网络接入方式以普通电话线路做为传输介质,只要在线路两端加装ADSL设备,通过一定的连接方式就可以上网了。
OK,问题来了。
我们知道,要想上网,必须要有一个IP地址,那么类似这样的电话拨号上网,IP地址从何而来?
就是通过自动获取得到的,如何获取?
?
客户端会创建一个拨号程序,然后输入合法有效的用户名和密码然后拨号,服务端接收到拨号请求并初始化连接后,就开始验证用户的身份,一旦身份验证成功,就会从IP地址池中分配一个IP给用户,这样我们就可以上网了。
这么一系列的通讯过程就是建立在PPP协议之上,但并非原生的PPP协议,而是经过一些修改的PPPOE协议,即PPPOverEthernet。
回到这个话题上来,当我们选中【自动获得IP地址和DNS服务器地址】后,就会从电信端的拨号访问服务器中获取一个IP地址,严格来说是电信端分配给用户的。
显然,大家可以知道这里并非由DHCP服务器分配的地址,只是分配的机制类似而已。
但如果客户端并非直接拨号上网,而是通过路由器代为拨号,此时客户端的IP还是来源于DHCP服务器,只是这个服务器内建在路由器内而已。
原理都是一样的。
说了那么一通,是不是有点晕了。
不要紧,稍后我会做个小节,其实非常简单。
我们继续看2个红色的框框,我们可以在其中手工设置IP地址和DNS服务器。
但,有个很蹊跷的地方,不知道大家注意没有。
就是IP地址和DNS并不是成对的。
怎么讲呢?
我们来做个小测试。
当我们选中【使用下面的IP地址】时,在DNS设置区域会自动勾选【使用下面的DNS服务器地址】。
如下图:
因为我们已经有自动获取转为手动,同时为了满足客户端的解析请求,就需要设置一个DNS地址。
因为DNS会随着IP地址一起被指派的,如果关闭了自动获取IP,显然客户端无法自动获取到DNS地址,只能手工指定。
但反之,我们再选择【自动获得IP地址】时,DNS并没有随之变为【自动获得DNS服务器地址】,而还是停留在刚才的状态,此时我们也可以选择【自动获得DNS服务器地址】。
如下图:
为什么会这样?
?
?
到此有人估计要说我无聊了。
。
。
但我觉得微软这样设计一定有他的道理。
个人觉得可能的原因如下:
1、早期dhcp服务器无支持分配DNS的功能,为了保证最大兼容,在自动获取IP的同时,客户还可以手工设置DNS地址。
2、是为APIPA而准备的
第一个好理解写,第二个等讲到APIPA的时候就好理解了。
什么是APIPA?
?
我们先看网络属性的【备用配置】(我的电脑里没有)选项卡。
如下图:
在这里有一个【自动专用IP地址】,我感觉写成【自动获取专用IP地址】这样似乎更容易理解些。
这些就是自动获取IP的三种情况,DHCP、PPP和APIPA。
那到底何为APIPA呢?
(三)理解、APIPA
这是《一起学DHCP》系列的第三节。
上节中,我们提到了APIPA,这节里我们将详细讲解有关APIPA的相关知识点。
当我们将网卡属性设置为自动获取后,如果客户端在一定时间内无法找到并从DHCP服务器或PPP协议获取到IP地址,那么系统就自动启用一种备选方案,也就是使用APIPA给客户端临时分配一个169.254.X.X的IP地址,具体范围是169.254.0.1—169.254.255.254,子网掩码均为255.255.0.0。
这里的APIPA为AutomaticPrivateIPAddressing的缩写,即为自动专用IP寻址, 当系统接入网络后,且长时间无法获取到IP地址,系统为了减少性能消耗(尽管这种消耗微乎其微),就会采取这种措施来避免永不休止的查找。
这是一种应急的机制,作用并不是简单的分配一个IP,请注意这个名称最后的单词,IPAddressing,而并非IPAddress。
那这又有什么区别呢?
稍后就会讲到。
我们先来看一个例子这里我模拟了一个客户端无法联系到DHCP服务器的场景,此时客户端获取到了一个169.254.X.X的IP地址。
如下图:
这里请注意两个地方:
1、我使用的查询命令是ipconfig/all。
大家都知道用这个命令可以把所有的重要参数都查询出来,包括IP地址、掩码、网关、DNS、MAC等等。
但在上图中只有IP地址、掩码和MAC,并没有网关、DNS。
原因是因为APIPA分配的网络信息只包含IP地址和子网掩码,比武其他。
2、请注意IP地址前的名称是“AutoconfigurationIPAddress”,而不是正常情况下的“IPAddress” 。
从这点上我们也可以区别IP地址的来源。
还记得刚才那个问题吗?
为什么DNS可以独立配置呢?
其实也是出于这个的考虑。
我们可以为APIPA手工设置一个DNS地址。
还是刚才的环境,我们为这个地址
169.254.155.85配置一个DNS,1.1.1.1。
如下图:
通过ipconfig/all查询。
如下图:
可以看到,我们为这个地址设置的DNS生效了。
那我们是否可以自己定义在这个IP呢?
当然可以。
在【备用配置】选项卡里,我们还可以手工设置IP地址。
如下图:
别的信息我没有填写,其实都是一样的。
通过这样的设置,其目的在于当DHCP服务器不可用,系统会将此地址分配给该网卡,而不会使用169.254这样的地址。
其实这个功能非常好用。
如何使用?
先来看一个场景,大家也一定都遇到过。
(该情况就是一个物理网络对应多个逻辑网络,有多个DHCP管理一个物理网络)
有这么一个客户,在家时笔记本连接路由器并通过ADSL上网,为网卡设置了一个固定IP地址192.168.1.1。
在公司,内网部署了DHCP,此时会从DHCP服务器获取一个10.0.0.10的IP,这样有两套不同的网络配置,如何做到两边都能顺利使用呢?
通常的解决办法,或是手动修改地址,或是通过第三方软件辅助切换。
但如果将192.168.1.1的IP设置在上图的选项中,那么在家的时候由于没有DHCP,则会自动使用这个地址,在公司,这个地址会被忽略掉,因为存在可用的DHCP服务器,客户端可以直接获取IP地址。
这样一来用户就不用来回切换了,也不必使用第三方软件,基本可以做到无缝连接。
有机会的话,还是希望大家可以试一下这个方法。
我们再回到APIPA上来。
对于默认分配的169.254这样的IP,和我们手工设置的有什么区别呢?
大家千万不要看到网卡连接图标上有一个感叹号就觉得网络肯定有什么问题。
其实不然,我们来做个测试就知道了。
这样有两台主机,主机名分别是win2k3和XP2,都接在一个交换机上。
由于网内没有DHCP服务器,自然都是通过APIPA获取IP地址。
分别查看一下两台主机上的IP地址。
如下图:
Win2k3:
XP2:
在XP2上PING一下Win2k3。
如下图:
网络访问测试。
如下图:
访问Win2k3的C盘。
如下图:
可见,尽管是169.254之类的IP,但其实和我们手动设置的没有什么区别,只是似乎在一个局域网内这样的客户端的最大数量有一个限制,好像是要少于25台,这个我没有测试过,还没有这样的环境,所以无法得知这个限制是否存在。
我们也可以在注册表中将APIPA这个功能禁止掉,可以针对某个网卡,也可以针对全部的网卡。
打开注册表后,请定位到以下位置:
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\这个下面会对应当前网卡的标识符,在相应的标记符下新增一个名为IPAutoconfigurationEnabled
的DWORD值,并将其值设为十六进制的0即可。
修改完成后重启才能生效。
如果想禁用全部网卡的这个功能,则在interfaces下增加相同的键值。
关于禁用APIPA的方法算是个补充知识,稍作了解即可。
还记得之前提到过有关IPAddressing的问题吗?
为什么这里是addressing而不是address呢?
当默认使用APIPA获取一个169.254的地址后,系统并非就这样一直使用这个地址,而是会每隔一段时间就会向网内发送DHCPDISCOVER数据包,这个间隔时间大约是5分钟。
在此期间,系统还会随机进行DHCP服务器的查询,如果查询到DHCP并获得了一个IP,那么就会将169.254的IP释放掉。
从这里我们可以看到,APIPA提供的是一套冗余IP配置和寻址的结合方案,显然这里使用addressing比address意义更广泛。
我们从协议层面来加深一下理解:
主机启动后,就会发送DHCPDiscover包查询DHCP。
如下图:
很显然,由于没有找到DHCP服务器,所以就会得到169.254的IP,但并不表示以后都不在搜索DHCP了,默认情况下会每隔5分钟进行一次集中的查询,其余时间也会进程查询,但由于还有别的程序或者协议在运行,所以就显得不那么集中。
如下图:
到此为止,有关APIPA相关的一些知识点就说完了,下一节会讲到DHCP服务器的安装和配置。
(四)安装、配置
2009-10-2313:
36:
55
标签:
dhcp [推送到技术圈]
一般情况下,为了保证最好的稳定性,通常服务器的IP地址都会设为固定。
DHCP服务器也不例外。
这里我用一个简单的拓扑图来做演示。
如下图:
左侧为DHCP服务器,右侧为一台DHCP客户端。
在未查询DHCP前,XP2暂时还没有IP地址。
但作为DHCP服务器的WIN2K3则需要事先是设置好IP。
一切就绪后,打开【控制面板】,找到【添加或删除程序】/【网络服务】,找到DHCP项。
如下图:
确定后返回到以下界面。
如下图:
点击【下一步】。
如下图:
现在就开始安装了。
如果事先没有设置好IP地址,则在安装过程中会出现一个提示,如下图:
提示需要一个固定IP地址,点击【确定】后,会弹出一个小对话框。
如下图:
这里我们选择合适的网卡,并确定。
然后就可以设置IP地址了(此处省略)
如果事先已经设置好IP,那就不会出现这个提示,直接一步到位。
如下图:
DHCP服务器的安装还是比较简单的,没有太多要说的。
安装完成后会在C:
\WINDOWS\system32\dhcp这个目录下生成dhcp的数据库、还有事务日志文件等。
如下图:
上图中,dhcp.mdb就是DHCP服务器数据库。
我们来看一下DHCP服务器的主界面。
如下图:
可以看到,DHCP的管理界面非常简单,在计算机名称左侧有一个朝上的绿色箭头的图标,这表示DHCP服务器现在运行正常。
但还不算完,必须为DHCP服务器配置一个作用域,简单说就是设定一个IP地址范围。
操作步骤如下:
右键WIN2K3并选择【新建作用域】。
如下图:
这是操作向导的初始界面,选择【下一步】后如下图:
【名称】可以根据需求来填写,【描述】可以空,在建好作用域后还可以再修改。
输入一个名称(这里以scope1为例)后,点击【下一步】。
如下图:
这里我们需要指定客户机获取地址的范围和掩码长度,这里请根据网络实际需求来确定,设置完成后点击【下一步】继续。
如下图:
这里输入不希望被分配给客户端的IP地址段。
此处也可以留空,即默认为所有地址都参与分配,点击【下一步】继续。
如下图:
这里设置客户端允许保留得到IP地址时长,一般默认即可,点击【下一步】继续。
如下图:
前面一部分配置完成,但仅仅是可以分配IP地址和掩码,如果想为客户端提供更多的自动化配置,比如DNS、网关、WINS等等,那么就需要用到“服务器选项”了,不过这里我们暂时不细讲,后面会再次提到,点击【下一步】继续。
如下图:
到此为止作用域已经配置完成。
不过新建的作用于默认是未激活状态,我们需要手动激活才能正常使用。
如下图:
按照图示激活scope1区域。
我们来大致看一下操作界面。
如下图:
点选【地址池】后可以在右侧看到scope1的基本信息,包括IP地址的起止范围。
如果有客户成功从DHCP获得IP地址,那么就会在上图中体现出来。
在这个作用域的最后有一项【作用域选项】,这里可以为DHCP客户端配置其他参数,比如网关、DNS等。
但仅对当前作用域有效,如果想对应用到全部作用域,那么就需要在【服务器选项】里进行配置了。
请大家留意这两个【选项】的区别。
以上介绍了服务器的基本配置,现在来看看客户端的配置。
其实,在客户端上,我们似乎找不到可以为客户端指定DHCP地址的地方,主要是因为DHCP客户端在接入网络后会很自然地去查询DHCP服务器,不用人工干涉。
当客户端找到可用的DHCP服务器并获取到一个IP后,我们可以通过图形或命令的方式进行查询。
现在有一台XP主机接入网络,首先我们通过服务器来查询。
如下图:
可以看到,计算机名称为XP2的主机获取到了192.168.1.5的IP,租期截至时间是6月11日,这些信息我们同样可以在客户端查询到。
在XP2上运行ipconfig/all。
如下图:
对于不习惯用命令操作的朋友,可以双击右下角的网络链接图标,并选择【支持】选项卡进行查询。
如下图:
在这里也可以查到很详细的配置信息。
其实DHCP部署,客户端基本上不用做什么设置,只要服务器上配置得当即可。
下面列出了文中提到的几个概念,有助于我们更好的理解DHCP。
作用域:
可以称之为连续的IP地址的范围,这里强调出这个范围内的地址必须是连续的。
地址池:
在有效的作用域内出除去排除范围的地址后,剩下的地址在作用域内就是可用的“地址池”。
这里我们强调IP地址的可用性。
租约:
就是说DHCP给某台主机分配的IP地址的有效时长。
在此时间范围内,租约的状态被认为是“活动”的,反之,如果这个期限已满,那么租约就是“非活动的。
选项类型:
除了IP地址、子网掩码以外,DHCP服务器可以为其客户端指派的其他配置参数,比如默认网关地址、WINS服务器地址、DNS服务器地址等等。
这些都可以被称为选项类型,当然也包括IP地址。
选项类别:
简单讲就是我们可以对申请到IP、DNS等配置的用户进行更精确的控制,比如让一部分正常访问网络,而让另一部分用户的网关指向其他的地址,以此来控制他们的访问访问请求。
这个选项类别有2种,供应商类别和用户类别,用到比较多的是用户类别。
来看一下这个选项类别具体在什么位置。
如下图:
这个是【作用域选项】属性的【高级】选项卡,同样也存在于【服务器选项】的【高级】选项卡中。
关于这部分内容,后面会有专门一节来讲述,敬请期待。
至此,有关DHCP服务器、客户端的安装和配置大致讲了一下。
从安装到配置,其实都很简单,我相信看了一次就OK了。
下节重点讲解客户端查找DHCP服务器以及DHCP如何派发IP地址这个过程。
(五)指派、获取
本节将主要讲述DHCP客户端获取IP的过程,也是此系列中非常重要的一节。
为了让大家更好的理解DHCP客户端和服务器之间是如何交互工作的。
这里搭建了一个很小的环境来辅助演示。
如下图:
首先在win2k3上安装DHCP服务器,一台XP主机与之直连。
有关DHCP的安装过程,请参考上一节的内容。
DHCP安装完成后,如下图:
服务器名称为win2k3,IP为192.168.1.1。
依据上节所说,我们需要创建一个新的作用域并激活,这样才能为客户端指派IP地址等信息。
这里我创建的范围是192.168.1.1—192.168.1.10,别的选项类型暂时先不设置。
如下图:
scope1为当前的作用域,同时已激活,现在可以正常使用了。
OK,万事俱备只等客户端了。
通常情况下,DHCP客户端从DHCP上获取一个IP地址需要4个步骤,这里我们通过演示来一起验证一下。
这里依然使用wireshark工具来观察DHCP服务器收、发数据包的情况。
在理想的情况下,客户机启动后,会自动联系可用的DHCP来获取IP地址,其实整个过程是很快的,我们先从整体上看一下客户端获取IP的前后过程吧。
如下图:
这个图比较大,基本上可以分为5部分,现在一个个来。
第一部分:
1、客户端发送DHCPDiscover数据包。
如下图:
解释一下:
抓包的时间和前一张图不对应,主要是中途做有别的事了,请见谅。
稍微说一下这张图:
当客户端被配置为DHCP自动获取地址时,一旦接入网络,且检测到自己没有IP地址,系统就会发出DHCPDiscover数据包,其中包括了客户机的主机名、MAC地址、甚至还有上一次获取到的IP地址等信息。
169.254在这里的含义是告诉DHCP服务器,我是否可以申请这个地址?
显然不行,因为这个地址不在DHCP现在的作用域内(下同)。
这些信息都包含在BootstrapProtocol(也就是BOOTP)协议中。
这也是DHCP的原始协议。
请留意,客户端利用本机的68号端口发出DHCP查询请求,服务端则用67号端口接受此请求。
其实,不仅仅是刚接入会发送查询包,还有在机器刚启动或请求被拒绝时也会触发DHCPDiscover数据包。
2、服务器回应DHCP Offer数据包。
如下图:
DHCP服务器会响应客户端的DHCPDiscover请求后,会检查自己的配置,如果有多余且有效的地址,则会返回一个DHCPOffer的广播消息。
因为此时服务器也不知道客户端在那里。
数据包除了有IP地址、掩码外,还有这个地址对应的租约时限。
3、客户端收到IP地址后用DHCP Request数据包回应DHCP服务器。
如下图:
DCHPRequest这个数据包是通知当前所有的DHCP服务器,当然也包括分配给它IP地址的那台。
目的是让大家知道,客户端XP2已经接受某一台DHCP服务器指派了一个IP地址,并将IP地址通告出去。
因为可能网内不止一台DHCP,而且XP2发的第一个包是面向全体的,XP2自己也不知道谁会给它分配IP,同时其他DHCP服务器收到查询请求后必然也会检查各自的配置,然后都会分配IP出来。
关键看XP2最先收到谁的Offer,这就和我们面试一样,那个公司现给我们Offer,通常情况下也会先去那家公司,当然,我们不会像客户端那么傻直接回绝其他所有的Offer,哈哈!
当其他DHCP服务器收到Request请求数据包后,就会收回已经派出的地址,留做他用。
不过这还没玩,客户端必须得到指派给它IP地址的那台DHCP服务器的确认消息,这个IP地址也就是192.168.1.1才可以正式为XP2所用。
一起来看第四个数据包。
4、DHCP收到Request报用DHCP ACK包回应客户机。
如下图:
DHCP服务器用ACK数据包作为一个确认来回应客户端的Request包,数据包中的Option同样也包含了租约的IP地址、掩码和期限等信息。
到此为止,客户端和服务器利用DHCP完成了一次交互查询和响应的过程。
尽管服务器的IP固定,但这4个过程都是通过广播方式进行的。
这样算不算完了?
还不算,现在XP2获取的地址是192.168.1.1,有朋友可能有疑问了,这个IP不就是DHCP服务器的地址吗?
没错!
的确是这样。
那这怎么能行呢?
大家不用急,我们来看看主机XP2是如何处理的。
第二部分:
客户机在收到DHCPACK数据包之后,会利用GratuitousARP协议对这个IP地址进行冲突检测,目的是确定网内是否有人使用这个IP。
这个机制存在于2000或之后系统内。
如果网内有相同机器使用这个IP,那么就会返回数据包。
并用广播方式告知对方IP冲突。
整个检测过程有三个数据包,但如果没有得到任何回应,也就不会有第二和第三个数据包了。
以下是这三个数据包:
1、客户端发送GratuitousARP的Request数据包。
如下图:
这个数据包是客户端用来检测IP冲突的。
检测的大致原理已经在图中说明了,请注意查看。
2、有相同IP的主机发送GratuitousARP的Reply数据包。
如下图:
很不幸的是,XP2收到了Reply数据包,这证明网内有于自己相同的IP。
此时DHCP服务器也就是192.168.1.1这个IP的原始拥有者会发送一个IP冲突的提示。
看一下第三个数据包。
3、有相同IP的主机以广播方式发送GratuitousARP冲突提示信息。
如下图:
第三个数据包是DHCP服务器发出了一个冲突提示,在服务器的日志中也有体现
可见,为了防止IP冲突,DHCP客户端收到指派的地址后都会利用ARP协议进行一次冲突检测。
第三部分:
既然检测到这个IP有冲突,自然就无法使用了,接下来客户端会怎么做呢?
1、向DHCP服务器发送Decline拒绝数据包,表示192.168.1.1这个IP无法使用。
大家请注意这个数据包的TransactionID和最开始的4个DHCP数据包一致,顺利的话,只需要4个数据包即可完成整个过程,但如果有冲突或出现别的情况就会产生额外的过程。
这里的DHCPDecline就是其中的一个。
第