一起学DHCP系列(五)指派、获取

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jeffyyko.blog.51cto.com/28563/163168

    本节将主要讲述DHCP客户端获取IP的过程,也是此系列中非常重要的一节。

    为了让大家更好的理解DHCP客户端和服务器之间是如何交互工作的。这里搭建了一个很小的环境来辅助演示。如下图:

1.jpg

     首先在win2k3上安装DHCP服务器,一台XP主机与之直连。有关DHCP的安装过程,请参考上一节的内容。DHCP安装完成后,如下图:

2.jpg

服务器名称为win2k3,IP为192.168.1.1。依据上节所说,我们需要创建一个新的作用域并激活,这样才能为客户端指派IP地址等信息。这里我创建的范围是192.168.1.1—192.168.1.10,别的选项类型暂时先不设置。如下图:

3.jpg

scope1为当前的作用域,同时已激活,现在可以正常使用了。

OK,万事俱备只等客户端了。通常情况下,DHCP客户端从DHCP上获取一个IP地址需要4个步骤,这里我们通过演示来一起验证一下。

这里依然使用wireshark工具来观察DHCP服务器收、发数据包的情况。在理想的情况下,客户机启动后,会自动联系可用的DHCP来获取IP地址,其实整个过程是很快的,我们先从整体上看一下客户端获取IP的前后过程吧。如下图:

4.jpg

这个图比较大,基本上可以分为5部分,现在一个个来。

第一部分:

1、客户端发送DHCP Discover 数据包。如下图:

5.jpg

解释一下:抓包的时间和前一张图不对应,主要是中途做有别的事了,请见谅。

稍微说一下这张图:当客户端被配置为DHCP自动获取地址时,一旦接入网络,且检测到自己没有IP地址,系统就会发出DHCP Discover 数据包,其中包括了客户机的主机名、MAC地址、甚至还有上一次获取到的IP地址等信息。169.254在这里的含义是告诉DHCP服务器,我是否可以申请这个地址?显然不行,因为这个地址不在DHCP现在的作用域内(下同)。这些信息都包含在Bootstrap Protocol(也就是BOOTP)协议中。这也是DHCP的原始协议。请留意,客户端利用本机的68号端口发出DHCP查询请求,服务端则用67号端口接受此请求。

其实,不仅仅是刚接入会发送查询包,还有在机器刚启动或请求被拒绝时也会触发DHCP Discover数据包。

2、服务器回应DHCP Offer 数据包。如下图:

6.jpg

DHCP服务器会响应客户端的DHCP Discover请求后,会检查自己的配置,如果有多余且有效的地址,则会返回一个DHCP Offer的广播消息。因为此时服务器也不知道客户端在那里。数据包除了有IP地址、掩码外,还有这个地址对应的租约时限。

3、客户端收到IP地址后用DHCP Request 数据包回应DHCP服务器。如下图:

7.jpg

DCHP Request这个数据包是通知当前所有的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包回应客户机。如下图:

8.jpg

DHCP服务器用ACK数据包作为一个确认来回应客户端的Request包,数据包中的Option同样也包含了租约的IP地址、掩码和期限等信息。

到此为止,客户端和服务器利用DHCP完成了一次交互查询和响应的过程。尽管服务器的IP固定,但这4个过程都是通过广播方式进行的。

这样算不算完了?还不算,现在XP2获取的地址是192.168.1.1,有朋友可能有疑问了,这个IP不就是DHCP服务器的地址吗?没错!的确是这样。那这怎么能行呢?大家不用急,我们来看看主机XP2是如何处理的。

第二部分:

客户机在收到DHCP ACK数据包之后,会利用Gratuitous ARP协议对这个IP地址进行冲突检测,目的是确定网内是否有人使用这个IP。这个机制存在于2000或之后系统内。如果网内有相同机器使用这个IP,那么就会返回数据包。并用广播方式告知对方IP冲突。整个检测过程有三个数据包,但如果没有得到任何回应,也就不会有第二和第三个数据包了。

以下是这三个数据包:

1、客户端发送Gratuitous ARP的Request数据包。如下图:

一起学DHCP系列(五)指派、获取

这个数据包是客户端用来检测IP冲突的。检测的大致原理已经在图中说明了,请注意查看。

2、有相同IP的主机发送Gratuitous ARP的Reply数据包。如下图:

10.jpg

很不幸的是,XP2收到了Reply数据包,这证明网内有于自己相同的IP。此时DHCP服务器也就是192.168.1.1这个IP的原始拥有者会发送一个IP冲突的提示。

看一下第三个数据包。

3、有相同IP的主机以广播方式发送Gratuitous ARP冲突提示信息。如下图:

11.jpg

第三个数据包是DHCP服务器发出了一个冲突提示,在服务器的日志中也有体现

12.jpg

可见,为了防止IP冲突,DHCP客户端收到指派的地址后都会利用ARP协议进行一次冲突检测。

第三部分:

