DHCP工作原理简析
引言
DHCP是网络体系结构中应用层的一个重要协议,它可以帮助我们对要连接到互联网的计算机进行IP地址等信息的配置。本文从DHCP的原理出发,就DHCP的工作过程 进行详细的探讨。
主要报文
- 发现报文 DHCPDISCOVER
- 提供报文 DHCPOFFER
- 请求报文 DHCPREQUEST
- 确认报文 DHCPACK
- 否认报文 DHCPNAK
- 释放报文 DHCPRELEASE
工作过程
DHCP使用客户服务器方式。根据客户与服务器之间的报文交互情况,我们可以把整个DHCP协议工作过程简单地分成以下4 个步骤:
Step1(发现阶段)
DHCP客户以广播(broadcast)的形式发送DHCP发现报文DHCPDISCOVER到本地网络。为什么是以广播的方式呢?因为现在并不知道DHCP服务器在什么地方,所以要发现(DISCOVER)它的IP地址。此时的DHCP客户还没有自己的IP地址,因此它将自己IP数据报的源 IP地址 设为全 0 。而将目的 IP地址 设为全 1 ,也就是我们说的广播地址255.255.255.255。这样,本地网络上所有安装了TCP/IP协议的主机都可以收到这个报文,但只有DHCP服务器才对这个报文进行应答。
Step2(提供阶段)
凡收到DHCP发现报文的DHCP服务器都发出DHCP提供报文。DHCP服务器先在其数据库中 查找该计算机的配置信息。若找到,则返回找到的信息;若找不到,则从服务器的地址池(address pool)中取一个地址分配给该计算机。这里存在的疑问是,为什么要先在数据库里查找?这是因为数据库中可能存在与客户端MAC地址静态绑定的IP地址,而这个地址优先分配。这个阶段DHCP服务器发出的应答报文叫做DHCPOFFER,表示“提供”了IP地址等信息。
Step3(选择阶段)
DHCP客户可能收到多个 DHCP提供报文,它从几个DHCP服务器中选择其中的一个,通常是收到的第一个 ,并向所选择的DHCP服务器发送请求报文,请求(REQUEST)使用对方提供的IP地址和其他配置数据。
Step4(确认阶段)
被选择的DHCP服务器发送确认报文DHCPACK给DHCP客户。DHCP客户收到报文后,就可以使用刚才提供的IP地址了。这种状态称为“已绑定 ”。
说明
1. DHCP使用的协议和端口
DHCP数据报采用UDP协议进行封装,DHCP客户使用的UDP端口是68,而DHCP服务器使用的UDP端口是67。
2. DHCP的租期和计时器
DHCP分配给DHCP客户的IP地址是临时 的,DHCP客户只能在一段时间内使用这个分配的IP地址。DHCP协议称这段时间为租期(Lease Time),这个时间可以在DHCP服务器上设置。RFC2132对Lease Time的要求如下 :
The time is in units of seconds, and is specified as a 32-bit
unsigned integer.
即时间以秒为单位,并指定为32位无符号整数 。可以设置的时间范围从1秒到136年(232秒),DHCP客户也可以在自己发送的报文中提出对租期的要求。
因此,DHCP客户现在要根据服务器提供的租期T设置两个计时器T1和T2,它们的超时时间分别0.5T和0.875T,来提醒自己更新租期 。
当超时时间到达T1时,DHCP客户发送请求报文DHCPREQUEST要求更新租期。
- DHCP服务器若同意,则发回确认报文DHCPACK。DHCP客户得到了新的租用期,重新设置计时器。
- DHCP服务器若不同意,则发回否认报文DHCPNAK。这时DHCP客户必须立即停止使用原来的IP地址,回到发现阶段重新申请IP地址。
- DHCP服务器若不响应,则在超时时间到达T2时,重新发送请求报文DHCPREQUEST要求更新租期,然后重复前面的步骤。
DHCP客户可以随时提前终止服务器提供的租期,这时只需向DHCP服务器发送释放报文DHCPRELEASE即可。
结束语
以上介绍了DHCP协议的详细工作过程,对DHCP使用的端口、协议、租期和计时器等重要概念进行了说明。
DHCP工作原理简析的更多相关文章
- virtIO之VHOST工作原理简析
2017-07-19 一.前言 之前有分析过虚拟化环境下virtIO的实现,virtIO相关于传统的虚拟IO在性能方面的确提高了不少,但是按照virtIO虚拟网卡为例,每次虚拟机接收数据包的时候,数据 ...
- tomcat 工作原理简析
https://github.com/HappyTomas/another-tutorial-about-java-web/blob/master/00-08.md 在00-02.理解HTTP中给出了 ...
- Spring 核心组件工作原理简析
Spring Framework 的核心组件有三个: Spring Core,Spring Context 和 Spring Beans,它们奠定了 Spring 的基础并撑起了 Spring 的框架 ...
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- PHP的错误报错级别设置原理简析
原理简析 摘录php.ini文件的默认配置(php5.4): ; Common Values: ; E_ALL (Show all errors, warnings and notices inclu ...
- DHCP 工作原理
DHCP 详解 DHCP 工作原理 一.什么是DHCP? DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server), ...
- Java Annotation 及几个常用开源项目注解原理简析
PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...
- [转载] Thrift原理简析(JAVA)
转载自http://shift-alt-ctrl.iteye.com/blog/1987416 Apache Thrift是一个跨语言的服务框架,本质上为RPC,同时具有序列化.发序列化机制:当我们开 ...
- Spring系列.@EnableRedisHttpSession原理简析
在集群系统中,经常会需要将Session进行共享.不然会出现这样一个问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的Session,会强制让用户重 ...
随机推荐
- Pytorch学习笔记(一)Numpy SciPy MatPlotlib Tutorial
英文原文链接:http://cs231n.github.io/python-numpy-tutorial/ Numpy Numpy是Python中科学计算的核心库.它提供了一个高性能的多维数组对象,以 ...
- HTML和XHTML区别
HTML和XHTML 可扩展超文本标记语言XHTML(eXtensible HyperText Markup Language)是将超文本标记语言HTML(HyperText Markup Langu ...
- /usr/bin/ld: warning: libavformat.so.57, needed by /home/camera.so, not found (try using -rpath or -rpath-link)
ffmpeg中,使用libavformt.so.57时,查找不到. 解决方案: 修改ld.so.conf文件,添加路径. sudo gedit /etc/ld.so.conf 在文件末尾添加路径 /u ...
- 让你的Spring Boot应用快速运行在Docker上面
前置条件: 1. 服务器(我这边是CentOS7)上已经安装了Docker(安装步骤很简单,可以参考我上一篇博客) 2.服务器上已经安装了Java和Maven 在满足以上条件后,我们就可以开始了: 1 ...
- 创建Git 仓库及 克隆、拉取、和推送操作
打开网址: https://github.com/ 登录上自己创建的 Git账号 一. 创建Git 仓库 start a project---> 输入仓库 ...
- 依赖背包——cf855C好题
比较裸的依赖背包,但是想状态还是想了好久 转移时由于边界问题,虽然可以倒序转移,但当容量为0|1的时候,由于有初始值的存在 很难再原dp数组上进行修改,所以额外用tmp数组来保存修改后的值 #incl ...
- 洛谷 P1414 又是毕业季II
题目链接 https://www.luogu.org/problemnew/show/P1414 题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离 ...
- MySQL 笔记(Mysql 8.0.16)
用户登陆 mysql -u user_name -p 修改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 关闭服务 D:\ ...
- pta总结3
7-1 抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块 ...
- 在GNU/Linux下制作Windows 10安装U盘
今年春节回家期间,我需要将家里的一台安装了Debian Stretch的ZaReason笔记本电脑更换为Windows 10系统,好让爸妈从老台式机上的XP系统升级到新的平台上来.回家前,小仙女已在微 ...