linux下DHCP服务原理总结

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

 

DHCP(全称Dynamic host configuration protocol):动态主机配置协议
DHCP工作在OSI的应用层,可以帮助计算机从指定的DHCP服务器获取配置信息的协议。(主要包括:ip地址,子网掩码,网关和dns等)。

DHCP的运作方式:
客户端传输广播包给整个物理网络段内的所有主句,如局域网内有DHCP服务器时,才会响应客户端的IP参数要求,所以DHCP服务器与客户端应该在同一个物理网段内
客户端与DHCP服务器之间连接的过程如下图:

1)客户端:利用广播包发送搜索DNCP服务器的包
2)服务器端:提供客户端网络相关的租约选择
3)客户端:决定选择的DHCP服务器提供的网络参数租约并汇报给服务器
4)服务器端:记录这次租约并回报给客户端相关的封包信息

简单来说下DHCP工作原理:
(1)客户机寻找服务器:广播发送discover包,寻找dhcp服务器
(2)服务器响应请求:单播发送offer包,对客户机做出响应。提供客户端网络相关的租约以供选择其中服务器在收到客户端的请求后,会针对客户端的mac地址与本身的设定数据进行一下工作:
    a)到服务器的登录文件中寻找该用户之前曾经使用过的ip,若有且该ip目前没有人使用,这提供此ip为客户机
    b)若配置文件中有针对该mac提供额外的固定ip,且该ip没有被使用,则提供此ip给客户机
    c)如果没有符合以上两个条件,则随机取用目前没有被使用的ip参数给客户机并记录到leases文件中。
(3)客户机发送ip请求:广播request包,选择一个服务器提供的网络参数租约回报服务器。此外,客户机会发送一个广播封包给局域网内的所有主机,告知自己已经接受服务器的租约。
(4)服务器确认租约:单播Ack包,服务器与客户机确认租约关系并记录到服务器的leases文件中 。

接着说下DHCP几个概念:
DHCP ClientDHCP客户端,通过DHCP协议请求IP地址的客户端。DHCP客户端是接口级的概念,如果一个主机有多个以太接口,则该主机上的每个接口都可以配置成一个DHCP 客户端。交换机上每个Vlan接口也可以配置成一个DHCP客户端。
DHCP Server:DHCP 服务端,负责为DHCP客户端提供IP地址,并且负责管理分配的IP地址。
DHCP Relay:DHCP中继器,DHCP客户端跨网段申请IP地址的时候,实现DHCP报文的转发功能。
DHCP Security:DHCP安全特性,实现合法用户IP地址表的管理功能
DHCP Snooping:DHCP监听,记录通过二层设备申请到IP地址的用户信息 

DHCP工作大致可以分为一下几个阶段:

一、发现阶段:
即DHCP客户端寻找DHCP服务端的过程,对应于客户端发送DHCP Discovery,因为DHCP Server对应于DHCP客户端是未知的,所以DHCP 客户端发出的DHCP Discovery报文是广播包,源地址为0.0.0.0目的地址为255.255.255.255。网络上的所有支持TCP/IP的主机都会收到该DHCP Discovery报文,但是只有DHCP Server会响应该报文。
如果网络中存在多个DHCP Server,则多个DHCP Server均会回复该DHCP Discovery报文。
如果同一个vlan内没有DHCP Server,而该VlanIf配置了DHCP Relay功能,则该Vlanif即为DHCP中继,DHCP中继会将该DHCP报文的源IP地址修改为该Vlanif的IP地址,而目的地址则为DHCP Relay配置的DHCP Server的IP地址。同时修改DHCP报文中,giaddress为VlanIf的IP地址。并以单播将DHCP Discovery发送到DHCP Server端。

二、DHCP Server 提供阶段:
DHCP Server提供阶段,即为DHCP Server响应DHCP Discovery所发的DHCP Offer阶段
DHCP Server收到DHCP Discovery报文后,解析该报文请求IP地址所属的Subnet。并从dhcpd.conf文件中与之匹配的subnet中取出一个可用的IP地址(从可用地址段选择一个IP地址后,首先发送ICMP报文来ping该IP地址,如果收到该IP地址的ICMP报文,则抛弃该IP地址,重新选择IP地址继续进行ICMP报文测试,直到找到一个网络中没有人使用的IP地址,用以达到防治动态分配的IP地址与网络中其他设备IP地址冲突,这个IP地址冲突检测机制,可配置),设置在DHCP Discovery报文中yiaddress字段中,表示为该客户端分配的IP地址,并且为该Lease设置该Subnet配置的Option,例如默认leases租期,最大租期,router等信息。
DHCP从地址池中选择IP地址,以如下优先级进行选择:
    1)当前已经存在的Ip Mac的对应关系
    2)Client以前的IP地址
    3)读取Discovery报文中的Requested Ip Address Option的值,如果存在并且IP地址可用
    4)从配置的Subnet中选择IP地址:
DHCP Server解析DHCP Discovery请求的IP所属的Subnet,首先看该DHCP Discovery报文中giaddress是否有DHCP Relay,如果有,则从giaddress所述的subnet中可用IP地址段中获取,并分配IP。如果giaddress没有IP地址,则从该DHCP Server绑定的接口的IP地址所属的网段分配IP地址。

三、DHCP Client 选择阶段:
DHCP Client收到若干个DHCP Server响应的DHCP Offer报文后,选择其中一个DHCP Server作为目标DHCP Server。选择策略通常为选择第一个响应的DHCP Offer报文所属的DHCP Server。
然后以广播方式回答一个DHCP Request报文,该报文中包含向目标DHCP请求的IP地址等信息。之所以是以广播方式发出的,是为了通知其他DHCP Server自己将选择该DHCP Server所提供的IP地址。