既然检测到这个IP有冲突,自然就无法使用了,接下来客户端会怎么做呢?

1、向DHCP服务器发送Decline拒绝数据包,表示192.168.1.1这个IP无法使用。

13.jpg

大家请注意这个数据包的Transaction ID和最开始的4个DHCP数据包一致,顺利的话,只需要4个数据包即可完成整个过程,但如果有冲突或出现别的情况就会产生额外的过程。这里的DHCP Decline 就是其中的一个。

第三部分:

在此之后,客户机进行第二次的IP地址获取。这部分和第一部分的申请过程一样,只是事务ID有所变化。

第二次申请时,因为192.168.1.1刚才已经指派过,且被拒绝,所以按照顺序接下来会指派下一个可用的IP给XP2主机,显然是192.168.1.2,因为只有它一台主机在申请。

主要看一下DHCP Offer数据包里的IP地址是什么就知道了。如下图:

14.jpg

第四部分:

第二次IP冲突检测,通常情况下会一次发出三个ARP包进行检测。如下图:

15.jpg

第五部分:

IP地址获取成功后,对于客户端来说下一步就是查找WINS服务器,进行NETBIOS名称的注册(这部分请参考《一起学WINS》系列文章)。

    还有一点要说明。为什么会出现DHCP Decline的数据包,也就是为什么192.168.1.1会被分配出去,这个不是服务器的IP吗?原来我在设置作用域的时候不把192.168.1.1也包含了进去,所以DHCP会首先把第一个地址也就是192.168.1.1分配给XP2。所以会出现这种情况。解决的办法很简单,修改作用域,不包含1.1这个地址就可以了,或者设置排除地址,或者添加保留地址,可见第一种方法是最简单的。

    到这里IP地址的获取过程就讲解完了,我们到DHCP服务器管理界面里看一下:

16.jpg

再到XP2上看一下当前的IP地址信息。如下图:

17.jpg

可以看到现在XP2的IP地址是192.168.1.2,Dhcp 的状态也是 Enabled 的。

    有关DHCP服务器的租约、授权、以及DHCP客户端IP的释放和重新获取的内容将在下一节中讲解。

谢谢!

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/1554

(0)
上一篇 2015-03-24 21:53
下一篇 2015-03-25 10:59

相关推荐

  • 磁盘文件挂载与卸载

    挂载(mount)何为挂载?挂载指将文件系统与根文件系统的某个现存的目录建立起来的关联关系,这样我们就可以将目录作为访问磁盘文件的入口,进行存取交互。挂载点:挂载点指的是被挂载的对象,通常挂载点是一个目录,不过有时候也有文件作为挂载点格式:mount 设备 挂载点 ;此挂载方法味临时挂载,只在当前的shell中有效,退出则清除挂载关联设备文件在/dev/sd…

    Linux干货 2017-04-24
  • 魔术方法 反射

    魔术方法 反射 反射(reflection):指的是运行时获取类型定义信息。一个对象能够在运行时像照镜子一样反射出其类型信息;也就是说能够通过一个对象,找到自己的type、class、attribute、或method的能力,称为反射或者自省。 具有反射能力的函数:type、isinstance、callable、dir、getattr。 运行时和编译时不同…

    Linux干货 2017-11-30
  • 计算机基础及Linux基础概述

    马哥教育网络班23期+第1周课程练习 计算机基础及Linux基础概述 一、计算机组成及其功能 1.1、概述     计算机,computer 我们在中国都称它为电脑,其实我们个人使用的计算机只是计算机家族的一部分,计算机分很多种,小型机,中型机,大型机,工作站,还有PC机,等等,其实我们家庭中使用的只能算是PC机,其实…

    Linux干货 2016-09-15
  • 运维工程师技能需求排行

    这是我今天在拉勾网搜索运维,翻完了4四页也招聘信息之后得到的,我的目的是想要看看之后的学习,哪个更应该成为重点,有些在我意料之中,有些还真的没想到,算是努力了一个小时的收获吧,分享给大家。
    注意:其中的看法仅代表个人观点,很多都是依靠我自己的学习经验和工作经验累积的

    Linux干货 2017-12-12
  • 计算机基础及Linux基础

    计算机基础与Linux入门 计算机组成及功能 Linux常见发行版 Linux重要哲学思想 Linux文件系统层级结构及文件命名规则 如何获取Linux命令的使用帮助 Linux常用命令及示例 1.1 计算机组成及功能 1.1.1 计算机的五大部件 计算机的主要组成部分有: 1、CPU:运算器 2、控制器、寄存器(内部存储)、缓存; 3、存储器:内存,RAM…

    Linux干货 2016-12-04
  • Homework Week-1 Linux基本

    1、描述计算机的组成及其功能。 计算机由硬件和软件组成;硬件主要分为五部分:控制器,运算器、存储器、输入和输出设备。软件分为系统软件和应用软件。 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。 运算器(Datapath):运算器的功能…

    Linux干货 2016-08-15