第4章 DHCP服务
基础服务类系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
DHCP前身是BOOTP,在Linux的网卡配置中也能看到显示的是BOOTP,DHCP引进一个bootp没有的概念:租约。bootp分配的地址是永久的,而dhcp分配的地址是可以有期限的。
[root@xuexi vsftpd]# grep -i bootproto /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp
DHCP可以自动分配IP、子网掩码、网关、DNS。
DHCP客户端使用的端口68,服务端使用端口67,使用的UDP应用层的协议。
DHCP一般不为服务器分配IP,因为他们要使用固定IP,所以DHCP一般只为办公环境的主机分配IP。
DHCP服务器和客户端需要在一个局域网内,在为客户端分配IP的时候需要进行多次广播。但DHCP也可以为其他网段内主机分配IP,只要连接两个网段中间的路由器能转发DHCP配置请求即可,但这要求路由器配置中继功能。

DHCP客户端请求过程(4步请求过程)
1)搜索阶段:客户端广播方式发送报文,搜索DHCP服务器。此时网段内所有机器都收到报文,只有DHCP服务器返回消息。
2)提供阶段:众多DHCP服务器返回报文信息,并从地址池找一个IP提供给客户端。因为此时客户端还没有IP,所以返回信息也是以广播的方式返回的。
3)选择阶段:选择一个DHCP服务器,使用它提供的IP。然后发送广播包,告诉众多DHCP服务器,其已经选好DHCP服务器以及IP地址。此后没有入选的DHCP就可以将原本想分配的IP分配给其他主机。
客户端选择第一个接收到的IP。谁的IP先到客户端的速度是不可控的。但是如果在配置文件里开启了authoritative选项则表示该服务器是权威服务器,其他DHCP服务器将失效,如果多台服务器都配置了这个权威选项,则还是竞争机制;通过MAC地址给客户端配置固定IP也会优先于普通的动态DHCP分配。另外Windows的DHCP服务端回应Windows客户端比Linux更快。
4)确认阶段:DHCP服务器收到回应,向客户端发送一个包含IP的数据包,确认租约,并指定租约时长。
如果DHCP服务器要跨网段提供服务,一样是四步请求,只不过是每一步中间都多了一个路由器和DHCP服务器之间的单播通信。
1) 客户端广播方式发送报文,搜索DHCP服务器。所有机器包括路由器都收到报文,路由器配置了中继,知道搜索消息后单播给DHCP服务器;
2)DHCP服务器单播返回信息给路由器,路由器再广播给客户端;
3)客户端选择DHCP服务器提供的IP,并广播信息告诉它我选好了,路由器单播给DHCP服务器;
4)DHCP服务器收到信息将确认信息单播给路由器,路由器单播给客户端。
所以DHCP的4步请求:
Client--> DHCPDISCOVER # 广播:客户端发现DHCP服务器
DHCPOFFER <-- Server # 广播:服务端提供IP给客户端
Client--> DCHPREQUEST # 广播:客户端请求使用提供的IP
DCHPACK <-- Server # 单播:服务端进行确认,订立租约等信息
续租的过程:
Client--> DHCPREQUEST # 单播:继续请求使用提供的IP
DHCPACK <-- Server # 单播:确认续租
DHCP服务器不跨网段提供服务时,它自己的IP地址必须要和地址池中全部IP在同一网络中。
DHCP服务器跨网段提供服务时,它自己的IP地址必须要和地址池中的一部分IP在同一网络中,另一部分提供给其他网段。因为如果自己的IP完全不在自己的网络中而只提供其他网段的IP,更好的做法是将DHCP服务器设在那个需要DHCP服务的网络中。
当计算机从一个子网移到另一个子网,找的DHCP服务器不同,因为旧的租约还存在,会先续租,新的DHCP服务器肯定拒绝它的续租请求,这时将重新开始四步请求。
有些机器希望一直使用一个固定的IP,也就是静态IP,除了手动进行配置,DHCP服务器也可以实现这个功能。DHCP服务器可以根据MAC地址来分配这台机器固定IP地址(保留地址),即使重启或重装了系统也不会改变根据MAC地址分配的地址。
假如在一个正常联网有DHCP服务器的网段内因为做实验练习的缘故新建立了一台DHCP服务器,但是这台DHCP服务器不能上网,会导致什么后果?使用DHCP分配地址的客户端至少会有续租的请求,如果没有续租成功,或者有新的计算机加入这个网络,那么进行四步请求,有可能会请求到这个不能连网的DHCP服务器上,那么他也就不能上网了。特别是Windows的DHCP服务端回应Windows客户端速度比Linux回应快。
安装和配置DHCP服务
[root@xuexi ~]# yum -y install dhcp [root@xuexi ~]# rpm -ql dhcp
/etc/dhcp/dhcpd.conf # DHCP配置文件
/etc/sysconfig/dhcpd
/usr/sbin/dhcpd # DHCP服务程序
/usr/sbin/dhcrelay # 中继命令程序,用于跨网段提供DHCP服务
/var/lib/dhcpd/dhcpd.leases # 存放租借信息(如IP)和租约信息(如租约时长)
/usr/share/doc/dhcp-4.1./dhcpd.conf.sample # 配置文件的范例文件
可以将dhcpd.conf.sample复制到/etc/。
[root@xuexi ~]# cp /usr/share/dhcp-4.1./dhcpd.conf.sample /etc/dhcpd.conf
以下是dhcpd.conf中部分配置项。
# 每行分号结束
ddns-update-style none; # 动态dns相关,几乎不开启它。也就是不管它。
ignore client-updates; # 和上面的相关,也不管它
authoritative # 声明为权威服务器
next-server marvin.redhat.com; # PXE环境下指定的提供引导程序的文件服务器
# DHCP配置文件里必须配置一个地址池,其和DHCP服务器自身IP在同一网段
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30; # 地址池
option domain-name-servers ns1.internal.example.org; # 为客户端指明DNS服务器地址,可以是多个,最多三个
option domain-name "internal.example.org"; # 为客户端指明DNS名字,定义了它会覆盖客户端/etc/resolv.conf里的配置
option routers 10.5.5.1; # 默认路由,其实就是网关
option broadcast-address 10.5.5.31; # 广播地址,不设置时默认会根据A/B/C类地址自动计算
default-lease-time ; # 默认租约时长
max-lease-time ; # 最大租约时长
}
#下面的是绑定MAC地址设置保留地址,保留地址不能是地址池中的地址
host fantasia { # 固定地址的配置,host后面的是标识符,没意义
hardware ethernet ::::c0:a5;
fixed-address 192.168.100.3; # 根据MAC地址分配的固定IP
}
如果不让dhcp修改/etc/resolv.conf里的内容,就在网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ethX里添加一行选项:PEERDNS=no。
在客户端如何获取动态分配的地址呢?
方法一:service network restart
但是每次重启网络很麻烦,可以使用客户端命令dhclient。
方法二:直接执行dhclient命令
这种方法下会显示4部请求中需要显示的步骤信息,以及最终分配的地址,所以是一个很好的理解dhcp工作的工具。
但是这种方法只能使用一次,第二次执行命令会提示该进程已经在执行,因为dhclient是一个进程。可以kill掉该进程再执行dhclient,或者使用dhclient -d选项。
方法三:dhclient -d
如何重新获取IP地址
每次重启网卡默认都获取的同一个ip,有时候想换个ip都很麻烦。在/var/lib/dhclient/目录下有".leases"文件,将它们清空或者删除这些文件中对应网卡的部分,再重启网络就可以获取新的动态ip。
[root@xuexi ~]# cat /var/lib/dhclient/dhclient-eth0.leases
lease {
interface "eth0";
fixed-address 192.168.100.16;
option subnet-mask 255.255.255.0;
option routers 192.168.100.2;
option dhcp-lease-time ;
option dhcp-message-type ;
option domain-name-servers 192.168.100.2;
option dhcp-server-identifier 192.168.100.254;
option broadcast-address 192.168.100.255;
option domain-name "localdomain";
renew // ::;
rebind // ::;
expire // ::;
}
或者,在/etc/sysconfig/network-scripts/ifcfg-eth0加入"DHCPRELEASE=yes"。
当运行ifdown eth0的时候就会发出dhcprelase报文,查看/etc/sysconfig/network-scripts/ifdown-eth脚本中实际上是调用dhclient命令,用下面这个命令应该也可以。
/sbin/dhclient -r eth0
第4章 DHCP服务的更多相关文章
- 《linux就该这么学》第十五节课:第14,15章,dhcp服务和邮件系统
(借鉴请改动) 13章收尾 13.6.分离解析技术 1.在主配置文件中改两个any 2.编辑区域配置文件,写入acl,使用match匹配 ...
- Linux网络服务第二章DHCP原理与配置
1.笔记 服务端端口:67 客户端端口:68 dhcliemt -r:释放IP地址 dhcliemt -d:重新获取IP地址 :.,$ s/190.168.200 / 192.168.100 /g 从 ...
- C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C ...
- 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识
第25章 DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...
- 网络操作系统 第九章 DHCP服务器管理与配置
本章小结 本章介绍了DHCP服务器的基本概念,基本原理和主要功能,详细说明了Window是下DHCP服务器的安装配置和Linux下DHCP 服务器的安装配置,通过本章的学习.读者能够理解动态主机配置协 ...
- Nmap扫描教程之网络基础服务DHCP服务类
Nmap扫描教程之网络基础服务DHCP服务类 Nmap网络基础服务 网络基础服务是网络正常工作的基石,常见的网络基础服务包括DHCP服务和DNS服务.其中,DHCP服务用来为计算机动态分配IP地址:D ...
- 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...
- 用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90)
Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢? 答案是通过 Linux Network Namespace 隔离,本节将详细 ...
- 配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89)
前面章节我们看到 instance 在启动过程中能够从 Neutron 的 DHCP 服务获得 IP,本节将详细讨论其内部实现机制. Neutron 提供 DHCP 服务的组件是 DHCP agent ...
随机推荐
- Codeforces Round #485 (Div. 2) C. Three displays
Codeforces Round #485 (Div. 2) C. Three displays 题目连接: http://codeforces.com/contest/987/problem/C D ...
- 初探ansible
Ansible 基于ssh的自动化运维工具 ansible 配置文件详解 ansible.cfg 文件 文件默认放置在/etc/ansible下,ansible读取配置文件的顺序是: 当前命令执行目录 ...
- maven + eclipse + tomcat热部署 引自:http://jingpin.jikexueyuan.com/article/23068.html
方案二: 1.修改tomcat的server.xml配置文件,在host结点下添加如下代码 Xml代码 <Context docBase="F:\eclipse_workspace ...
- roadhog如何支持除development和production外的其他环境变量配置
roadhog的build和start脚本分别对应了env/development和production,但实践中存在第三种开发环境(可能是预发或集成测试),配置和前两种也都不一样,但现在似乎没办法支 ...
- 转 Tomcat+redis+nginx配置
为客户开发的一个绩效系统,采用了java web的开发方式,使用了一些spring mvc, mybatis之类的框架.相比于oracle ebs的二次开发,这种开发更加灵活,虽然和ebs集成的时候遇 ...
- lambada
一.动态创建 ParameterExpression parameter = Expression.Parameter(typeof(User), "u"); //创建委托 Mem ...
- HttpServletRequest.getContextPath()取得的路径
如果项目名称为test,你在浏览器中输入请求路径:http://localhost:8080/test/pc/list.jsp 执行下面向行代码后打印出如下结果: 1. System.out.prin ...
- scrapy爬虫之模拟ajax post请求获取数据
实质:分析真实请求地址,根据规则构造新地址从而获得数据. 分析发现数据是通过异步ajax方式→post 获得的 于是通过分析response ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 发现每次翻页 网 ...
- Python学习笔记-基础1
一 初识Python python是一种面向对象.解释型的计算机程序语言.Python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特 ...
- 2018年3月24日上海MVP线下技术交流活动简报
2018年3月24日下午,几位上海MVP自发组织了一次线下的技术交流会,主要由MVP胡浩牵头,我(陈晴阳).刘鑫.朱兴亮和胡浩各自做了一次主题演讲,具体主题是: 陈晴阳:<这还是我认识的Visu ...