DHCP 动态主机设置协议 分析
在TCP/IP网络中,每个接口都需要一个IP地址、子网掩码和广播地址( IPv6中没有),简单来说就是需要网络配置信息。如果想访问外部网络可以通过DNS获取外部地址,再通过路由间接转发出去。但是在“家乡网络”(本网)中想要通信,就需要知道自己的信息以及其他人的信息。自己的信息可以自己配置,其他人的信息可以通过ARP询问。
当然,自己的信息怎么知道的,需要问网络管理员,或者DHCP也知道。
DHCP(动态主机设置协议,Dynamic Host Configuration Protocol,RFC[2131])
title: 提醒
如果了解ARP会更好
想深入了解 ARP 可以问谷歌
一些概念
dhcp 的层次结构
dhcp 是位于应用层的一个应用程序,是基于 BOOTP (BootStrap协议),使用的是它的68(服务端)和 67 (客户端)这两个端口
dhcp可以通过以下三种方式配置:
1. 手动配置
2. 自动配置
例如无状态地址自动配置(SLAAC)
3. 动态分配
地址池与租用
当DHCP客户机请求分配一个IP地址,服务器从可用的地址池中选择一个地址作为响应。这个地址池是创建DHCP是给定的一段可分配的IP地址。
分配给客户机的地址只在一段时间内有效,这段时间称为租用期
客户机可以在这个地址快要到期时请求延长租用期,这个称谓续订
DHCP服务器会将租用信息保存在持久性存储器中,通常是非易失性内存或磁盘中来防止丢失。
DHCP 和 BOOTP 消息格式
DHCP扩展了BOOTP(他是DHCP前身)。DHCP消息格式的定义采用扩展BOOTP(bootstrap protocal)的方式
- 消息类型: 用来标识消息的类型,有两个值分别是:
- 请求(1)
- 应答(2)
- 硬件类型:基于ARP使用的值,最常见的是1(以太网 Ethernet)
- 硬件地址长度:用来存放硬件地址的长度,以太网是MAC地址长度(6)
- 跳步数:用来保存消息传输过程中的中继次数。消息发送方设为0,并在每次中继后递增
- 事务ID:客户机随机选择的一个随机数,服务器需要将它复制到相应中,用于将应答(ACK)和请求匹配
- 秒数:由客户机设置,它是第一次尝试申请后重新申请地址经过的秒数
- 通常客户机可以重新申请一个地址
- 标志:客户机可以设置该位来表示不能或不愿意处理单播IP数据报,但可处理广播数据报,通知服务器和中继代理,广播地址可用于响应中。
- 你的 IP:服务器提供,表示分配的IP
- 下一服务器IP地址:用于客户机的引导过程。
- 网关(中继)Ip地址:由DHCP或BOOTP中继器提供,转发DHCP消息时返回自己的地址。
- 客户机硬件地址字段:保存客户机的唯一标识符。通常为客户机的MAC地址。
- 服务器名称和引导文件名:并不需要每次都填写,表示服务器名或启动文件路径。
- magic cookie:用来表示后面的 option是 BOOTP 还是DHCP[RFC 1497 , Vendor Information "Magic Cookie"]
- 选项:携带一些额外数据。下面是一些常见的选项
名称 | 值 |
---|---|
选项包括填充 | 0 |
子网掩码 | 1 |
路由器地址 | 3 |
域名服务器 | 6 |
域名 | 15 |
请求的IP地址 | 50 |
地址租用期 | 51 |
DHCP消息类型 | 53 |
服务器标识符 | 54 |
参数请求列表 | 55 |
DHCP错误消息 | 56 |
租约更新时间 | 58 |
租约重新绑定时间 | 59 |
客户机标识符 | 61 |
域搜索列表 | 119 |
结束 | 255 |
DHCP消息类型比较重要,该选项是1字节长的选项,DHCP消息一定会使用它,它有以下可能值
名称 | 值 | RFC |
---|---|---|
DHCPDISCOVER | 1 | RFC3203 |
DHCPOFFER | 2 | RFC3203 |
DHCPREQUEST | 3 | RFC3203 |
DHCPDECLINE | 4 | RFC3203 |
DHCPACK | 5 | RFC3203 |
DHCPNAK | 6 | RFC3203 |
DHCPRELEASE | 7 | RFC3203 |
DHCPINFORM | 8 | RFC3203 |
DHCPORCERENEW | 9 | RFC3203 |
DHCPLEASEQUERY | 10 | RFC4388 |
DHCPLEASEUNASSIGNED | 11 | RFC4388 |
DHCPLEASEUNKNOWN | 12 | RFC4388 |
DHCPLEASEACTIVE | 13 | RFC4388 |
DHCP的工作方式
常见的申请DHCP方式
下图是测试的网络拓扑图
将使用PC2 申请 IP
PC2:
dhcp
抓去线路 Router1 -> Switch1 中的包,结果如下:
两个DHCP服务器收到 Discover
就通过ARP查询有无IP冲突,当发现没有冲突会发送一个 offer
,表示已经处理了申请请求,之后客户机发送一个 Request
表示自己已经接受到了DHCP服务器的请求(这是为了确保多个DHCP服务器提供IP)
,如下图所示(过滤了ARP),另外一个DHCP同样发送了一个 offer
客户机接受谁的 offer
就向那个DHCP服务器发 Request
,之后DHCP服务器接收到了会返回一个 ACK
。
上图中还能看到不少ARP的包。
首先,12-14(第一张图)的包是两个DHCP服务器最大程度解决本网络中不会发生IP碰撞。当没有收到有相同IP发出的ARP包,则会向DHCP客户机发送 offer
。
之后客户机会发送ACD(IPv4 地址冲突检测)来通告本网中自己在使用该IP地址,来确保其他人不会用。
TCP/IP详解中图特别清晰明了:
dhcp的续租
首先,将获取到的 IP 释放
下图是 Release
报文
Seconds elapsed 为从获得到该IP到IP释放所过去的秒数,其他类型的报文中该字段都为0
只有 Release
报文会携带该字段
Option 53 ,表示 DHCP消息类型 ,该值为7 表示是一个 Release。
客户机已经释放了该IP
修改DHCP服务器的 lease 使得客户机每30S需要续租 :
如上图所示,之后客户机会每隔30S申请一次(这里是32S)
客户机向服务器发送Request , 服务器收到并发送一个ACK
dhcp 客户机 重新获取
无非就是再走一遍获取流程
参考与使用的工具
参考:
TCP/ IP 详解 卷一
工具:
gns3
Wireshark
DHCP 动态主机设置协议 分析的更多相关文章
- 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识
第25章 DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...
- <TCP/IP>DHCP动态主机配置协议
坚持是一种好习惯 大家都知道,为了上网我们是需要提交一些配置信息的,如IP地址,子网掩码,DNS服务器等,这些是一个主机能够在Internet上运行并给用户提供常用服务(比如web和Email)的基本 ...
- DHCP(动态主机配置协议)工作流程
一.DHCP的作用 我们先来看一下什么是DHCP,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)它可以为客户机自动分配IP地址.子网掩码以及缺省网 ...
- DHCP动态主机配置协议
1.DHCP简述 某组织一旦获得了一个地址,它就可以为本组织内的主机与路由器接口逐个分配IP地址.系统管理通常可以手工配置路由器中的IP地址(静态分配).但这项任务目前通常更多是使用动态主机配置协议( ...
- 第9章 应用层(2)_动态主机配置协议(DHCP)
2. 动态主机配置协议(DHCP) 2.1 静态地址和动态地址的应用场景 (1)静态地址应用场景 ①IP地址不经常更改的设备(如服务器地址) ②使用有规律的IP地址以便于管理(如学校机房为方便教师管理 ...
- 动态主机配置协议DHCP
一.什么是DHCP DHCP,动态主机配置协议,提供一种称为“即插即用连网”的机制,允许一台计算机加入新的网络和获取IP地址而不用手工配置. 二.DHCP工作原理和工作流程 DHCP服务器被动打开UD ...
- 动态主机配置协议-DHCP
一.DHCP 概述 当局域网中有大量的PC时.如果我们逐个为每台PC去手动配置IP.那这就是一个吃力也未必讨好的办法 累死你 而DHCP 刚好可以解决这个问题.DHCP全称(动态主机配置协议).使用的 ...
- 计算机网络之动态主机配置协议DHCP
为了将软件协议做成通用的和便于移植,协议软件的编写者不会把所有细节都固定在源代码中,而是把协议软件参数化,这就使得在很多台计算机上使用同一个经过编译的二进制代码成为可能. 一台计算机和另一台计算机的区 ...
- DHCP:动态主机配置协议
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...
随机推荐
- XCTF练习题---MISC---base÷64
XCTF练习题---MISC---base÷64 flag:flag{E33B7FD8A3B841CA9699EDDBA24B60AA} 解题步骤: 1.观察题目,下载附件 2.打开附件,观察内容和题 ...
- 最佳实践 | 通过使用 Jira Service Management 改进 HR 工作流程
Jira Service Management 承诺解锁高速团队.技术团队和与之合作的业务部门都可以从 Jira Service Management中受益,尤其是 HR 团队. Atlassi ...
- Python常用数据结构-字典——2.1 字典方法 keys()
python字典常用方法: keys() # 获取所有的键 values() # 获取所有的值 items() # 获 ...
- Linux 或 Windows 上实现端口映射
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 通常服务器会有许多块网卡,因此也可能会连接到不同的网络, ...
- C Primer Plus 学习笔记 -- 前六章
记录自己学习C Primer Plus的学习笔记 第一章 C语言高效在于C语言通常是汇编语言才具有的微调控能力设计的一系列内部指令 C不是面向对象编程 编译器把源代码转化成中间代码,链接器把中间代码和 ...
- Python-100-Days-master-第二周笔记
python100day学习第二周 # 通过enumerate函数处理列表之后再遍历可以同时获得元素索引和值 list1 = [1, 3, 5, 7, 100] for index, elem in ...
- Java遇上SPL:架构优势和开发效率,一个不放过
摘要:如果我们在Java中也提供有一套完整的结构化数据处理和计算类库,那这个问题就能得到解决:即享受到架构的优势,又不致于降低开发效率. 本文分享自华为云社区<Java结构化处理SPL>, ...
- 题解0012:剪花布条(KMP)
信奥一本通1465 KPM例题 题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1465 题目描述:给出花布条和小饰条(字符串),求花布条中能剪 ...
- 169. Majority Element - LeetCode
Question 169. Majority Element Solution 思路:构造一个map存储每个数字出现的次数,然后遍历map返回出现次数大于数组一半的数字. 还有一种思路是:对这个数组排 ...
- Git分离头指针
Git头指针 Git中有HEAD头指针的概念.HEAD头指针通常指向某个分支的最近一次提交,但我们也可以改变它的指向,使其指向某个commit,此时处于分离头指针的状态. 如下,改变HEAD的指向,g ...