当前位置:网站首页>DHCP 动态主机设置协议 分析

DHCP 动态主机设置协议 分析

2022-07-07 10:50:00 Xrtero

在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
DHCPDISCOVER1RFC3203
DHCPOFFER2RFC3203
DHCPREQUEST3RFC3203
DHCPDECLINE4RFC3203
DHCPACK5RFC3203
DHCPNAK6RFC3203
DHCPRELEASE7RFC3203
DHCPINFORM8RFC3203
DHCPORCERENEW9RFC3203
DHCPLEASEQUERY10RFC4388
DHCPLEASEUNASSIGNED11RFC4388
DHCPLEASEUNKNOWN12RFC4388
DHCPLEASEACTIVE13RFC4388

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

原网站

版权声明
本文为[Xrtero]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/Xrtero/p/16453700.html