基础服务类系列文章: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服务的更多相关文章

  1. 《linux就该这么学》第十五节课:第14,15章,dhcp服务和邮件系统

    (借鉴请改动) 13章收尾 13.6.分离解析技术    1.在主配置文件中改两个any         2.编辑区域配置文件,写入acl,使用match匹配                      ...

  2. Linux网络服务第二章DHCP原理与配置

    1.笔记 服务端端口:67 客户端端口:68 dhcliemt -r:释放IP地址 dhcliemt -d:重新获取IP地址 :.,$ s/190.168.200 / 192.168.100 /g 从 ...

  3. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

  4. 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识

    第25章      DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...

  5. 网络操作系统 第九章 DHCP服务器管理与配置

    本章小结 本章介绍了DHCP服务器的基本概念,基本原理和主要功能,详细说明了Window是下DHCP服务器的安装配置和Linux下DHCP 服务器的安装配置,通过本章的学习.读者能够理解动态主机配置协 ...

  6. Nmap扫描教程之网络基础服务DHCP服务类

    Nmap扫描教程之网络基础服务DHCP服务类 Nmap网络基础服务 网络基础服务是网络正常工作的基石,常见的网络基础服务包括DHCP服务和DNS服务.其中,DHCP服务用来为计算机动态分配IP地址:D ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  8. 用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90)

    Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢? 答案是通过 Linux Network Namespace 隔离,本节将详细 ...

  9. 配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89)

    前面章节我们看到 instance 在启动过程中能够从 Neutron 的 DHCP 服务获得 IP,本节将详细讨论其内部实现机制. Neutron 提供 DHCP 服务的组件是 DHCP agent ...

随机推荐

  1. Windows下 tensorboard出现ValueError:Invalid format string

    Windows下 tensorboard出现ValueError:Invalid format string错误时,是格式错误问题,解决方法参阅我的另一篇博客 https://www.jianshu. ...

  2. uboot常用的函数

    http://blog.csdn.net/ooonebook/article/details/53206623 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  3. 登陆页、注册页、会员中心页logo图的替换

                  关闭   PHP在线开发笔记       目录视图 摘要视图 订阅 异步赠书:9月重磅新书升级,本本经典           程序员9月书讯      每周荐书:ES6.虚 ...

  4. Exp3 免杀原理与实践 20154320 李超

    基础知识 如何检测出恶意代码 基于特征码的检测:分析指令的统计特性.代码的结构特性等.如果一个可执行文件(或其他运行的库.脚本等)拥有一般恶意代码所通有的特征(开启后门等)则被认为是恶意代码 启发式恶 ...

  5. mysql的ACID的理解

    这是在网上copy下来的ACID的概念,可以直接跳过看后面: 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开 ...

  6. jupyter notebook常用快捷键

    阅读目录 命令模式 (按键 Esc 开启) 编辑模式 ( Enter 键启动) Jupyter Notebook 的快捷键 使用前需要进行安装: pip install jupyter   (前提是你 ...

  7. 微信接收QQ邮箱e-mail

  8. github使用步骤

    首先需要注册一个github账号 1.认识github首页界面 2.如何新建一个自己的仓库 3.创建README文件 4.创建自己的文件 5.解析文件 6.生成地址 7.如何修改编辑文件

  9. WPF 开发备忘录

    运营日: select t.*   from (select ab.*, bs.station_cn_name, bd.device_name           from audit_tvm_cas ...

  10. Java 并发编程:核心理论

    并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密,这样才能写出高效.安全.可靠的多线程并发程序.本系 ...