热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

动态主机配置协议DHCP(DynamicHostConfigurationProtocol)简介

定义动态主机配置协议DHCP(DynamicHostConfigurationProtocol)是一种用于集中对用户IP地址进行动态管理和配置的技术。

定义

动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种用于集中对用户IP地址进行动态管理和配置的技术。

目的

随着网络规模的扩大和网络复杂度的提高,网络配置变的越来越复杂,再加上计算机数量剧增且位置不固定(如移动便携机或无线网络),引发了IP地址变化频繁以及IP地址不足的问题。为了实现网络可以动态合理地分配IP地址给主机使用,需要用到动态主机配置协议DHCP。

DHCP协议是在BOOTP(Bootstrap Protocol)协议基础上发展而来,但BOOTP运行在相对静态(每台主机都有固定的网络连接)的环境中,管理员为每台主机配置专门的BOOTP参数文件,该文件会在相当长的时间内保持不变。而DHCP从两方面对BOOTP进行了扩展:

  • DHCP实现了IP地址及网络配置参数的自动分配的功能。
  • DHCP允许计算机快速、动态地获取IP地址,而不是静态为每台主机指定地址。

DHCP技术实现了IP地址的合理分配,提高了IP地址的使用率,避免了IP地址的浪费。

DHCP概述

DHCP采用客户端/服务器模式,DHCP客户端向DHCP服务器动态地请求网络配置信息,DHCP服务器根据策略返回相应的配置信息(IP地址、子网掩码、缺省网关等网络参数)。

DHCP基本架构

DHCP基本构架如图1所示。

图1 DHCP基本构架示意图:

DHCP基本协议架构中,主要包括以下三种角色:

  • DHCP Client:

    DHCP客户端,通过与DHCP服务器进行报文交互,获取IP地址和其他网络配置信息,完成自身的地址配置。在设备接口上配置DHCP Client功能,这样接口可以作为DHCP Client,使用DHCP协议从DHCP Server动态获得IP地址等参数,方便用户配置,也便于集中管理。

  • DHCP Relay:

    DHCP中继,负责转发来自客户端方向或服务器方向的DHCP报文,协助DHCP客户端和DHCP服务器完成地址配置功能。如果DHCP服务器和DHCP客户端不在同一个网段范围内,则需要通过DHCP中继来转发报文,这样可以避免在每个网段范围内都部署DHCP服务器,既节省了成本,又便于进行集中管理。

    在DHCP基本协议架构中,DHCP中继不是必须的角色。只有当DHCP客户端和DHCP服务器不在同一网段内,才需要DHCP中继进行报文的转发。

  • DHCP Server:

    DHCP服务器,负责处理来自客户端或中继的地址分配、地址续租、地址释放等请求,为客户端分配IP地址和其他网络配置信息。

目前,CE系列交换机仅支持作为DHCP Relay和DHCP Server。

DHCP报文介绍

DHCP报文格式

DHCP报文格式如图1所示。

图1 DHCP的报文格式:

图1中括号里的数字表示字段的长度,单位是字节。

表1 DHCP报文中各个字段的含义

字段

长度

含义

op(op code)

1字节

表示报文的类型,取值为1或2,含义如下:
  • 1:客户端请求报文

  • 2:服务器响应报文

htype(hardware type)

1字节

表示硬件地址的类型。对于以太网,该类型的值为“1”。

hlen (hardware length)

1字节

表示硬件地址的长度,单位是字节。对于以太网,该值为6。

hops

1字节

表示当前的DHCP报文经过的DHCP Relay的数目。该字段由客户端或服务器设置为0,每经过一个DHCP Relay时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP Relay数目。说明:

服务器和客户端之间的DHCP Relay数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃。

xid

4字节

表示DHCP客户端选取的随机数,使DHCP服务器的回复与DHCP客户端的报文相关联。

secs (seconds)

2字节

表示客户端从开始获取地址或地址续租更新后所用的时间,单位是秒。

flags

2字节

表示标志字段。只有标志字段的最高位才有意义,其余的15位均被置为0。最高位被解释为单播或者广播响应标志位,内容如下所示:
  • 0:客户端请求服务器以单播形式发送响应报文

  • 1:客户端请求服务器以广播形式发送响应报文

ciaddr (client ip address)

4字节

表示客户端的IP地址。可以是服务器分配给客户端的IP地址或者客户端已有的IP地址。客户端在初始化状态时没有IP地址,此字段为0.0.0.0。说明:

IP地址0.0.0.0仅在采用DHCP方式的系统启动时允许本主机利用它进行临时的通信,并且永远不是有效目的地址。

yiaddr (your client ip address)

4字节

表示服务器分配给客户端的IP地址。当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段。

siaddr (server ip address)

4字节

DHCP客户端获得启动配置信息的服务器的IP地址。

giaddr(gateway ip address)

4字节

表示第一个DHCP Relay的IP地址。当客户端发出DHCP请求时,如果服务器和客户端不在同一个网段,那么第一个DHCP Relay在将DHCP请求报文转发给DHCP服务器时,会把自己的IP地址填入此字段,DHCP服务器会根据此字段来判断出客户端所在的网段地址,从而选择合适的地址池,为客户端分配该网段的IP地址。

服务器还会根据此地址将响应报文发送给此DHCP Relay,再由DHCP Relay将此报文转发给客户端。说明:

若在到达DHCP服务器前经过了多个DHCP Relay,该字段作为客户端所在的网段的标记,填充了第一个DHCP Relay的IP地址后不会再变更,只是每经过一个DHCP Relay,Hops字段的数值会加1。

chaddr(client hardware address)

16字节

表示客户端的MAC地址,此字段与前面的“hardware type”和“hardware length”保持一致。当客户端发出DHCP请求时,将自己的硬件地址填入此字段。对于以太网,当“hardware type”和“hardware length”分别为“1”和“6”时,此字段必须填入6字节的以太网MAC地址。

sname(server host name)

64字节

表示客户端获取配置信息的服务器名字。此字段由DHCP服务器填写,是可选的。如果填写,必须是一个以0结尾的字符串。

file(file name)

128字节

表示客户端需要获取的启动配置文件名。此字段由DHCP服务器填写,随着DHCP地址分配的同时下发至客户端。本字段是可选的,如果填写,必须是一个以0结尾的字符串。

options

可变

表示DHCP的选项字段,最多为312字节。DHCP通过此字段包含了DHCP报文类型,服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。

对Options字段的详细解释请参见“DHCP Options字段选项”。

DHCP报文类型

目前DHCP定义了如下八种类型报文,DHCP服务器和客户端之间通过这八种类型的报文进行通信。

表2 DHCP报文类型说明
报文名称说明

DHCP DISCOVER

DHCP客户端首次登录网络时进行DHCP交互过程发送的第一个报文,用来寻找DHCP服务器。

DHCP OFFER

DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。

DHCP REQUEST

此报文用于以下三种用途。

  • 客户端初始化后,发送广播的DHCP REQUEST报文来回应服务器的DHCP OFFER报文。
  • 客户端重启后,发送广播的DHCP REQUEST报文来确认先前被分配的IP地址等配置信息。
  • 当客户端已经和某个IP地址绑定后,发送DHCP REQUEST单播或广播报文来更新IP地址的租约。

DHCP ACK

服务器对客户端的DHCP REQUEST报文的确认响应报文,客户端收到此报文后,才真正获得了IP地址和相关的配置信息。

DHCP NAK

服务器对客户端的DHCP REQUEST报文的拒绝响应报文,例如DHCP服务器收到DHCP-REQUEST报文后,没有找到相应的租约记录,则发送DHCP-NAK报文作为应答,告知DHCP客户端无法分配合适IP地址。

DHCP DECLINE

当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此报文来通知服务器,并且会重新向服务器申请地址。

DHCP RELEASE

客户端可通过发送此报文主动释放服务器分配给它的IP地址,当服务器收到此报文后,可将这个IP地址分配给其它的客户端。

DHCP INFORM

DHCP客户端获取IP地址后,如果需要向DHCP服务器获取更为详细的配置信息(网关地址、DNS服务器地址),则向DHCP服务器发送DHCP-INFORM请求报文。


DHCP Options字段选项

 

DHCP报文中的Options字段

DHCP报文中的Options字段可以用来存放普通协议中没有定义的控制信息和参数。如果用户在DHCP服务器端配置了Options字段,DHCP客户端在申请IP地址的时候,会通过服务器端回应的DHCP报文获得Options字段中的配置信息。Options字段的格式如图1所示。

图1 Options字段的格式:

Options字段由Type、Length和Value三部分组成。这三部分的表示含义如下所示:

表1 Options各字段的含义

字段

长度

含义

Type

1字节

标识号,该字段表示信息类型。

Length

1字节

该字段表示后面信息内容的长度。

Value

