网络应用层之(1)DHCPv4协议
Author: Once Day Date: 2024年5月18日
一位热衷于Linux学习和开辟的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
全系列文档可参考专栏:通讯网络技能_Once-Day的博客-CSDN博客。
参考文章:
- 《TCP/IP详解卷一》
- DHCP协议详解 - 知乎 (zhihu.com)
- 只需三分钟!读懂DHCP的原理与设置 - 知乎 (zhihu.com)
- 37 张图详解 DHCP :给你 IP 地点的隐形人 - 知乎 (zhihu.com)
- 【网络协议详解】——DHCP体系协议(学习笔记)-CSDN博客
- 什么是DHCP?为什么要用DHCP? - 华为 (huawei.com)
- RFC 2131: Dynamic Host Configuration Protocol (rfc-editor.org)
- Info-Finder(在线工具) 报文格式 (huawei.com)
- DHCP - IP 报文格式大全 (huawei.com)
- BOOTP - IP 报文格式大全 (huawei.com)
### 网络应用层之(1)DHCPv4协议 Author:Once Day Date: 2024年5月18日
漫漫长路,有人对你笑过嘛…
全系列文档可参考专栏:通讯网络技能_Once-Day的博客-CSDN博客。
参考文档:
- 《TCP/IP详解卷一》
- DHCP协议详解 - 知乎 (zhihu.com)
- 只需三分钟!读懂DHCP的原理与设置 - 知乎 (zhihu.com)
- 37 张图详解 DHCP :给你 IP 地点的隐形人 - 知乎 (zhihu.com)
- 【网络协议详解】——DHCP体系协议(学习笔记)-CSDN博客
- 什么是DHCP?为什么要用DHCP? - 华为 (huawei.com)
- RFC 2131: Dynamic Host Configuration Protocol (rfc-editor.org)
- Info-Finder(在线工具) 报文格式 (huawei.com)
- DHCP - IP 报文格式大全 (huawei.com)
- BOOTP - IP 报文格式大全 (huawei.com)
1. 先容
1.1 DHCP协议先容
DHCP(Dynamic Host Configuration Protocol,动态主机设置协议)是一种网络管理协议,用于自动为参加网络的设备分配IP地点和其他网络设置参数。它简化了网络管理,使得设备可以即插即用,无需手动设置。
DHCP的前身是BOOTP(Bootstrap Protocol)(RFC0951),由Bill Croft和John Gilmore于1985年开辟,用于无盘工作站的IP地点分配。1993年,DHCP作为BOOTP的加强版被提出,由Ralph Droms紧张筹划和开辟。
1997年,DHCP成为RFC 2131尺度,得到广泛应用。2002年,DHCPv6(RFC 3315)发布,支持IPv6地点的动态分配。
随着网络规模的不停扩大,手动为每台设备分配IP地点变得越来越困难。对于服务器和路由器这种网络拓扑中的核心设备, 出于可靠性原因,通常是静态手工设置。但是大量的家用客户机和嵌入式设备,需要灵活的IP地点分配策略,其操纵者常常对网络知知趣识甚少,因此就需要一种会合服务来统一管理和自动分配IP地点。
DHCP广泛应用于各种网络环境,如家庭网络、企业网络、校园网等。它不仅适用于有线网络,也支持无线网络(如Wi-Fi)。当设备接入网络时,DHCP服务器会自动为其分配IP地点、子网掩码、默认网关、DNS服务器等参数,使设备可以或许正常通讯。
当一台启动DHCP client功能的客户机首次接入网络时,将会经历如下游程:
- DHCP客户端向网络广播DHCP Discover消息,哀求IP地点。
- DHCP服务器收到哀求后,从地点池中选择一个可用的IP地点,并发送DHCP Offer消息给客户端。
- 客户端吸收到一个或多个DHCP Offer后,选择此中一个,并向服务器发送DHCP Request消息,哀求使用该地点。
- 服务器收到DHCP Request后,将地点标记为已分配,并发送DHCP ACK消息,确认地点分配。
DHCP固然极大便利了网络设置流程,但是也存在一些风险,如下所示:
- DHCP缺乏对设备身份的验证机制,可能导致地点盗用和安全问题。
- DHCP服务器单点故障可能导致整个网络瘫痪,需要设置冗余和故障转移机制。
- DHCP的地点分配策略相对简朴,对于复杂网络环境,可能需要更精细的控制和管理。
在公共场所和公司办公场景,DHCP通常会搭配额外的认证服务流程,并绑定设备MAC和IP之间的关系,从而确保客户机受控接入,提高安全性。
1.2 DHCP和BOOTP协议的接洽
BOOTP协议是DHCP的前身,最初由Bill Croft和John Gilmore于1985年开辟,用于为无盘工作站自动分配IP地点。
BOOTP工作原理如下:
- 客户端广播BOOTREQUEST消息,哀求IP地点和引导信息。
- BOOTP服务器收到哀求后,从设置文件中查找客户端的硬件地点,并返回对应的IP地点和引导信息。
DHCP协议是在BOOTP的底子上发展而来,由Ralph Droms紧张筹划和开辟,于1993年提出。
DHCP在保存BOOTP根本功能的同时,举行了多方面的加强和扩展:
- 引入了地点租期的概念,客户端得到的IP地点有一定的有效期,到期后需要续租或重新获取。
- 支持更多的网络设置参数,如子网掩码、默认网关、DNS服务器等。
- 引入了DHCP中继代理(DHCP Relay Agent),办理了跨网段分配IP地点的问题。
- 提供了更灵活的地点分配策略,如手动分配、自动分配、动态分配等。
DHCP协议在筹划时充实思量了与BOOTP的兼容性,使得DHCP服务器可以或许同时为BOOTP和DHCP客户端提供服务:
- DHCP使用与BOOTP雷同的UDP端口(67和68),消息格式也根本兼容。
- DHCP服务器可以辨认BOOTP哀求,并按照BOOTP的方式举行相应。
- DHCP中继代理可以转发BOOTP哀求,扩展了BOOTP的适用范围。
目前,大多数DHCP服务器实现都同时支持DHCP和BOOTP协议,提供了很好的兼容性。例如,广泛使用的ISC DHCP服务器(DHCPD)默认支持BOOTP协议,可以为BOOTP客户端分配IP地点。Windows Server的DHCP服务也提供了BOOTP支持,通过设置选项可以启用BOOTP兼容模式。
1.3 DHCP相关的RFC文档
以下是与DHCP相关的紧张RFC文档列表:
- RFC 2131 - Dynamic Host Configuration Protocol (DHCP),DHCP协议的紧张规范,界说了DHCP的工作原理、报文格式和选项等。
- RFC 2132 - DHCP Options and BOOTP Vendor Extensions,界说了DHCP协议中常用的选项和BOOTP供应商扩展。
- RFC 3046 - DHCP Relay Agent Information Option,引入了DHCP中继代理信息选项(Option 82),用于在DHCP中继代理和服务器之间传递额外的信息。
- RFC 3118 - Authentication for DHCP Messages,为DHCP消息添加身份验证机制,提高了DHCP的安全性。
- RFC 3203 - DHCP reconfigure extension,界说了DHCP重新设置扩展,允许DHCP服务器向客户端发送重新设置消息,触发客户端重新获取设置信息。
- RFC 3315 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6),界说了用于IPv6网络的DHCP协议,称为DHCPv6。
- RFC 3396 - Encoding Long Options in the Dynamic Host Configuration Protocol (DHCPv4),形貌了在DHCPv4中编码长选项的方法,通过将长选项分割成多个子选项来传输。
- RFC 3442 - The Classless Static Route Option for Dynamic Host Configuration Protocol (DHCP) version 4,界说了DHCPv4的无类静态路由选项,用于为DHCP客户端分配静态路由。
- RFC 3925 - Vendor-Identifying Vendor Options for Dynamic Host Configuration Protocol version 4 (DHCPv4),界说了DHCPv4的供应商标识选项,允许供应商在DHCP消息中传递特定于供应商的信息。
- RFC 4242 - Information Refresh Time Option for Dynamic Host Configuration Protocol for IPv6 (DHCPv6),为DHCPv6界说了信息革新时间选项,用于指示客户端革新设置信息的时间隔断。
- RFC 4361 - Node-specific Client Identifiers for Dynamic Host Configuration Protocol Version Four (DHCPv4),界说了DHCPv4的节点特定客户端标识符,用于在多个接口上唯一标识DHCP客户端。
- RFC 4436 - Detecting Network Attachment in IPv4 (DNAv4),形貌了在IPv4网络中检测网络连接的机制,此中使用了DHCP的特性。
- RFC 4704 - The Dynamic Host Configuration Protocol for IPv6 (DHCPv6) Client Fully Qualified Domain Name (FQDN) Option,界说了DHCPv6的客户端完全限定域名(FQDN)选项,用于在DHCPv6中传递客户端的FQDN信息。
涵盖了DHCP协议的各个方面,包括根本规范、选项界说、安全性、IPv6支持等,共同构成了DHCP协议的完整规范和参考资料。
2. 报文格式
2.1 DHCPv4报文格式
DHCPv4报文格式由固定长度的字段和可变长度的选项字段组成,如下所示:
各字段分析如下:
- op(1字节),操纵码,指示报文的范例。1表现客户端哀求报文(BOOTREQUEST),2表现服务器相应报文(BOOTREPLY)。
- htype(1字节),硬件地点范例,表现客户端的硬件地点范例。例如,以太网范例值为1。
- hlen(1字节),硬件地点长度,表现客户端硬件地点的字节数。例如,以太网地点长度为6字节。
- hops(1字节),跳数,用于DHCP中继代理,指示报文颠末的中继代理数量。客户端设置为0,也能被一个代理服务器设置,超过某个阈值之后,就会丢弃报文。
- xid(4字节),事务ID,用于将哀求与相应匹配。客户端生成一个随机数,服务器在相应中使用雷同的值,服务器和客户端用来在它们之间互换哀求和相应,客户端用它对哀求和应答举行匹配。
- secs(2字节),客户端启动以来的秒数。由客户端添补,表现从客户端开始得到IP地点或IP地点续借后所使用了的秒数
- flags(2字节):标志位,指示客户端的某些特性。此字段在BOOTP中保存未用,在DHCP中表现标志字段。最常用的是广播标志(0x8000),表现服务器应该使用广播而不是单播来相应,全零表现服务器应该用单播报文往返复(只有最低位被使用,其余位都是零)。
- ciaddr(4字节),客户端IP地点,客户端在续租时使用。客户端处于Bound、Renew、Rebinding状态,而且能相应ARP哀求时,才气被添补。客户端初始状态没有地点的时候,可添补0.0.0.0地点。
- yiaddr(4字节),服务器分配给客户端的IP地点。当服务器发送相应报文时,将分配给客户端的 IP 地点填入这个字段。仅在DHCP服务器发送的Offer和ACK报文中表现,其他报文中表现为0。
- siaddr(4字节),服务器IP地点,用于引导步伐下载。表明DHCP协议流程的下一个阶段要使用的服务器的IP地点。
- giaddr(4字节),网关IP地点,DHCP中继代理使用,表现中继代理的IP地点。当客户端发出DHCP哀求时,假如服务器和客户端不在同一个网络中,那么第一个DHCP中继在转发这个DHCP哀求报文时会把自己的IP地点填入此字段。服务器会根据此字段来判定出网段地点,从而选择为用户分配地点的地点池。服务器还会根据此地点将相应报文发送给此DHCP中继,再由DHCP中继将此报文转发给客户端。
- chaddr(16字节),客户端硬件地点。与前面的硬件地点范例和硬件地点长度保持同等,当客户端发出DHCP哀求时,将自己的硬件地点填入此字段
- sname(64字节),服务器名称,用于引导步伐下载。此字段由DHCP Server填写,是可选的,假如填写,必须是一个以0末端的字符串。
- file(128字节),引导文件名,用于引导步伐下载。此字段由DHCP Server填写,是可选的,假如填写,必须是一个以0末端的字符串。
- options(可变长度),选项字段,包含了附加的设置参数,如子网掩码、网关、DNS服务器等。选项字段以"魔术字节"(0x63,0x82,0x53,0x63)开头,后跟一系列的选项代码、长度和值,选项字段以255(0xFF)结束,至少为312字节。
2.2 BOOTP报文格式
DHCPv4是在BOOTP的底子上发展而来的,因此它们的报文格式根本同等:
- DHCPv4和BOOTP使用雷同的UDP端口。服务器使用端口67,客户端使用端口68。
- 它们的报文格式根本雷同,都包含固定长度的字段,如操纵码、硬件地点范例、硬件地点长度、跳数、事务ID、客户端IP地点、你的IP地点、服务器IP地点等。
- 它们都使用"魔术字节"(0x63,0x82,0x53,0x63)来标识选项字段的开始。
- BOOTP的供应商信息字段对应于DHCPv4的选项字段,用于传递附加的设置参数。
DHCPv4在Bootp底子上,对报文的字段举行了加强表明和使用,如下:
- 标志位(flags),DHCPv4引入了广播标志(0x8000),用于指示服务器是否应该使用广播来相应客户端,而BOOTP没有这个标志位。
- 硬件地点长度(hlen),BOOTP的硬件地点长度固定为16字节,而DHCPv4的硬件地点长度可以根据实际的硬件地点范例而厘革,以太网地点长度为6字节。
- 文件字段(file)和服务器名称字段(sname),在BOOTP中,这两个字段用于引导步伐下载,而在DHCPv4中,这两个字段可以被选项覆盖(通过Option Overload选项),用于传递额外的选项数据。
- 选项字段(options),DHCPv4引入了许多新的选项,如DHCP消息范例、租约时间、续约时间等,这些选项在BOOTP中没有界说。
BOOTP紧张用于无盘工作站的IP地点分配和引导步伐下载,而DHCPv4除了IP地点分配外,还支持传递更多的网络设置参数,如子网掩码、默认网关、DNS服务器等,适用于各种范例的网络设备。
2.3 DHCP报文选项
DHCP选项的格式如下:
- | -- 选项标签(8 bit) -- | -- 选项长度(8 bit) -- | -- 选项值(可变) -- |
复制代码 除了空白和结束添补选项之外,其他选项都由上面TLV格式组成,常见选项如下:
标签(代码)名称形貌0Pad添补选项,用于将选项字段添补到特定的边界1子网掩码指定客户端的子网掩码3路由器指定客户端的默认网关6域名服务器指定客户端的DNS服务器12主机名指定客户端的主机名15域名指定客户端的域名50哀求的IP地点客户端哀求的特定IP地点51IP地点租约时间指定分配给客户端的IP地点租约期53DHCP消息范例指定DHCP消息的范例(如DHCPDISCOVER、DHCPOFFER等)54服务器标识符标识DHCP服务器的IP地点56消息服务器向客户端发送的错误消息或其他信息58续约时间客户端在IP地点租约逾期前,应该开始实验续约的时间59重绑定时间假如客户端无法与原始服务器续约,它应该开始广播哀求新的租约的时间55参数哀求列表客户端哀求的特定设置参数列表61客户端标识符唯一标识客户端的信息255End选项字段的结束标记,表现没有更多的选项 当DHCP报文的选项字段长度超过了可用空间时,可以使用选项超载(Option Overload)机制来扩展选项字段。选项超载通过复用DHCP报文中的"文件名"(File)和"服务器主机名"(Sname)字段来传递额外的选项数据。
选项超载的工作原理如下:
- 在DHCP报文的选项字段中添加"Option Overload"选项(代码52),用于指示选项数据的存储位置。
- "Option Overload"选项的值指定了额外选项数据的存储位置:
- 值为1:表现额外的选项数据存储在"文件名"字段中。
- 值为2:表现额外的选项数据存储在"服务器主机名"字段中。
- 值为3:表现额外的选项数据同时存储在"文件名"和"服务器主机名"字段中。
- 吸收方根据"Option Overload"选项的值,从相应的字段中读取额外的选项数据。
假设一个DHCP服务器需要为客户端分配IP地点、子网掩码、默认网关、DNS服务器,而且还需要传递一些自界说的设置参数。选项字段的长度超过了可用空间,服务器决定使用选项超载机制。
DHCP报文的选项字段可能如下:
- Option 53 (DHCP Message Type): DHCP Offer
- Option 1 (Subnet Mask): 255.255.255.0
- Option 3 (Router): 192.168.1.1
- Option 6 (Domain Name Server): 8.8.8.8, 8.8.4.4
- Option 52 (Option Overload): 1
复制代码 额外的选项数据存储在"文件名"字段中:
- Option 128 (Custom Option): 0x01020304
- Option 129 (Custom Option): "example.com"
复制代码 当客户端收到这个DHCP Offer报文时,它会查抄"Option Overload"选项,发现额外的选项数据存储在"文件名"字段中,然后从该字段中读取并解析额外的选项数据,得到完整的设置信息。
2.4 DHCP消息范例
DHCP消息范例选项(选项代码53)是DHCP协议中最关键的选项之一,它用于标识DHCP消息的范例,以便客户端和服务器可以或许准确地表明和相应彼此的消息,每个DHCP消息都必须包含这个选项。
代码消息范例形貌1DHCPDISCOVER客户端广播探求可用的DHCP服务器2DHCPOFFERDHCP服务器提供可用的IP地点和设置参数3DHCPREQUEST客户端哀求特定的IP地点,大概确认接受DHCP服务器的发起4DHCPDECLINE客户端拒绝DHCP服务器提供的IP地点5DHCPACKDHCP服务器确认客户端的IP地点哀求6DHCPNAKDHCP服务器拒绝客户端的IP地点哀求7DHCPRELEASE客户端释放IP地点,通知DHCP服务器8DHCPINFORM客户端哀求额外的设置参数,但不哀求IP地点 DHCP客户端和服务器通过这些消息范例来协调IP地点分配和网络设置的过程:
- 客户端广播DHCPDISCOVER消息,探求可用的DHCP服务器。
- DHCP服务器相应DHCPOFFER消息,提供可用的IP地点和其他设置参数。
- 客户端选择一个DHCP服务器,并发送DHCPREQUEST消息,哀求特定的IP地点或确认接受服务器的发起。
- DHCP服务器发送DHCPACK消息,确认客户端的IP地点哀求;大概发送DHCPNAK消息,拒绝客户端的哀求。
DHCP服务器处置处罚的消息范例:
- DHCPDISCOVER,服务器吸收客户端广播的DHCPDISCOVER消息:
- 服务器根据自己的IP地点池和设置策略,选择一个可用的IP地点,并准备其他必要的设置参数。
- 服务器生成DHCPOFFER消息,提供选定的IP地点和设置参数。
- DHCPREQUEST,服务器吸收客户端发送的DHCPREQUEST消息,该消息可以是广播或单播。
- 服务器查抄DHCPREQUEST消息中哀求的IP地点是否与之前提供的同等。
- 假如IP地点匹配,服务器生成DHCPACK消息,确认客户端的IP地点哀求。
- 假如IP地点不匹配大概客户端哀求的IP地点无效,服务器生成DHCPNAK消息,拒绝客户端的哀求。
- DHCPDECLINE,服务器吸收客户端广播的DHCPDECLINE消息,表现客户端拒绝接受分配的IP地点。
- 服务器将该IP地点标记为不可用,以避免将其分配给其他客户端。
- DHCPRELEASE,服务器吸收客户端单播的DHCPRELEASE消息,表现客户端释放分配的IP地点。
- 服务器将该IP地点标记为可用,以便将其分配给其他客户端。
- DHCPINFORM,服务器吸收客户端单播的DHCPINFORM消息,哀求额外的设置参数。
- 服务器生成DHCPACK消息,提供哀求的设置参数,但不分配IP地点。
DHCP客户端处置处罚的消息范例(服务端是否发送广播与客户端哀求报文的flags有关):
- DHCPOFFER,客户端吸收服务器单播或广播的DHCPOFFER消息,此中包含服务器提供的IP地点和设置参数。
- 客户端选择一个DHCPOFFER,并准备发送DHCPREQUEST消息。
- DHCPACK,客户端吸收服务器单播或广播的DHCPACK消息,确认之前哀求的IP地点和设置参数。
- 客户端设置网络接口,使用分配的IP地点和设置参数。
- DHCPNAK,客户端吸收服务器单播或广播的DHCPNAK消息,表现服务器拒绝客户端的IP地点哀求。
- 客户端重新开始DHCP流程,发送新的DHCPDISCOVER消息。
2.5 DHCP服务端
该表格信息来自RFC 2131: Dynamic Host Configuration Protocol (rfc-editor.org)
根据RFC 2131文档的4.3.1节,以太网环境下DHCP服务器发送的三种消息(DHCPOFFER、DHCPACK和DHCPNAK)的报文字段如下:
字段DHCPOFFERDHCPACKDHCPNAK操纵码(op)2(相应消息)2(相应消息)2(相应消息)硬件地点范例(htype)111硬件地点长度(hlen)666中继跳跃步数(hops)000事务ID(xid)DHCPDISCOVER的xidDHCPREQUEST的xidDHCPREQUEST的xidsecs000ciaddr00大概
DHCPREQUEST的客户端地点0yiaddr提供给客户端的IP地点提供给客户端的IP地点0siaddr0大概下一个服务器地点0大概下一个服务器地点0flagsDHCPDISCOVER的flagsDHCPREQUEST的flagsDHCPREQUEST的flagsgiaddrDHCPDISCOVER的giaddrDHCPREQUEST的giaddrDHCPREQUEST的giaddrchaddrDHCPDISCOVER的chaddrDHCPREQUEST的chaddrDHCPREQUEST的chaddrsname服务器主机名或空服务器主机名或空空file启机文件名或空启机文件名或空空options必须包含选项必须包含选项必须包含选项 选项字段的要求如下:
OptionDHCPOFFERDHCPACKDHCPNAKRequested IP addressMUST NOTMUST NOTMUST NOTIP address lease timeMUSTMUST (DHCPREQUEST)
MUST NOT (DHCPINFORM)MUST NOTUse ‘file’/‘sname’ fieldsMAYMAYMUST NOTDHCP message typeDHCPOFFERDHCPACKDHCPNAKParameter request listMUST NOTMUST NOTMUST NOTMessageSHOULDSHOULDSHOULDClient identifierMUST NOTMUST NOTMAYVendor class identifierMAYMAYMAYServer identifier(54)MUSTMUSTMUSTMaximum message sizeMUST NOTMUST NOTMUST NOTAll othersMAYMAYMUST NOT 必须包含的选项有三类:消息范例(option 53)、服务器标识符(option 54)、IP地点租约时间(option 51,DHCPOFFER和DHCPACK)。
2.6 DHCP客户端
可参考文档:RFC 2131: Dynamic Host Configuration Protocol (rfc-editor.org)
根据RFC 2131文档的4.4.1节,DHCP客户端发送的消息(DHCPDISCOVER、DHCPREQUEST、DHCPDECLINE、DHCPRELEASE和DHCPINFORM)的字段如下:
字段DHCPDISCOVERDHCPREQUESTDHCPDECLINEDHCPRELEASEDHCPINFORMop11111htype11111hlen66666hops00000xid随机生成DHCPOFFER的xid随机生成随机生成随机生成secs0或已过秒数0或已过秒数000或已过秒数flags0或10或1000或1ciaddr0'ciaddr’或00‘ciaddr’‘ciaddr’yiaddr00000siaddr00000giaddr00000chaddr客户端硬件地点客户端硬件地点客户端硬件地点客户端硬件地点客户端硬件地点sname服务器主机名或空服务器主机名或空空空服务器主机名或空file启机文件名或空启机文件名或空空空启机文件名或空options必须包含选项必须包含选项必须包含选项必须包含选项必须包含选项 补充分析:
- ‘xid’:DHCPOFFER或DHCPACK消息中的’xid’字段,用于标识客户端的哀求。
- ‘ciaddr’:客户端的IP地点,假如客户端已经有IP地点(在DHCPREQUEST、DHCPRELEASE和DHCPINFORM消息中),则填写该地点;否则为0。
- ‘giaddr’:网关IP地点,假如客户端通过中继代剃头送DHCPREQUEST消息,则填写中继代理的IP地点。
- flags字段中的广播标志(1位)可以设置为0或1,指示服务器是否应该将相应作为广播发送。
options字段必须包含以下选项:
- DHCPDISCOVER:客户端标识符(假如已知)、哀求的参数列表、最大DHCP消息大小、vendor class identifier(可选)。
- DHCPREQUEST:客户端标识符(假如已知)、哀求的IP地点(假如在SELECTING状态)、服务器标识符(假如在SELECTING状态)、哀求的参数列表、最大DHCP消息大小、vendor class identifier(可选)。
- DHCPDECLINE:服务器标识符、哀求的IP地点。
- DHCPRELEASE:服务器标识符。
- DHCPINFORM:哀求的参数列表、最大DHCP消息大小、vendor class identifier(可选)。
3. 工作流程
3.1 DHCP服务器地点分配方式
DHCP服务器有三种紧张的IP地点分配方式:
- 自动分配(Automatic Allocation),DHCP服务器从界说的IP地点池中为客户端分配一个永久的IP地点。
- 客户端第一次哀求IP地点时,服务器会为其分配一个特定的IP地点,并将该地点与客户端的MAC地点关联。
- 在客户端的生命周期内,它将一直使用这个分配的IP地点,除非管理员手动更改。
- 自动分配适用于需要长期稳定IP地点的客户端,如服务器或网络打印机。
- 动态分配(Dynamic Allocation),DHCP服务器从界说的IP地点池中为客户端分配一个临时的IP地点,并设置一个租约时间。
- 客户端在租约时间内可以使用这个IP地点,租约到期后必须续租或哀求新的IP地点。
- 假如客户端在租约到期前释放IP地点或租约到期后未续租,服务器将回收该IP地点,并可以将其分配给其他客户端。
- 动态分配适用于对IP地点需求灵活、网络中客户端频繁厘革的环境,如办公网络或公共Wi-Fi。
- 手动分配(Manual Allocation),管理员手动为特定的客户端分配固定的IP地点,通常基于客户端的MAC地点。
- 手动分配的IP地点不属于DHCP服务器的IP地点池,而是单独保存给指定的客户端。
- 客户端哀求IP地点时,DHCP服务器会查抄客户端的MAC地点,并分配预先设置的固定IP地点。
- 手动分配适用于需要固定IP地点的特别设备,或需要严酷控制IP地点分配的网络环境。
除了这三种紧张的分配方式,DHCP服务器还可以通过以下方式优化IP地点分配:
- IP地点保存(Reservation),为特定的MAC地点预留固定的IP地点,确保客户端始终得到雷同的IP地点。
- 地点清除(Exclusion),从DHCP服务器的IP地点池中清除特定的IP地点或地点范围,防止这些地点被分配给客户端。
- 地点范围划分(Scopes),将IP地点池划分为多个范围,每个范围对应差别的网络区域或客户端范例,方便管理和控制IP地点分配。
3.2 DHCP客户端接入网络流程
DHCP客户端和服务器交互表示图,来自华为IP知识百科:什么是DHCP?为什么要用DHCP? - 华为 (huawei.com)
一台新设备通过DHCP获取网络地点的流程通常包括以下步调:
(1) 客户端广播DHCP Discover消息,DHCP客户端启动时,本机接口上没有IP地点,通过本地链路发送广播报文探求服务器:
- 本地链路广播报文,因此源mac为接口mac地点,目的mac为广播mac地点(FF:FF:FF:FF:FF:FF)。
- 由于没有接口IP,以是源IP地点为0.0.0.0,目标IP地点为255.255.255.255(受限广播地点),UDP报文的源端口为68,目的端口为67。
- 事务ID(xid)由客户端生成的随机数,用于标识该次交互。
- 标志flags根据客户端的情况设置为单播大概广播,会影响到服务器DHCPOFFER报文的回复情况。
- DHCP消息范例设置为1,表现DHCPDISCOVER。
(2) 服务器广播/单播DHCP Offer消息,DHCP服务器收到DHCPDISCOVER报文后,会给客户端提供IP地点和租期等信息:
- DHCP服务器从其管理的IP地点池中选择一个可用的IP地点,并发送一个DHCPOFFER消息给客户端,此中包含IP地点、子网掩码、地点租期等信息。
- DHCP服务器可以回复二层单播大概广播报文,单播报文的目的mac地点是客户端mac地点。
- 源IP地点为DHCP服务器的IP地点,目标IP地点为255.255.255.255(广播地点),目的IP为广播地点不代表二层转发是广播转发。目标IP某些DHCP实现也会用分配的客户端IP取代。
- 事务ID(xid),与DHCPDISCOVER消息中的xid雷同。
- 分配的IP地点(yiaddr),服务器提供给客户端的IP地点。
- 服务器标识符(option 54),DHCP服务器的IP地点,尺度实现必须提供服务器标识符。
- DHCP消息范例设置为2,表现DHCPOFFER。
(3) 客户端广播DHCPRequest消息,DHCP客户端从收到的DHCPOFFER消息中选择合适的服务端举行回复。
- 客户端收到一个或多个DHCPOFFER消息后,选择此中一个服务器提供的IP地点,并广播/单播一个DHCPREQUEST消息。
- 源IP地点为0.0.0.0,目标IP地点为255.255.255.255(受限广播地点)。
- 事务ID(xid),与DHCPDISCOVER消息中的xid雷同。
- 哀求的IP地点(option 50),客户端选择的IP地点。
- 服务器标识符(option 54),提供所选IP地点的DHCP服务器的IP地点。
- DHCP消息范例设置为3,表现DHCPREQUEST。
(4) 服务端广播/单播DHCP Ack消息,DHCP服务器收到DHCPRequest消息后,通过DHCPACK消息回复客户端:
- DHCP服务器收到DHCPREQUEST消息后,确认客户端的IP地点哀求,并发送一个DHCPACK消息给客户端。
- 对于广播消息,源IP地点为DHCP服务器的IP地点,目标IP地点为255.255.255.255(广播地点)。
- 对于单播消息,源IP地点为DHCP服务器的IP地点,客户端的IP地点(假如客户端在DHCPREQUEST消息中设置了ciaddr字段)。
- 生意业务ID(xid),与DHCPREQUEST消息中的xid雷同。
- 分配的IP地点(yiaddr),确认客户端哀求的IP地点。
- DHCP消息范例设置为5,表现DHCPACK。
客户端在吸收到DHCP ack广播后,会向网络发送三个针对此IP地点的ARP解析哀求以实行冲突检测,假如发现该IP地点已经被使用,客户机会发出一个DHCP decline数据包给DHCP服务器,拒绝此IP地点租约,并重新发送DHCP discover信息。
3.3 DHCP客户端续租
DHCP客户端续租交互表示图,来自华为IP知识百科:什么是DHCP?为什么要用DHCP? - 华为 (huawei.com)
DHCP客户端在得到IP地点后,需要在租约期限内定期续租,以下是DHCP客户端续租的流程:
(1) T1时间点(Renewal时间点),T1时间点是租约时间的50%,例如,假如租约时间为8天,则T1时间点为4天。
- 当客户端达到T1时间点时,它会实验与为其提供IP地点的DHCP服务器接洽,以续租其IP地点。
- 客户端向DHCP服务器发送一个DHCPREQUEST消息。
- 客户端IP地点(ciaddr),客户端当前使用的IP地点。
- 服务器标识符(option 54),提供客户端当前IP地点的DHCP服务器的IP地点。
- 此DHCPREQUEST消息以单播方式发送给DHCP服务器。
(2) DHCP服务器相应,假如DHCP服务器可以续租客户端的IP地点,它会相应一个DHCPACK消息,确认续租哀求。
- 客户端IP地点(ciaddr):确认客户端当前使用的IP地点。
- 租约时间(option 51):更新后的租约时间。
- 客户端收到DHCPACK消息后,更新其租约时间,并继续使用当前的IP地点。
(3) T2时间点(Rebinding时间点),T2时间点是租约时间的87.5%,例如,假如租约时间为8天,则T2时间点为7天。
- 假如客户端在T1时间点之后未能从DHCP服务器收到DHCPACK消息,则在达到T2时间点时,客户端会实验与任何DHCP服务器接洽以续租其IP地点。
- 客户端会广播一个DHCPREQUEST消息,以便任何DHCP服务器都可以相应。
- 客户端IP地点(ciaddr),客户端当前使用的IP地点。
(4) DHCP服务器相应,任何收到DHCPREQUEST消息的DHCP服务器都可以相应一个DHCPACK消息,确认续租哀求。
- DHCPACK消息包含与步调2中雷同的紧张字段。
- 客户端收到DHCPACK消息后,更新其租约时间,并继续使用当前的IP地点。
假如客户端在T2时间点之后仍未收到DHCPACK消息,则它必须停止使用当前的IP地点,并重新启动DHCP流程,从DHCPDISCOVER阶段开始哀求新的IP地点。
3.4 DHCP中继场景接入网络流程
DHCP中继场景交互表示图,来自华为IP知识百科:什么是DHCP?为什么要用DHCP? - 华为 (huawei.com)
在DHCP中继场景下,DHCP客户端和服务器之间的交互流程与直连场景类似,以下是DHCP中继场景下的大致流程:
(1) DHCP Discover,客户端广播DHCPDISCOVER消息,哀求IP地点。
- DHCP中继代理(通常是路由器)吸收到DHCPDISCOVER消息。
- 中继代理将DHCPDISCOVER消息中的giaddr字段设置为自己的IP地点,并将消息转发给DHCP服务器。
(2) DHCP Offer,DHCP服务器收到转发的DHCPDISCOVER消息,选择一个可用的IP地点,并发送DHCPOFFER消息给中继代理。
- 中继代理吸收到DHCPOFFER消息,将其转发给客户端。
(3) DHCP Request,客户端吸收到一个或多个DHCPOFFER消息,选择此中一个,并广播DHCPREQUEST消息。
- 中继代理吸收到DHCPREQUEST消息,将其转发给DHCP服务器。
(4) DHCP Ack,DHCP服务器收到转发的DHCPREQUEST消息,确认IP地点分配,并发送DHCPACK消息给中继代理。
- 中继代理吸收到DHCPACK消息,将其转发给客户端。
与直连场景相比,DHCP中继场景有以下紧张差别:
- 中继代理的作用,在DHCP中继场景下,客户端和服务器之间存在一个或多个中继代理(通常是路由器)。
- giaddr字段的使用,在DHCP中继场景下,中继代理将自己的IP地点插入到DHCPDISCOVER和DHCPREQUEST消息的giaddr字段中。DHCP服务器使用giaddr字段来辨认客户端所在的子网,并选择得当的IP地点举行分配。
- 消息转发,在DHCP中继场景下,客户端和服务器之间的DHCP消息由中继代理举行转发。
在DHCP客户端视角,DHCP中继与DHCP服务器一样,交互流程和直连场景无异。在DHCP中继和DHCP服务器之间,所有交互报文都是单播报文,两者的IP信息都是固定的,因此无需通过广播报文举行发现和查找。
3.5 DHCP客户端状态机
DHCP客户端状态变动图,来自37 张图详解 DHCP :给你 IP 地点的隐形人 - 知乎 (zhihu.com)
非常推荐这篇文档,内里有很多简洁易懂的图,可以用来直观形象的感受DHCP工作流程。
DHCP客户端的状态机流程图形貌了客户端在获取、使用和更新IP地点时所经历的差别状态,如下所示:
- 初始(INIT)状态:
- 客户端开始DHCP历程,准备哀求IP地点。
- 客户端转换到SELECTING状态。
- 选择(SELECTING)状态:
- 客户端广播DHCPDISCOVER消息,哀求IP地点。
- 当客户端收到一个或多个DHCPOFFER消息时,它选择此中一个服务器,并转换到REQUESTING状态。
- 哀求(REQUESTING)状态:
- 客户端向选定的服务器发送DHCPREQUEST消息,哀求所选的IP地点。
- 假如客户端收到DHCPACK消息,表现服务器确认了IP地点分配,客户端转换到BOUND状态。
- 假如客户端收到DHCPNAK消息,表现服务器拒绝了IP地点哀求,客户端返回到INIT状态。
- 绑定(BOUND)状态:
- 客户端已成功得到一个IP地点,并可以使用它举行网络通讯。
- 当租约时间的50%(T1时间点)过去后,客户端转换到RENEWING状态。
- 假如租约时间逾期,客户端返回到INIT状态。
- 更新(RENEWING)状态:
- 客户端向原DHCP服务器发送DHCPREQUEST消息,哀求续租其IP地点。
- 假如客户端收到DHCPACK消息,表现服务器确认了续租哀求,客户端返回到BOUND状态。
- 假如租约时间的87.5%(T2时间点)过去后,客户端转换到REBINDING状态。
- 重新绑定(REBINDING)状态:
- 客户端向所有DHCP服务器广播DHCPREQUEST消息,哀求续租其IP地点。
- 假如客户端收到DHCPACK消息,表现服务器确认了续租哀求,客户端返回到BOUND状态。
- 假如租约时间逾期,客户端返回到INIT状态。
3.6 DHCP认证
DHCP认证是一种安全机制,用于验证DHCP客户端的身份,并确保只有颠末授权的客户端才气得到IP地点和其他网络设置参数。
DHCP认证通常使用DHCP消息中的认证选项(Option 90)来携带认证信息。常见的DHCP认证协议包括DHCP Authentication Protocol (RFC 3118)和DHCP Delayed Authentication Protocol (RFC 4030)。
DHCP认证可以使用共享密钥或数字证书等方法来验证客户端的身份。
- 共享密钥认证:客户端和服务器使用预共享的密钥对DHCP消息举行签名和验证。
- 数字证书认证:客户端使用数字证书对DHCP消息举行签名,服务器使用证书的公钥验证签名。
DHCP认证过程如下:
- 客户端在DHCPDISCOVER或DHCPREQUEST消息中包含认证选项,此中包含客户端的标识符和签名。
- 服务器吸收到包含认证选项的DHCP消息后,使用共享密钥或数字证书验证客户端的签名。
- 假如认证成功,服务器会处置处罚客户端的哀求,并发送包含认证选项的DHCPOFFER或DHCPACK消息。
- 假如认证失败,服务器会忽略客户端的哀求,或发送DHCPNAK消息。
DHCP认证可以防止未经授权的客户端得到IP地点和其他网络资源。通过认证,管理员可以对网络接入举行更严酷的控制,防止DHCP欺骗和其他范例的攻击。
4. 总结
DHCP协议是日常生活中到处可见的动态地点设置协议,相对而言比较复杂,涉及广播报文和8种消息范例的交互。
在深入学习和分析之后,紧张可以分为DHCP客户端获取IP地点和租期续约两种流程。每种流程的消息范例和交互是固定样式,因此把握起来并不难。
DHCP协议报文交互学习的一种有效方式是通过wireshar抓包分析实际报文,TCP详解和各种网页文档,根本都包含这步,以是本篇文档就不再重复这步,如下:
- 37 张图详解 DHCP :给你 IP 地点的隐形人 - 知乎 (zhihu.com)
- DHCP协议详解 - 知乎 (zhihu.com)
这两份文档内里关于DHCP交互流程,先容很充实,值得一看。
对于DHCPv6协议,整体上和DHCPv4类似,但是细节差别,下篇文档单独先容。
Once Day
也信尤物终作土,不堪幽梦太急忙......
假如这篇文章为您带来了帮助或启发,不妨点个赞 |