想象一下下,在日常生活中。作为一个系统管理员,为了解决计算机的上网问题,我们总是要给计算机分配ip地址,我们通常用的方法就是,打开网络属性,然后给计算机分配一个ip地址,写他的DNS指向,写他的网关,写他的掩码。但是如果单位的人不会这么来做,你一个人去手动配置-.-!!!  如果机器少了还好说,但假如有几百台机器怎么办??配ip地址也要老半天,还会拖累单位的工作计划。此时DHCP就应运而生了。

现在我们配置ip地址的方法有三种:

1.manual  手工方式 :管理员找出每一台PC的mac地址,并作出每台机器的mac—》ip 的对应关系,然后在PC

上面,向服务器发送请求ip地址的数据包,服务器对比发送者的mac地址,找对应设定好的ip来分发给客户端。

       特点:实现了地址的动态分配,但是地址利用率很低,每个人只能用他mac设定的对应的地址。

一般应用于对服务器来设定ip,一般服务器需要静态ip,而且客户端要享受服务,如果ip不固定的话,会造成很大的不便。。

      2.automatic  :管理员在服务器上面做出一个地址池【起始地址,结束地址】,客户端发送请求的数据包,客户端拿走一个地址池中的ip,server则做出相应的记录。

       特点:不需要管理员写mac和ip的对应条目,地址利用率依然很低,每台PC一直用某一个ip。

      3. dynamic 动态方式 :    与automatic差不多,但是ip地址是有租期的,到达租期之后,ip被回收,这样可以节省ip地址,【比如150个ip地址可以应用于200台计算机,因为实际生活中,200台计算机是不会同时在线上网的,这样就可以把ip分给需要的PC】

 什么是DHCP??

     DHCP 顾名思义叫做 动态地址配置协议,他意在减少管理员对于ip地址管理的花销,作为一个应用层协议,它的服务基于UDP协议运行,而且是以 客户端/服务器 的方式进行服务,服务器通过67端口,而客户端通过68端口。

    DHCP的工作原理是什么??

     1.【dhcp discover 广播】dhcp客户端刚开始没有地址,【吼叫一声“我想上网”】发送广播寻找dhcp服务器来请求地址。

     2.【dhcp offer 广播】服务器听到请求,发送一个应答的广播,在这个数据包中包含着server从地址池中取出的ip地址,但是并没有网关,dns信息,所以客户端得到这个数据包是无法进行通信的。假设环境中有                多个dhcp server,那么客户端就使用最先听到的广播的server所提供的ip。

     3.【dhcp request 广播】客户端看到里面的地址,期望使用该地址。并通知其他的dhcp服务器回收没被使用的ip地址。同时通知要用的dhcp服务器要使用该地址。

     4.【dhcpack】 :服务器回复,ip地址 子网掩码,默认网关,dns指向,ip地址租约等信息,客户端收到后可以正常通信上网啦。

      续租过程【我们说过动态分配的ip地址是有租用期限的,时间到了服务器就会回收,但是我们然在使用,而且之后还要使用怎么办??】:

       当ip地址的租约到期,但是用户仍然在线有两种情况:

1.重启计算机之后【且租约没有到期】:假如我们计算机意外重启了是不是开机就不能上网了,事实证明不是的,客户端再重启之后会发送dhcprequest进行续租,这个时候服务器会找你之前用的地址,如果它还在地址池中,那么就分给客户端使用,并且从新刷新租约时间。

2.在租约期已经使用50%后:客户端发送dhcprequest 表示想要续租。在租约时间到达87.5%如果没有等到server的回答这个时候他会有两种行为:

       A.第一种方式继续等待server的响应,当时间到期还没有响应则终止租约合同,得到一个169.254.x.x的ip;

       B.第二种方法发送dhcpdiscover,重新请求新的ip地址。

       linux中怎么实现dhcp服务器呢?

        回归到我们的linux 红帽中来,想要实现dhcp服务的动态分配,首先我们需要一个地址池来放置ip,就会好像是一家人吃饭,想要吃饭,饭必须是在锅里面吧,dhcp服务器运行的时候也就是饭好的时候,老妈就会说:”谁想吃自己去盛饭去“,客户端想要地址就问服务器要,服务器就是老妈,很贴心,就给你分配一个ip。当然还要有作用域,自己家里人做的饭外来人肯定不让吃,定义一个作用域只有自己家的人才能获得ip,最后还有就是一些选项了比如说【租约时间,网关,dns指向等等】


那下面我们就先在linux配置一个简单的dhcp服务器。

1.安装dhcp服务

       在安装时回答先四个有关dhcp的软件包,后面的是关于ipV6的,dhcp-devle的软件包一般是在别的软件包安装依赖于devel中的共享库的时候才使用。

201909827.png

2.观察一下都安装的dhcp的信息。【注意我们所学的服务在变成服务器后都在名称后面多了一个d,这个d代表 “Daemons“这个单词代表‘守护进程’的意思】

201929438.png

3.查看安装的目录或者文件

201934272.png

202002100.png

       4.我们去编辑配置文件,去实现一个简单的dhcp服务器。

       #

       # DHCP ServerConfiguration file.

       #   see/usr/share/doc/dhcp*/dhcpd.conf.sample  

       #

       打开之后并没有内容,当然不是需要我们手动去写,在这里他让我们参照dhcp的配置样例文件。

       在末行模式下::r /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample将样例文件中的内容读进配置文件,然后来进行修改。

5.熟悉配置文件中的选项与参数

202036146.png

       6.配置一个简易的dhcp服务器,服务器ip为192.168.2.1,网关192.168.2.254.

203018709.png

       7.启动dhcpd服务,检查相应的语法正确性。

       [root@localhostetc]# service dhcpd

       用法:/etc/init.d/dhcpd{start|stop|restart|condrestart|configtest|status}

       [root@localhostetc]# service dhcpd configtest          //检查语法正确不正确

       Syntax: OK

       如果出现错误最好去查看日志文件,这样会更加熟悉我们的日志系统,也有利于linux的学习!!!

203320614.png

       比如这里我在启动的时候出现错误,启动失败

       [root@localhostetc]# tail -n 50 -f /var/log/messages 动态显示日志文件内容的后50行。

       在日志文件中发现这条错误【好像和eth0的ip设置有关】。

202040529.png

202049918.png

    8.打开另外一台win2003虚拟机来测试是否能获得ip【在这里我把linux和win2003的虚拟机都设置为host-only,并且关闭虚拟机中自带的dhcp服务功能】

202053707.png

9.查看linux张相关的日志,分析dhcp服务的流程。

202101123.png

       10.查看release文件中有关ip地址分配的信息

202105962.png

最后,我的一套简单的dhcp服务器就搭建好并使用了,当然并不是就这样就好了,而是应该学会服务器方面学习的小方法!!从简单的开始搞清楚,原理,流程,相关文件的作用等等。

我还学习的不够好,有点班门弄斧。但是这就算是我写给你自己的话吧!

       不要嫌麻烦,不要焦躁,不要怕浪费时间,最简单的也就是最直白的!!!