其长度为Length字段所指定

该字段表示信息内容。

DHCP Options选项的取值范围为1~255,如表2所示,介绍DHCP Options的部分知名选项。

表2 DHCP报文的Options字段说明

Options号

Options作用

1

设置子网掩码选项。

3

设置网关地址选项。

6

设置DNS服务器地址选项。

12

设置DHCP客户端的主机名选项。

15

设置域名后缀选项。

33

设置静态路由选项。该选项中包含一组有分类静态路由(即目的地址的掩码固定为自然掩码,不能划分子网),客户端收到该选项后,将在路由表中添加这些静态路由。如果存在Option121,则忽略该选项。

44

设置NetBios服务器选项。

46

设置NetBios节点类型选项。

50

设置请求IP选项。

51

设置IP地址租约时间选项。

52

设置Option附加选项。

53

设置DHCP消息类型。

54

设置服务器标识。

55

设置请求参数列表选项。客户端利用该选项指明需要从服务器获取哪些网络配置参数。该选项内容为客户端请求的参数对应的选项值。

58

设置续约T1时间,一般是租期时间的50%。

59

设置续约T2时间。一般是租期时间的87.5%。

60

设置厂商分类信息选项,用于标识DHCP客户端的类型和配置。

61

设置客户端标识选项。

66

设置TFTP服务器名选项,用来指定为客户端分配的TFTP服务器的域名。

67

设置启动文件名选项,用来指定为客户端分配的启动文件名。

77

设置用户类型标识。

121

设置无分类路由选项。该选项中包含一组无分类静态路由(即目的地址的掩码为任意值,可以通过掩码来划分子网),客户端收到该选项后,将在路由表中添加这些静态路由。

根据Options选项功能的不同,此字段的作用对象也不同。比如Option77用于DHCP客户端,用于识别用户所属的类型,根据Options字段中所携带的用户类型(User Class),DHCP服务器选择适当的地址池为客户端分配IP地址以及相关配置参数。Option77一般在客户端由用户进行配置,而不必在服务器端配置。

关于常用的DHCP Options Type的含义和用法,请参见相关RFC。

自定义DHCP选项

除了RFC中规定的字段选项外,还有部分选项内容没有统一规定,例如Option82。

Option82称为中继代理信息选项,该选项记录了DHCP客户端的位置信息。DHCP中继或DHCP Snooping设备接收到DHCP客户端发送给DHCP服务器的请求报文后,在该报文中添加Option82,并转发给DHCP服务器。

管理员可以从Option82中获得DHCP客户端的位置信息,以便定位DHCP客户端,实现对客户端的安全和计费等控制。支持Option82的服务器还可以根据该选项的信息制定IP地址和其他参数的分配策略,提供更加灵活的地址分配方案。

Option82最多可以包含255个子选项。若定义了Option82,则至少要定义一个子选项。

由于Option82的内容没有统一规定,不同厂商通常根据需要进行填充。目前设备提供了几种系统预定义的Option82格式,分别是Default、Common、extend,还支持自定义格式User-defined。

 


推荐阅读
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • Hyperledger Fabric 1.4 节点 SDK 快速入门指南
    本文将详细介绍如何利用 Hyperledger Fabric 1.4 的 Node.js SDK 开发应用程序。通过最新版本的 Fabric Node.js SDK,开发者可以更高效地构建和部署基于区块链的应用,实现数据的安全共享和交易处理。文章将涵盖环境配置、SDK 安装、示例代码以及常见问题的解决方法,帮助读者快速上手并掌握核心功能。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 考前准备方面,我的考试时间安排在上午11点至12点,只需提前20分钟到达考场的接待休息区即可。由于我居住在福田区,交通便利,可以选择多种方式前往考场。为了确保顺利通过考试,我建议考生提前熟悉考试流程和环境,并合理规划出行时间,以保持良好的心态和状态。此外,考前复习应注重理论与实践相结合,多做模拟题,加强对重点知识点的理解和掌握。 ... [详细]
  • 在计算机系统中,核心组件与架构是其稳定运行的基石。本文深入解析了R1路由器如何通过子网掩码与目的IP地址(如145.13.3.10)进行逐位逻辑“与”操作,以确定目标子网的网络地址。如果计算结果与路由表中的某一行的目的网络地址匹配,数据包将直接或间接地被传输至指定目的地。此外,文章还探讨了这一过程在现代网络通信中的重要性及其对数据传输效率的影响。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
author-avatar
宛如画中人需_308
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有