想象一下下,在日常生活中。作为一个系统管理员,为了解决计算机的上网问题,我们总是要给计算机分配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中的共享库的时候才使用。
2.观察一下都安装的dhcp的信息。【注意我们所学的服务在变成服务器后都在名称后面多了一个d,这个d代表 “Daemons“这个单词代表‘守护进程’的意思】
3.查看安装的目录或者文件
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.熟悉配置文件中的选项与参数
6.配置一个简易的dhcp服务器,服务器ip为192.168.2.1,网关192.168.2.254.
7.启动dhcpd服务,检查相应的语法正确性。
[root@localhostetc]# service dhcpd
用法:/etc/init.d/dhcpd{start|stop|restart|condrestart|configtest|status}
[root@localhostetc]# service dhcpd configtest //检查语法正确不正确
Syntax: OK
如果出现错误最好去查看日志文件,这样会更加熟悉我们的日志系统,也有利于linux的学习!!!
比如这里我在启动的时候出现错误,启动失败
[root@localhostetc]# tail -n 50 -f /var/log/messages 动态显示日志文件内容的后50行。
在日志文件中发现这条错误【好像和eth0的ip设置有关】。
8.打开另外一台win2003虚拟机来测试是否能获得ip【在这里我把linux和win2003的虚拟机都设置为host-only,并且关闭虚拟机中自带的dhcp服务功能】
9.查看linux张相关的日志,分析dhcp服务的流程。
10.查看release文件中有关ip地址分配的信息
最后,我的一套简单的dhcp服务器就搭建好并使用了,当然并不是就这样就好了,而是应该学会服务器方面学习的小方法!!从简单的开始搞清楚,原理,流程,相关文件的作用等等。
我还学习的不够好,有点班门弄斧。但是这就算是我写给你自己的话吧!
不要嫌麻烦,不要焦躁,不要怕浪费时间,最简单的也就是最直白的!!!