一起学DHCP系列(三)理解、APIPA

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

     这是《一起学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为Automatic Private IP Addressing的缩写,即为自动专用IP寻址, 当系统接入网络后,且长时间无法获取到IP地址,系统为了减少性能消耗(尽管这种消耗微乎其微),就会采取这种措施来避免永不休止的查找。这是一种应急的机制,作用并不是简单的分配一个IP,请注意这个名称最后的单词,IP Addressing,而并非IP Address。那这又有什么区别呢?稍后就会讲到。

我们先来看一个例子这里我模拟了一个客户端无法联系到DHCP服务器的场景,此时客户端获取到了一个169.254.X.X的IP地址。如下图:

1.jpg

这里请注意两个地方:

1、我使用的查询命令是ipconfig /all。大家都知道用这个命令可以把所有的重要参数都查询出来,包括IP地址、掩码、网关、DNS、MAC等等。但在上图中只有IP地址、掩码和MAC,并没有网关、DNS。原因是因为APIPA分配的网络信息只包含IP地址和子网掩码,比武其他。

2、请注意IP地址前的名称是“Autoconfiguration IP Address”,而不是正常情况下的“IP Address” 。从这点上我们也可以区别IP地址的来源。

还记得刚才那个问题吗?为什么DNS可以独立配置呢?其实也是出于这个的考虑。我们可以为APIPA手工设置一个DNS地址。还是刚才的环境,我们为这个地址

169.254.155.85配置一个DNS,1.1.1.1 。如下图:

 2.jpg

通过 ipconfig /all 查询。如下图:

3.jpg

可以看到,我们为这个地址设置的DNS生效了。那我们是否可以自己定义在这个IP呢?当然可以。在【备用配置】选项卡里,我们还可以手工设置IP地址。如下图:

4.jpg

别的信息我没有填写,其实都是一样的。通过这样的设置,其目的在于当DHCP服务器不可用,系统会将此地址分配给该网卡,而不会使用169.254这样的地址。

其实这个功能非常好用。如何使用?先来看一个场景,大家也一定都遇到过。

    有这么一个客户,在家时笔记本连接路由器并通过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:

5.jpg

XP2:

6.jpg

在XP2上PING一下Win2k3。如下图:

7.jpg

网络访问测试。如下图:

8.jpg

访问Win2k3的C盘。如下图:

9.jpg

可见,尽管是169.254之类的IP,但其实和我们手动设置的没有什么区别,只是似乎在一个局域网内这样的客户端的最大数量有一个限制,好像是要少于25台,这个我没有测试过,还没有这样的环境,所以无法得知这个限制是否存在。

我们也可以在注册表中将APIPA这个功能禁止掉,可以针对某个网卡,也可以针对全部的网卡。打开注册表后,请定位到以下位置:HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\这个下面会对应当前网卡的标识符,在相应的标记符下新增一个名为 IPAutoconfigurationEnabled 

的DWORD值,并将其值设为十六进制的0即可。修改完成后重启才能生效。如果想禁用全部网卡的这个功能,则在interfaces下增加相同的键值。关于禁用APIPA的方法算是个补充知识,稍作了解即可。

还记得之前提到过有关IP Addressing的问题吗?为什么这里是addressing 而不是address呢? 当默认使用APIPA获取一个169.254的地址后,系统并非就这样一直使用这个地址,而是会每隔一段时间就会向网内发送DHCP DISCOVER数据包,这个间隔时间大约是5分钟。在此期间,系统还会随机进行DHCP服务器的查询,如果查询到DHCP并获得了一个IP,那么就会将169.254的IP释放掉。从这里我们可以看到,APIPA提供的是一套冗余IP配置和寻址的结合方案,显然这里使用addressingaddress意义更广泛。我们从协议层面来加深一下理解:

主机启动后,就会发送DHCP Discover包查询DHCP。如下图:

10.jpg

很显然,由于没有找到DHCP服务器,所以就会得到169.254的IP,但并不表示以后都不在搜索DHCP了,默认情况下会每隔5分钟进行一次集中的查询,其余时间也会进程查询,但由于还有别的程序或者协议在运行,所以就显得不那么集中。如下图:

11.jpg

到此为止,有关APIPA相关的一些知识点就说完了,下一节会讲到DHCP服务器的安装和配置。

谢谢!

转自:http://jeffyyko.blog.51cto.com/28563/162407

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

(1)
s19930811s19930811
上一篇 2015-03-25
下一篇 2015-03-25

相关推荐

  • Week9’s homework

    Week9's homework 1、写一个脚本(1)判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin)(2)分别统计两类用户的个数;通过字符串比较来实现。 #!/bin/bash # for i in $(cat /etc/passwd |…

    Linux干货 2016-12-24
  • GNU awk

    awk -> gawk – 模式扫描和输出语言文件, pattern scanning and processing language 基本用法: gawk [options] 'program' FILE … program: PATTERN{ACTION ATATEMENTS} ACTION ATATEM…

    Linux干货 2016-09-22
  • CentOS 6 系统启动流程

    一、CentOS 6 启动流程 1.加载BIOS的硬件信息,获取第一个启动设备。 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备。 4.核型执行init程序并获取运行信息。 5.Init执行/etc/rc.d/rc.sysinit文件。 6.启动核心的外挂模块(/et…

    Linux干货 2016-09-12
  • Linux基础知识(六)-vim编辑器,crontab计划任务,bash脚本循环

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit /tmp [root@localhost ~]# vim&nbs…

    Linux干货 2016-10-31
  • linux 基础目录配置及用途说明

    bin -> usr/bin 一般存放root和一般用户都可以使用的指令例如:cat, chmod, chown, date, mv, mkdir, cp, bash 等等常用的指令,同时还存放着单人维护模式下还能够被使用的指令。 boot  这个目录主要放置开机会使用到的文件,包括linux核心文件以及开机选单和开机所需要的配置文件。 de…

    Linux干货 2017-08-19
  • N26 第六周作业

    总结vim编辑器的使用 Vim 模式    Vim 有六种基本模式    Normal mode                 Visual mode&nbs…

    Linux干货 2017-02-01