在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 动态主机设置协议 分析的更多相关文章

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

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

  2. <TCP/IP>DHCP动态主机配置协议

    坚持是一种好习惯 大家都知道,为了上网我们是需要提交一些配置信息的,如IP地址,子网掩码,DNS服务器等,这些是一个主机能够在Internet上运行并给用户提供常用服务(比如web和Email)的基本 ...

  3. DHCP(动态主机配置协议)工作流程

    一.DHCP的作用 我们先来看一下什么是DHCP,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)它可以为客户机自动分配IP地址.子网掩码以及缺省网 ...

  4. DHCP动态主机配置协议

    1.DHCP简述 某组织一旦获得了一个地址,它就可以为本组织内的主机与路由器接口逐个分配IP地址.系统管理通常可以手工配置路由器中的IP地址(静态分配).但这项任务目前通常更多是使用动态主机配置协议( ...

  5. 第9章 应用层(2)_动态主机配置协议(DHCP)

    2. 动态主机配置协议(DHCP) 2.1 静态地址和动态地址的应用场景 (1)静态地址应用场景 ①IP地址不经常更改的设备(如服务器地址) ②使用有规律的IP地址以便于管理(如学校机房为方便教师管理 ...

  6. 动态主机配置协议DHCP

    一.什么是DHCP DHCP,动态主机配置协议,提供一种称为“即插即用连网”的机制,允许一台计算机加入新的网络和获取IP地址而不用手工配置. 二.DHCP工作原理和工作流程 DHCP服务器被动打开UD ...

  7. 动态主机配置协议-DHCP

    一.DHCP 概述 当局域网中有大量的PC时.如果我们逐个为每台PC去手动配置IP.那这就是一个吃力也未必讨好的办法 累死你 而DHCP 刚好可以解决这个问题.DHCP全称(动态主机配置协议).使用的 ...

  8. 计算机网络之动态主机配置协议DHCP

    为了将软件协议做成通用的和便于移植,协议软件的编写者不会把所有细节都固定在源代码中,而是把协议软件参数化,这就使得在很多台计算机上使用同一个经过编译的二进制代码成为可能. 一台计算机和另一台计算机的区 ...

  9. DHCP:动态主机配置协议

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...

随机推荐

  1. 【PyTorch】常用的神经网络层汇总(持续补充更新)

    1. Convolution Layers 1.1 nn.Conv2d (1)原型 torch.nn.Conv2d(in_channels, out_channels, kernel_size, st ...

  2. Apache Kafka 集群部署指南

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ Kafka基础 消息系统的作用 应该大部分小伙伴都清楚,用机油装箱举个例子. 所以消息系统就是如上图我们所说的仓库,能在中间 ...

  3. Linux进程总结

    一个执着于技术的公众号 进程 进程,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.它的执行需要系统分配资源创建实体之后,才能进行.举个例子: ...

  4. python爬取豆瓣电影Top250(附完整源代码)

    初学爬虫,学习一下三方库的使用以及简单静态网页的分析.就跟着视频写了一个爬取豆瓣Top250排行榜的爬虫. 网页分析 我个人感觉写爬虫最重要的就是分析网页,找到网页的规律,找到自己需要内容所在的地方, ...

  5. ELF文件结构

    ELF文件结构 ELF文件的全称是Executable and Linkable Format,直译为"可执行可链接格式",包括目标文件(.o).可执行文件(可以直接运行).静态链 ...

  6. 1903021121-刘明伟-java第七周作业-客户类测试

    项目 内容 课程班级博客链接 19信计班(本) 作业要求链接 作业要求链接 博客名称 1903021121-刘明伟-java第七周作业-客户类测试 要求 每道题要有题目,代码,截图 第一部分: 创建客 ...

  7. 我怀疑这是IDEA的BUG,但是我翻遍全网没找到证据!

    你好呀,我是歪歪. 前几天有朋友给我发来这样的一个截图: 他说他不理解,为什么这样不报错. 我说我也不理解,把一个 boolean 类型赋值给 int 类型,怎么会不报错呢,并接着追问他:这个代码截图 ...

  8. git提交时写message的规范

    message规范 angular示例 commit message(提交说明) git commit -m "写一行提交说明" # 跳出文本编辑器,写多行 git commit ...

  9. 好客租房15-jsx中的条件渲染

    jsx中的条件渲染 场景:loding效果 条件渲染:根据条件渲染特定的jsx结构 可以使用if/else或者三元运算符和逻辑和运算符实现 //导入react import React from &q ...

  10. SSE图像算法优化系列三十二:Zhang\Guo图像细化算法的C语言以及SIMD指令优化

    二值图像的细化算法也有很多种,比较有名的比如Hilditch细化.Rosenfeld细化.基于索引表的细化.还有Opencv自带的THINNING_ZHANGSUEN.THINNING_GUOHALL ...