四、DHCP Server确认阶段:
当DHCP Server收到DHCP Client发送的DHCP Request后,确认要为该DHCP Client提供的IP地址后,便想该DHCP Client响应一个包含该IP地址以及其他Option的报文,来告诉DHCP Client可以使用该IP地址了。然后DHCP Client即可以将该IP地址与网卡绑定。另外其他DHCP Server都将收回自己之前为DHCP Client提供的IP地址。

五、DHCP Client重新登录网络:
当DHCP Client重新登录后,发送一个以包含之前DHCP Server分配的IP地址信息的DHCP Request报文,当DHCP Server收到该请求后,会尝试让DHCP客户端继续使用该IP地址。并回答一个ACK报文。
但是如果该IP地址无法再次分配给该DHCP Client后,DHCP回复一个NAK报文,当DHCP Client收到该NAK报文后,会重新发送DHCP Discovery报文来重新获取IP地址。

六、DHCP Client更新租约:
DHCP获取到的IP地址都有一个租约,租约过期后,DHCP Server将回收该IP地址,所以如果DHCP Client如果想继续使用该IP地址,则必须更新器租约。更新的方式就是,当当前租约期限过了一半后,DHCP Client都会发送DHCP Renew报文来续约租期。

linux下DHCP配置: 
配置文件都放在/etc/dhcp目录下;主配置文件为dhcpd.conf
将/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample文件复制到配置文件目录下,并覆盖dhcpd.conf文件,即可获得主配置文件。

主配置文件的主要内容介绍:
option domain-name "example.org";              //指定网域的域名
option domain-name-servers ns1.example.org, ns2.example.org;      //指定域名解析服务器(DNS)的ip地址。
default-lease-time 600;         //默认租约时间,单位为s
max-lease-time 7200;         //最大租约时间,单位为s。过期续约,续约直接发送request包即可。
log-facility local7;             //日志设备类型为local7.一般日志设备类型包括mail、crontab。通过此选项可以找到该服务的日志记录路径
subnet 10.5.5.0 netmask 255.255.255.224 {              //指定分配网段的ip地址以及子网掩码,括号内部为局部配置。
range 10.5.5.26 10.5.5.30;           //可使用的地址池范围
option domain-name-servers ns1.internal.example.org;          //该网段的域名,可以省略
option domain-name "internal.example.org";                 //网段DNS
option routers 10.5.5.1;                    //指定网关
option broadcast-address 10.5.5.31;               //指定广播地址
default-lease-time 600;                                 //租约时间
max-lease-time 7200;                         //最大租约时间。
}
host passacaglia {                         //主机名称
hardware ethernet 0:0:c0:5d:bd:95;               //主机的MAC地址
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";                  //文件名和服务器名,不太需要。
fixed-address fantasia.fugue.com;                  //固定的ip地址
}                      //保留主机,此选项用于指定内部存在的MAC地址的主机在请求ip时固定分配指定的地址。如果该指定ip已经被分配使用的话,保留主机的指定ip将不能使用。 

一个局域网内最好只有一个dhcp服务器,当一个局域网内存在多个服务器时,客户机只选择最先到达的offer。

搞清楚下面几个问题:
1)如何知道客户机从哪个DNS Server获得ip地址?
windows中直接查看网络链接详细信息,有个dhcp服务器,可以看到服务器的ip地址。
linux下查看/var/lib/dhclient/dhclient.leases,这是个租约文件,服务器端的租约文件在/var/lib/dhcpd/dhcpd.leases。
2)服务器分配ip的顺序?
从小的ip开始分配
3)为何客户机在获得一个ip后,释放再获得ip时会获得以前使用的ip?
客户机内有一个租约文件存放自己曾经获得的ip地址,服务器端也有一个租约文件存放了自己已经分配的ip以及其对应的主机mac。
4)服务器会在哪些端口提供dhcp服务?
默认在任何端口提供dhcp服务。实际上只是在与dhcp同一网段的网卡上提供dhcp服务。 
5)如果租约到期,而服务器并没有续约,该如何处理? 
会向其他服务器寻找dhcp服务

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************
本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/6081075.html ,如需转载请自行联系原作者
相关文章
|
9天前
|
安全 Linux iOS开发
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Gti 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Gti 服务
29 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Gti 服务
|
2月前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
193 19
|
2月前
|
监控 Linux
Linux systemd 服务启动失败Main process exited, code=exited, status=203/EXEC
通过以上步骤,可以有效解决 systemd 服务启动失败并报错 `Main process exited, code=exited, status=203/EXEC` 的问题。关键在于仔细检查单元文件配置、验证可执行文件的有效性,并通过日志分析具体错误原因。确保可执行文件路径正确、文件具有执行权限,并且可以独立运行,将有助于快速定位和解决问题。
693 7
|
4月前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
63 5
linux系统服务二!
|
4月前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
79 3
linux系统服务!!!
|
4月前
|
算法 Unix Linux
深入理解Linux内核调度器:原理与优化
本文探讨了Linux操作系统的心脏——内核调度器(Scheduler)的工作原理,以及如何通过参数调整和代码优化来提高系统性能。不同于常规摘要仅概述内容,本摘要旨在激发读者对Linux内核调度机制深层次运作的兴趣,并简要介绍文章将覆盖的关键话题,如调度算法、实时性增强及节能策略等。
|
4月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
611 3
|
4月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
279 3
|
5月前
|
Ubuntu Linux 网络安全
Linux中服务管理问题
【10月更文挑战第4天】
47 2
|
5月前
|
应用服务中间件 Linux Shell
Linux 配置 Nginx 服务的详细步骤,绝对干货
Linux 配置 Nginx 服务的详细步骤,绝对干货
191 0