当前位置:首页 >> 信息与通信 >>

DHCP协议讲解


DHCP 协议讲解





第 1 章 DHCP 协议基础知识 .................................................................................................... 1-1
1.1 DHCP 协议概述 .

................................................................................................................. 1-1 1.1.1 IP 网络主机配置方法概述 ........................................................................................ 1-1 1.1.2 DHCP 协议主机配置的优缺点 ................................................................................. 1-2

第 2 章 协议的报文格式 ............................................................................................................ 2-1
2.1 DHCP 协议的封装 .............................................................................................................. 2-1 2.2 DHCP 协议的报文格式 ....................................................................................................... 2-2 2.3 DHCP 协议报文的种类 ....................................................................................................... 2-5

第 3 章 DHCP 协议的实现过程................................................................................................. 3-1
3.1 DHCP CLIENT 的行为 ....................................................................................................... 3-1 3.2 DHCP SERVER 的行为 ..................................................................................................... 3-2 3.3 DHCP RELAY 的行为 ........................................................................................................ 3-3 3.4 DHCP 交互过程 .................................................................................................................. 3-4

第 4 章 DHCP 在具体组网中的应用实例 .................................................................................. 4-1
4.1 DHCP 在 MA5200 中的应用 ............................................................................................... 4-1 4.1.1 组网说明及数据规划 ............................................................................................... 4-1 4.1.2 结合抓报所得数据分析 DHCP 协议实现原理 .......................................................... 4-2 4.2 宽带产品相关的数据配置 ................................................................................................... 4-9 4.2.1 ESR8850 中与 DHCP RELAY 相关的数据配置 ....................................................... 4-9 4.2.2 S3526 中与 DHCP RELAY 相关的数据配置 .......................................................... 4-10

第 5 章 DHCP 协议的发展方向................................................................................................. 5-1

关键词: BOOTP,DHCP,DHCP CLIENT,DHCP RELAY,DHCP SERVER 摘 要: DHCP 协议是目前应用比较广泛的一个协议,详细的了解该协议对于问题的 处理是有好处的。本文是对 IP 网络中的 DHCP 协议(动态主机配置协议) 一个比较全面的培训材料,详细的介绍了 DHCP 协议的框架结构,报文格式 和实现机理,并结合在具体产品(MA5200)中的实现进行讲解,适用于从 事宽带、数通的工程师作为学习性质的读物。 在文章的最后,我们介绍了目前黑客对 DHCP 进行攻击的常用手段及在 ESR8850 产品中相应的解决方法, 并对 DHCP 协议的发展进行了一些展望。 缩略语清单: BOOTP:Bootstrap Protocol 引导程序协议 动态主机配置协议

DHCP:Dynamic Host Configuration Protocol DHCP CLIENT:DHCP 客户端 DHCP RELAY:DHCP 中继 DHCP SERVER:DHCP 服务器 参考资料清单:

DHCP 协议相关 RFC:RFC 951,RFC1541,RFC1542 数据通信协议研究管理部: 《DHCP 协议培训教材》、 《DHCP 协议说明书》

1.
1.
1.

第1章

DHCP 协议基础知识

1.1

DHCP 协议概述
1.1.1 IP 网络主机配置方法概述

IP 网络是目前乃至将来可能最有前途的网络。正如同传统的电话网中要为每 个电话分配一个电话号码以唯一标识这个电话一样, IP 网络中, 在 每一台终 端要想与其他的终端进行通信,也需要为每一个接入终端分配一个唯一标识 号,这就是 IP 网络上的地址 -IP 地址。 IP 地址是 IP 网络上唯一标识一个接入终端最原始和最有效的标识符。 给终 端分配 IP 地址的方法有多种方式,如 PPP 协议的自协商方式,用户自己静 态配置,管理员统一分配、配置等方式,但这些配置 IP 地址的方式都有着一 些这样或那样的缺点。PPP 自协商方式虽然不用用户自己动手操作,但是需 要安装专门的客户端软件, 而且需要服务器处事先配置好用户的帐号和密码, 否则用户无法上网, 当然其优点是安全性高。 用户自己静态配置方式对于熟 悉 IP 网络的人来说是一件很简单的事情, 但对于普通用户来说, 可真是难以 理解,而且还须提防 IP 地址冲突的情况。管理员统一分配、配置的方式,需 要有专人维护,规划整个网络,不仅成本高,而且管理员工作量太大。 更重要的是许多终端启动时不仅需要 IP 地址, 而且还需要动态的获取更多的 启动配置信息,如无盘工作站,CABLE MODEM 就需要获得启动配置文件 名和 TFTP SERVER 的 IP 地址等信息,其他一些特殊终端还需要获取其他 一些特殊的信息,如 EPHONE 需要 CALL SERVER 的 IP 地址,IDT 需要 控制服务器的 IP 地址等。 这些动态信息是前面几种主机配置方式所无法完成 的。正是基于这些要求,新的主机配置方式应运而生,最早的主机配置方式 就是 BOOTP 协议(即引导程序协议),它是一种较老的系统引导协议,主 要用于无盘工作站启动时从服务器上获取 IP 地址和启动文件名,多与 TFTP 协议配合使用,后来为了功能的扩展,又发展了 DHCP 协议,但 DHCP 协 议兼容 BOOTP 协议。BOOTP 和 RARP 类似,是用于相对静态的环境,其 中每个主机都有一个永久的网络连接。管理人员创建一个 BOOTP 配置文件 来定义每个主机的 BOOTP 参数。在计算机经常移动和实际计算机数目超过 了可获得的 IP 主机地址时, 这种只提供从主机标识到主机参数的静态映射就 不适用了。 DHCP 从两个方式上扩充了 BOOTP: 1.
?

DHCP 可使计算机用一个消息获取它所需要的所有配置信息, 即传

送配置信息的协议;

2.

?

DHCP 允许计算机快速、动态的获取 IP 地址,即动态分配 IP 地址

的机制。 DHCP 支持三种类型的地址分配: 3. 4. 5.
? ?

自动分配方式中 DHCP 给主机指定一个永久的 IP 地址; 动态分配方式中 DHCP 给主机指定一个有时间限制的 IP 地址,到 手工分配方式中主机的 IP 地址是由网络管理员指定的,DHCP 只

时间或主机明确表示放弃这个地址时, 这个地址可以被其他的主机使用;
?

是把指定的 IP 地址告诉主机。 在这三种方式中,只有动态分配的方式可以对已经分配给主机但现在此主机 已经不用的 IP 地址重新加以利用。 这样, 在给一台临时连入网络的主机分配 地址或者在一组不需要永久的 IP 地址的主机中共享一组有限的 IP 地址时, 动态分配显得特别有用。当一台新主机要永久的接入一个网络时,而网络的 IP 地址非常有限,为了将来这台主机被淘汰时能回收 IP 地址,这种情况下 动态分配也是一个很好的选择。

2.

1.1.2

DHCP 协议主机配置的优缺点

1、DHCP 协议主机配置方式最重要的

特征就是整个配置过程自动实现,

而且所有配置信息在一个地方集中控制,这就是 DHCP SERVER 的作用。 2、很明显,DHCP 协议采用 CLIENT-SERVER 方式实现,而且 DHCP 协 议是基于 UDP 层之上的应用, DHCP CLIENT 将采用知名端口号 68, DHCP SERVER 采用知名端口号 67 进行交互。 3、最初的 BOOTP/DHCP 协议是在同一个物理子网中使用广播方式实现的, 无法穿越路由器扩展到不同的物理子网中, 也就是要使用 DHCP 协议的每一 个网络中必须配置一台 DHCP 服务器,为了克服这一缺陷,采用了 DHCP RELAY 的方式使得 BOOTP/DHCP 协议能够穿越路由器实现。 4、BOOTP 协议主要用于一些较简单的终端设备,如无盘工作站等,通过 BOOTP 获取的信息也就相对较少, 但它的 CLIENT-SERVER 间的交互过程 比 较 简 单 。 DHCP 协 议 功 能 较 全 面 , 可 以 获 取 的 信 息 也 较 多 , 但 CLIENT-SERVER 间的交互过程比较复杂。下面将会详细讲解。 5、DHCP 协议一般采用终端的硬件地址(如果是以太网,就是我们常说的 MAC 地址)来唯一标识一个终端设备。 6、 DHCP 协议通过设置 IP 地址使用租期, 可以达到 IP 地址的分时复用效果, 解决 IP 地址资源短缺的问题。 7、DHCP 协议基本上是一个单向驱动协议,SERVER 完全是被动的,其动 作、行为基本完全由 CLIENT 的请求行为而激发,即 SERVER 端无法主动

控制 CLIENT 端。因此其交互性和安全性就没有 PPP 协议那么完善,这是 DHCP 协议的致命缺点。

2.
1. 2.1

第2章

协议的报文格式

DHCP 协议的封装

DHCP 协议是基于 UDP 层之上的应用,DHCP CLIENT 将采用知名端口号 68,DHCP SERVER 采用知名端口号 67。其报文内容的封装如图 1 所示: 链路层头 IP 头
图1

UDP 头
DHCP 报文封装格式

DHCP 报文

其中: 链路层头:承载报文的链路层信息头,常见的有 Ethernet_II 格式、802.1Q 格式、 IEEE802.3 格式、令牌环链路层头格式等。 IP 头:标准的 IP 协议头,IPV4 中长度为 20bytes,包括了 SrcIp,DstIp 等 信息。 UDP 头:8bytes,包括了 SrcPort,DstPort,报文长度及 UDP 校验和等信 息。 DHCP 报文:具体的 DHCP 报文内容。 由于 DHCP 协议是初始化协议,更简单的说,就是让终端获取 IP 地址的协 议,既然终端连 IP 地址都没有,何以能够发出 IP 报文呢?SERVER 给 CLIENT 回送的报文该怎么封装呢?正是为了说明这个问题,上面才会介绍 DHCP 报文的封装格式。 为了解决这个问题,DHCP 报文的封装采取了如下措施: 1、首先链路层的封装必须是广播形式,即让在同一物理子网中的所有主机 都能够收到这个报文。在 Ethernet_II 格式的网络中,就是 DstMac 为全 1。 2、由于终端没有 IP 地址,IP 头中的 SrcIp 规定填为全 0。 3、当终端发出 DHCP 请求报文,它并不知道 DHCP SERVER 的 IP 地址, 因此 IP 头中的 DstIp 填为有限的子网广播 IP——全 1,以保证 DHCP SERVER 的 IP 协议栈不丢弃这个报文。 4、上面的措施保证了 DHCP SERVER 能够收到终端的请求报文,但仅凭链 路层和 IP 层信息,DHCP SERVER 无法区分出 DHCP 报文,因此终端发出 的 DHCP 请求报文的 UDP 层中的 SrcPort 为 68, DstPort 为 67。即 DHCP SERVER 通过知名端口号 67 来判断一个报文是否是 DHCP 报文

5、 DHCP

SERVER 给终端的响应报文将会根据 DHCP

报文中的内容决定是广播还是单播,一般都是广播形 式。广播封装时,链路层的封装必须是广播形式,在 Ethernet_II 格式的网
络中,就是 DstMac 为全 1,IP 头中的 DstIp 填为有限的子网广播 IP——全 1。单播封装时,链路层的封装是单播形式,在 Ethernet_II 格式的网络中, 就是 DstMac 为终端的网卡 MAC 地址 (此 MAC 地址存在于 DHCP 报文中) 。 IP 头中的 DstIp 填为有限的子网广播 IP——全 1 或者是即将分配给用户的 IP 地址(当终端能够接收这样的 IP 报文时)。两种封装方式中的 UDP 层都 是相同的,SrcPort 为 67,DstPort 为 68。终端通过知名端口号 68 来判断 一个报文是否是 DHCP SERVER 的响应报文。

2.

2.2

DHCP 协议的报文格式

DHCP 使用 BOOTP 的报文格式,但修改了一些字段的内容和含义。DHCP 报文格式如图 2 所示

图2

DHCP 协议的报文格式

下面详细介绍 DHCP 报文内容: “op”字段:表示当前报文是 client 的请求还是 server 的应答,为 1 时表示是 client 的请求,为 2 时表示是 server 的应答。 “htype”, “hlen”字段: 分别表示 client 的网络硬件地址类型、 长度, 如“htype” 为 1, 表示 client 的网络硬件是 10MB 的以太网类型, “hlen”为 6, 表示 client 的网络硬件地址长度是 6bytes(即以太网类型的 6bytes 的 MAC 地址)

“跳数”字段:表示当前的 DHCP 报文经过的 DHCP RELAY 的数目,类似于 IP 头中的跳数字段,但含义完全不同,client 或 server 发出 DHCP 报文时, 此字都初始化为 0,每经过一个 DHCP RELAY,此字段就会加 1,此字段的 作用是限制 DHCP 报文不要经过太多的 DHCP RELAY, 协议规定, 当“hops” 大于 4(现在也有规定为 16)时,这个 DHCP 报文就不能再进行处理,而是 丢弃。 “事务 ID"字段:client 每次发送 DHCP 请求报文时选择的随机数,用来匹配 server 的响应报文是对哪个请求报文的响应。client 会丢弃“xid”不匹配的响 应报文。 “秒数”字段:用来表示 client 开始 DHCP 请求后的时间流逝秒数,此字段一 般没有多大意义,最初设计此字段是为了让 DHCP SERVER 在繁忙时,优 先处理此字段大的 DHCP 请求(因为此字段越大说明这个 client 等的时间就 越长) “标志”字段:在 BOOTP 中此字段是保留不用的,在 DHCP 协议中也只使用 了其左边的最高位,其格式如图 3 所示:

图3

DHCP 报文中“flags”字段格式

整个字段占 16 比特,其中,最左边比特被解释为广播响应标识位,所有其 它比特保留备用,必须被 client 设置为 0,server 和 DHCP RELAY 忽略这 些比特。当 client 不能接收单播的 DHCP 响应报文时,必须把广播响应标识 位置 1,否则置 0。而 DHCP SERVER 在回响应报文时是广播还是单播,就 将根据此广播响应标识位是否置位来判断,目前的 client 如 WINDOWS 98 一般都能接收单播 DHCP 响应报文。 “客户机 IP 地址”字段: 表示 client 自己的 IP 地址。 可以是 server 分配给 client 的 IP 地址, 也可以是 client 已有的 IP 地址。 此字段不为 0 的原则就是 client 能够使用此 IP 地址接收 IP 报文。 DHCP SERVER 发现此字段不为 0 时, 可 以直接将响应报文单播给 client。 “你的 IP 地址”字段: 表示 server 分配给 client 的 IP 地址。 DHCP SERVER 当 响应 client 的 DHCP 请求时,将把分配给 client 的 IP 地址填入此字段。 “服务器 IP 地址”字段:表示 client 获取启动配置信息的服务器 IP 地址,一 般是 TFTP SERVER 的 IP 地址。 “中继代理 IP 地址”字段: 记录第一个 DHCP RELAY agent 的 IP 地址。 client 当 发出 DHCP 请求报文后,如果网络中存在 DHCP RELAY,则第一个 DHCP

RELAY 转发这个 DHCP 请求报文时,就会把自己的 IP 地址填入此字段(随 后的 DHCP RELAY 将不再改写此字段,只是把“hops”加 1)。DHCP 将会根据此字段为用户分配 IP 地址,并把响应报文转发给此 DHCP RELAY agent,由 DHCP RELAY agent 再转发给 client。 “客户机硬件地址”字段: 记录 client 的实际硬件地址内容。 client 发出 DHCP 当 请求报文时, 将把自己的网卡硬件地址填入此字段, DHCP SERVER 一般都 会使用此字段来唯一标识一个 client。而且此字段与前面的“htype”“hlen”字 段必须一致。如当“htype”“hlen”分别为 1 和 6 时,此字段必须填入 6bytes 的 以太网 MAC 地址。 0 “服务器的主机名”字段:记录 client 获取启动配置信息的服务器名字。此 字段由 DHCP SERVER 填写,而且是可选的,如果填写,必须是一个以 0 结尾的字符串。 “启动文件名”字段:记录 client 的启动配置文件名。 此字段由 DHCP SERVER 填写,而且是可选的,如果填写,必须是一个以 0 结尾的字符串。 “选项”字段:对于 BOOTP,又称之为“vendor”字段。 此字段中包含了大量 可选的终端初始配置信息和网络配置信息,如决定终端的 IP 特性配置信息, 域名信息,标识终端的特殊信息,终端的默认网关 IP 地址,DNS 服务器的 IP 地址,WINS 服务器的 IP 地址,用户使用 IP 地址的有效租期等等信息。 正是因为有了此字段,DHCP 协议才能够给 client 提供大量的配置信息,此 字段采用“CLV”方式构成,即 Code:标识号,唯一标识后面的信息内容,占 1bytes;length:长度,表示后面信息内容的长度,占 1bytes; value:信 息内容,其长度为 length 所指定,以 bytes 为单位。 选项字段是可选字段,它是变长的,其中对于我们最重要的一个选项是 "server identifier",它标识了 server 的 IP 地址,并把它带给 client。 如图 4 所示:
图 4 DHCP 报文的“option”字段编码方式

当需要新的信息时,可以按照这种编码方式申请新的选项即可,目前 DHCP 协议已经支持即成为标准的 option 已有近 80 项,具体内容可以参考 RFC1541。 由于选项不断扩展,可以从最新的 RFC 中得到最新的选项集合。其中最常 用的选项包括 Dhcp message type, router Ip, DNS Ip, Wins Ip, client id, server id 等选项。 Dhcp message type:code = 53, length = 1, value= 1----8,此字段表示 DHCP 报文类型;

router Ip:code = 3, length = IP 地址长度, value=client 的默认网关的 IP 地址; DNS Ip :code = 6, length = IP 地址长度的倍数, value= client 的 DNS 服务器的 IP 地址序列; Wins Ip : code = 44, length = IP 地址长度的倍数, value= client 的 WINS 服务器的 IP 地址序列; client id :code = 61, length = client 的网络硬件地址的长度+2, value=“htype”+“hlen”+ client 的网络硬件地址; server id :code = 54, length = IP 地址长度, value= DHCP SERVER 的 IP 地址; 对于 BOOTP 协议, 此字段为 64bytes, 对于 DHCP 协议, 此字段为 64---312 bytes,当 client 想要更长时,可以与 DHCP SERVER 协商。

3.

2.3

DHCP 协议报文的种类

DHCP 协议采用 CLIENT-SERVER 方式进行交互,其报文格式共有 8 种, 由“选项”字段中的“Dhcp message type ”选项的 value 值来确定,后面括 号中的值即为相应类型的值,具体含义如下: 1:DHCPDISCOVER(0x01),此为 client 开始 DHCP 过程的第一个报文 2:DHCPOFFER(0x02),此为 server 对 DHCPDISCOVER 报文的响应 3:DHCPREQUEST(0x03),此报文是 client 开始 DHCP 过程中对 server 的 DHCPOFFER 报文的回应,或者是 client 续延 IP 地址租期时发出的报文 4:DHCPDECLINE(0x04),当 client 发现 server 分配给它的 IP 地址无法 使用,如 IP 地址冲突时,将发出此报文,通知 server 禁止使用 IP 地址 5:DHCPACK(0x05),server 对 client 的 DHCPREQUEST 报文的确认 响应报文,Client 收到此报文后,才真正获得了 IP 地址和相关的配置信息。 6:DHCPNAK(0x06),server 对 client 的 DHCPREQUEST 报文的拒绝 响应报文,Client 收到此报文后,一般会重新开始新的 DHCP 过程。 7:DHCPRELEASE(0x07),client 主动释放 server 分配给它的 IP 地址的 报文,当 Server 收到此报文后,就可以回收这个 IP 地址,能够分配给其他 的 client。 8:DHCPINFORM(0x08),client 已经获得了 IP 地址,发送此报文,只是 为了从 DHCP SERVER 处获取其他的一些网络配置信息,如 route ip,DNS Ip 等,这种报文的应用非常少见。

既然 DHCP 兼容 BOOTP,那么如何从报文中区分是 DHCP 还是 BOOTP 呢?前面说过,BOOTP 协议比 DHCP 简单,而且 client,server 间的交互 过程也简单:一个来回,两个报文就完成了,而且也没有 IP 地址续延的问题 (因此采用 BOOTP 协议进行配置时, 就必须一个终端一个 IP 地址的事先配 置好,就没有 DHCP 协议那么灵活了)。BOOTP 没有 DHCP 那么多的报 文 类 型 , 因 此 当 发 现 在 一 个 DHCP 报 文 的 “ 选 项 ” 字 段 中 没 有 “Dhcp message type ”选项时, 那么这个报文就是 BOOTP 报文。 所以可见, DHCP 报文“选项”字段中的“Dhcp message type ”选项是个非常重要的参数。

3.
1. 3.1

第3章

DHCP 协议的实现过程

DHCP CLIENT 的行为

所有支持 DHCP 协议并能够发起 DHCP 过程的终端都称之为 DHCP CLIENT,包括普通 PC 机,各种特殊设备如 CABLEMODEM,IDT 等。 DHCP CLIENT 自己必须能够发出 DHCPDISCOVER.、DHCPREQUEST、 DHCPDECLINE 等报文 (DHCPINFORM 报文也是 DHCP CLIENT 发出, 但实际中很少见),并且必须能够处理从服务器收到的以下几种报文: DHCPOFFER、DHCPACK 和 DHCPNAK。 当 DHCP CLIENT 处于初始化状态,即还没有获取 IP 地址的状态时,DHCP CLIENT 将会发出一个广播的 DHCPDISCOVER 报文从而开始 DHCP 过程, 其间与 DHCP SERVER 的交互过程下面详述。DHCP CLIENT 自己应该具 备超时机制,当此次 DHCP 不成功时,再自动开始新的 DHCP 过程。而且 DHCP CLIENT 还要根据“xid”字段来检查收到的 DHCP 响应报文是否与自 己发出的请求报文相匹配。 一旦 DHCP CLIENT 获得一个具有有限使用期限的 IP 地址后,它将自动维 护一个定时器,在 IP 地址使用期限的 50%的时刻,自动启动

单播续延

IP 地址租期的过程,如若续延成功,则使用租期相应向前延长,否则,在 IP 地址使用期限的 87.5%的时刻,自动启动

广播续延 IP 地址租期的过程,

如若续延成功,则使用租期相应向前延长,否则在 IP 地址使用期限到期时, DHCP CLIENT 将不再使用此 IP 地址,而是开始新的 DHCP 过程再次申请 IP 地址。

图5

DHCP CLIENT 行为图

当 DHCP CLIENT 曾经获得过 IP 地址,然后重启初始化时,DHCP CLIENT 仍优先想使用以前的 IP 地址, 此时, DHCP CLIENT 会直接启动广播续延 IP 地址租期的过程,如若续延成功,则使用租期相应向前延长,否则开始新的 DHCP 过程再次申请 IP 地址。 DHCP CLIENT 的 DHCP 过程状态图如图 5 所示。

2.

3.2

DHCP SERVER 的行为

相对 DHCP CLIENT,DHCP SERVER 的行为比较简单,这只是仅从 DHCP 协议实现的角度来说的。因为在 DHCP SERVER 上必须提供给 DHCP CLIENT 分配 IP 地址和配置相关初始配置信息的功能, 也就是通常所说的地 址池管理功能,这又是个比较繁杂的工作,但是,这却不是 DHCP 协议本 身的工作。 除了上述的地址池管理功能外,DHCP Server 的行为完全由 DHCP 客户端 来驱动,因此其行为相对简单,只需根据收到的 DHCP CLIENT 的各种请求 报文,相应的响应不同的 DHCP 响应报文即可。 当 DHCP SERVER 收到 DHCPDISCOVER 报文后, 会从地址池中分配一个 空闲 IP,并获得 DHCP CLIENT 请求的参数,构造 DHCPOFFER 报文响应 DHCP CLIENT;当 DHCP SERVER 收到 DHCPREQUEST 报文时,就会 根据报文中记录的 DHCP CLIENT 的硬件地址查找其地址分配表, 如若找到, 则响应 DHCPACK 报文,DHCP CLIENT 成功获得 IP 地址和配置信息,否 则,响应 DHCPNAK 报文,DHCP CLIENT 会自动重新开始 DHCP 过程; 当 DHCP SERVER 收到 DHCPRELEASE 报文后,会解除这个 IP 地址与某 个 DHCP CLIENT 的绑定, 回收这个 IP 地址重新分配; DHCP SERVER 当

收到 DHCPDECLINE 报文后,会禁用报文中“客户机 IP 地址”字段 的 IP 地址,不再分配这个 IP 地址。
注意: DHCP SERVER 应该把收到的请求报文中的“xid”字段原封不动地拷 贝到响应报文的“xid”字段,否则 DHCP CLIENT 不会接受这个响应报文。 DHCP SERVER 是如何知道给 DHCP CLIENT 分配哪个网段的 IP 地址呢? DHCP SERVER 收到 DHCP 请求报文后,将会首先查看“中继代理 IP 地址” 字段是否为 0 ,如果不为 0,则就会根据此 IP 地址所在网段从相应地址池 中为 CLIENT 分配 IP 地址, 并且把响应报文直接单播给这个“中继代理 IP 地 址”指定的 IP 地址,就是 DHCP RELAY AGENT,而且 UDP 的目的端口号 填为 67,而不是 68,如果为 0,则 DHCP SERVER 认为 CLIENT 与自己在 同一子网中,将会根据自己的 IP 地址所在网段从相应地址池中为 CLIENT 分配 IP 地址。

3.

3.3

DHCP RELAY 的行为

由于 DHCP 报文都采用广播方式,是无法穿越多个子网的,当要想 DHCP 报文穿越多个子网时, 就要有 DHCP RELAY 的存在。 DHCP RELAY 可以是 路由器,也可以是一台主机,总之,在具有 DHCP RELAY 功能的设备中, 所有具有 UDP 目的端口号是 67 的局部传递的 UDP 信息,都被认为是要经 过特殊处理的,所以,DHCP RELAY 要监听 UDP 目的端口号为 67 的所有 报文。

当 DHCP RELAY 收到一个这样的报文时,会首先判断是否是用户的请求报 文,如果是用户的请求报文,它会先查看“跳数”字段的值,如果该值超过了 16, 这个报文会被丢弃, 目前一般“跳数”字段的缺省值被设置为 4, 即如果“跳 数”的值大于 4,就将用户的请求报文丢弃。 如果“跳数”字段的值在规定范围之内,并且 DHCP RELAY 决定传播该报文, 它必须检查“中继代理 IP 地址”字段的值,如果这个字段的值为 0,则 DHCP RELAY 就会将接受到请求报文的端口的 IP 地址填入此字段,如果该端口有 多个 IP 地址,DHCP RELAY 会挑选其中的一个并持续用它传播全部的 DHCP 报文;如果这个字段的值不是 0,则这个字段的值不能被修改,也不 能被填充为广播地址。在这两种情况下,报文都将被单播到新的目的地(或 DHCP SERVER),当然这个目的地(或 DHCP SERVER)是可以配置的, 以实现 DHCP 报文穿越多个子网的目的。 当 DHCP RELAY 发现这是 DHCP SERVER 的响应报文时, 它也应当检查“中 继代理 IP 地址”字段、“你的 IP 地址”字段和“客户机硬件地址”字段等,这些 字段给 DHCP RELAY 提供了足够的信息将响应报文传送给客户机。 “中继代理 IP 地址”字段的值(非 0)常常被用来标示一个用来传播响应报文 的逻辑端口,如果这个值不能匹配任何一个与 DHCP RELAY 直连的逻辑端 口,则这个响应报文将被丢弃。 同样 DHCP RELAY 也会检查“标志”字段中的广播标志位的值,如果为 1,将 广播封装好的报文,否则单播封装好报文后,传送给 DHCP CLIENT,标准 的 DHCP RELAY 的功能相对来说也比较简单,只是重新封装、续传 DHCP 报文。 下面的图 6 很好的标示出了对于不同的请求报文, 其相应的响应报文的方式。

图6

不同的请求报文多对应的响应报文方式

其中: B 表示广播的标志位。 X 表示并不关心相应的字段取什么值。 normal 表示从给定的 IP 地址进行正常的 IP 路由转发或用 ARP 转发。

4.

3.4

DHCP 交互过程
图7 DHCP 交互过程时序图

标准的 DHCP server 和 client 的交互过程如图 7 所示:

下面首先讲解 DHCP SERVER 与 CLIENT 的标准交互过程: 1、 CLIENT 首先发出广播的 DHCPDISCOVER 报文, 广播的目的是让 DHCP SERVER 能够收到这个请求报文。在这个报文中,CLIENT 可以在“选项”字

段中加入“request paramter list”选项,表明自己想要获得的各种参数,而且 四个 IP 地址字段都必须为 0。 2、由于 DHCPDISCOVER 报文是广播,那么所有的 DHCP SERVER 都能 够收到, 所有的 DHCP SERVER 都会响应一个 DHCPOFFER 报文, 其中“你 的 IP 地址”字段就是 DHCP SERVER 能够提供给 CLIENT 使用的 IP 地址, 而且 DHCP SERVER 会把自己的 IP 地址放在“选项”字段中以便 CLIENT 区 分不同的 DHCP SERVER,发出此报文后,在 DHCP SERVER 上就会存在 一个已分配 IP 地址的记录。 3、 CLIENT 能够收到所有的 DHCPOFFER 报文, CLIEN 只能处理其中的 但 一个,一般的原则是 CLIENT 接收、处理最先收到的那个 DHCPOFFER 报 文。CLIENT 会再发出一个广播的 DHCPREQUEST 报文,在“选项”字段中 会加入选中的 DHCP SERVER 的 IP 地址和用户想要的 IP 地址,之所以广 播是因为要通知所有的 DHCP SERVER 进行相应的处理。 4、 DHCP SERVER 收到 DHCPREQUEST 报文, 判断“选项”字段中的 DHCP SERVER 的 IP 地址是否与自己的地址相同,不相同,则不做任何处理,如 果自己发出过 DHCPOFFER 报文,则清除相应 IP 地址记录;当“选项”字段 中的 DHCP SERVER 的 IP 地址是与自己的 IP 地址相同时, DHCP SERVER 就会响应一个 DHCPACK 报文,其内容同 DHCPOFFER 类似,并在“选项” 字段中增加了 IP 地址使用租期选项。 5、CLIENT 收到 DHCPACK 报文后(经过上面的处理后,有且只有一个 DHCPACK 报文),会检查 DHCP SERVER 分配给自己的 IP 地址是否能够 使用,如在以太网类型的网络中,CLIENT 会发出免费的 ARP 请求来确定 DHCP SERVER 分配的 IP 地址是否已经被别人使用,如果可以使用,则 CLIENT 成功获得 IP 地址,并根据 IP 地址使用租期自动启动续延过程。 6、如果 CLIENT 发现 DHCP SERVER 分配的 IP 地址已经被别人使用,则 CLIENT 会发出 DHCPDECLINE 报文通知 DHCP SERVER 禁用这个 IP 地 址以免引起 IP 地址冲突。然后 CLIENT 又开始新的 DHCP 过程,从第 1 步 开始。 7、 CLIENT 成功获取 IP 地址后, 当 会根据 IP 地址使用租期自动启动续延过 程 , 在 使 用 租 期 过 去 50 % 时 刻 处 , 向 DHCP SERVER 发 送 单 播 DHCPREQUEST 报文续延租期,如果成功即收到 DHCP SERVER 的 DHCPACK 报文,则租期相应向前延长,如果失败即没有收到 DHCPACK 报文,则 CLIENT 继续使用这个 IP 地址。在使用租期过去 87.5%时刻处, 向 DHCP SERVER 发送广播 DHCPREQUEST 报文续延租期,如果成功即 收到 DHCP SERVER 的 DHCPACK 报文,则租期相应向前延长;如果失败 即没有收到 DHCPACK 报文,则 CLIENT 继续使用这个 IP 地址。在使用租

期到期时,CLIENT 应自动放弃使用这个 IP 地址,并开始新的 DHCP 过程, 从第 1 步开始。 8、CLIENT 在成功获取 IP 地址后,随时可以通过发送 DHCPRELEASE 报 文释放自己的 IP 地址,DHCP SERVER 收到 DHCPRELEASE 报文后,会 回收相应的 IP 地址重新分配。 当存在 DHCP RELAY 时, 所有的 DHCP 报文都会经过 DHCP RELAY 进行 转发,整个 DHCP 交互过程同上面类型,只是在报文封装时,稍有不同。 由上面的叙述可以看出,DHCP SERVER 的行为完全由 CLIENT 来驱动, DHCP SERVER 无法控制 CLIENT 的行为。因此 DHCP 协议的安全性比较 差。

4.
1.
1.

第4章
4.1

DHCP 在具体组网中的应用实例

DHCP 在 MA5200 中的应用
4.1.1 组网说明及数据规划

DHCP 的实际应用,下面结合 DHCP 在 MA5200 上的应用来进行说明。 在 MA5200 的动态 VLAN 接入业务中,用户的 IP 地址都是通过 DHCP 方式 分配,并且用户上网的起点就是进行 DHCP 过程。为了能够对用户进行合法 性检查和标识用户,MA5200 使用 VLANID 来标识用户,MA5200 接入板支 持 802.1Q 协议,并采用基于端口的 VLAN 划分方式来标识用户。用户通过 支持 802.1Q 协议的二层交换机接入 MA5200,二层交换机的每一个接入物 理端口都会打上一个缺省的 VLANID, PVID, 即 同一个接入物理端口下的所 有用户上网时发出的报文都会被二层交换机打上相同的 VLANID,MA5200 就通过 VLANID 来控制用户的合法性。组网图如下:

图8

MA5200 VLAN 业务组网图

由于 VLANID 是完全可信的, 因此只要在 MA5200 上限制每个 VLANID 下能 够接入的用户数目,就完全可以控制用户的数目,不至于出现用户大量发送 非法 DHCP 报文造成 DHCP SERVER 地址池中地址耗尽的情况。对于用户 仿冒 IP 地址和 MAC 地址的情况,采用了 IP-VLAN-MAC 三者绑定的方式来 唯一标识一个用户,从而解决这个问题。 MA5200 上实现了内置或外接 DHCP Server 功能,将虚模板作为 DHCP Relay 的接口地址,由于有内置 DHCP Server,所以我们一般采用内置的 Server,内置 DHCP Server 的地址可以设置成自环地址 127.0.0.1 或任意的 接口地址。 MA5200 的数据规划: DHCP Server:(Virtual-template 1)172.16.0.1/24 IP Local Pool:172.16.0.2~172.16.0.100 DNS: Primary-IP:210.52.149.2 Second-IP:210.52.207.2

2.

4.1.2

结合抓报所得数据分析 DHCP 协议实现原理

用户上网过程如下:

1、 用户开机后,发出 DHCPDISCOVER 报文;

图9

用户开机发出 DHCPDiscover 广播报文

客户机在开始启动的时候没有地址 (假定用户上网的方式采用 DHCP 协议动 态获得地址),它就会发出一个 DHCPDiscover 报文,该报文是广播报文, 所有的具有 DHCP Server 功能的服务器都会收到该报文。在图 9 中我们可 以看到该报文在链路层中发的确实是广播报文,在图 10 中我们要注意 Transaction ID=2585989945 和 DHCP Message Type 一项中 type= Discover,前一项表示会话 ID,即 DHCP Server 发回的响应报文中该结构 的数值要与发出去的 DHCP Discover 中的该结构数值一样,后一项说明 DHCP 报文类型为 Discover 类型报文。

图 10

客户机发出 DHCPDiscover 报文的帧结构

2、MA5200 收到此报文后,根据 VLANID,用户的 MAC 地址来判断用户是 否合法,若不合法,拒绝此用户的请求,否则 5200 记录用户信息,续传报 文给内置的 DHCP SERVER; 3、内置的 DHCP SERVER 回送 DHCPOFFER 报文,5200 续传给用户; 从 DHCP Server 回应的 DHCPOffer 报文中我们要注意以下几项:OP Code=2 , 表 示 这 是 DHCP 报 文 中 的 回 应 报 文 ; Transaction ID = 2585989945, 表示这个报文是与图 9 中的 DHCPDiscover 报文相关的报文, 因为二者标示一致;Client IP Address=0.0.0.0,表示客户机还没有使用该地 址;Your IP Address=172.16.0.2 表示 DHCP Server 分配给该客户机的 IP 地址; DHCP Message Type 一项中 type=Offer 表示这是一个 DHCPOffer 报文,是对 DHCPDiscover 的回应报文;Subnet mask=255.255.255.0 表示 这 个 地 址 的 网 段 是 一 个 标 准 的 C 类 地 址 网 段 ; Domain Name Server=210.52.149.2 和 210.52.207.2 表示该用户可以使用这两个域名服务 器;最主要的是 DHCP Server ID 一项:它标示了客户机下一次发出 DHCPRequest 报文时,哪个 DHCP Server 会发出回应!详细的请参见图 11。

图 11

DHCP Server 回应的 DHCPOffer 报文的帧格式

4、用户发出 DHCPREQUEST 报文,5200 续传给内置的 DHCP Server,我 们主要注意 DHCP Message Type 一项中 type=Request 表示这是一个请求 报文,见图 12;

图 12 DHCP Request 报文的帧格式和相关参数

5 、 内 置 的 DHCP SERVER 回 送 DHCPACK 报 文 , 5200 把 用 户 的 IP-VLAN-MAC 信息绑定通知业务板用户上线成功,并续传报文给用户,用 户获得 IP 地址,我们主要注意 DHCP Message Type 一项中 type=Ack 表 示这是一个对 DHCP Requset 报文响应的应答报文, 并且再一次强调了地址 租期,见图 13。
图 13 DHCP Server 回应的 DHCP Ack 报文的帧格式和相关

6、 用户下网或 IP 地址的租约到期, 客户机会发出一个 DHCP Release 报文, 我们主要注意 DHCP Message Type 一项中 type=Release 表示这是一个释 放 IP 地的报文,它所对应的代码值为 0x07,见图 14。
图 14 客户机释放 IP 地址时的 DHCP Release 报文

2.
1.

4.2

宽带产品相关的数据配置
4.2.1 ESR8850 中与 DHCP RELAY 相关的数据配置

ESR8850 地址分配也分为内部分配和外挂 DHCP SERVER 分配两种方式, 内部分配是 PPP 方式协商获得,外部分配是采用 DHCP 的方式,在此介绍 外置方式,内置部分请参看开局指导书。 从 标题可以看出,ESR8850 实现的是 DHCP RELAY 的功能,所以它的配 置比较简单,只要在相应的接口下配置 DHCP SERVER 的地址即可。 1、配置 DHCP RELAY (1)进入接口配置模式 接口可以为 FE、GE 或 VE,假设使用的 VE2/0/0 接口,则执行命令为: ISN8850(config)#interface virtual-ethernet 2/0/0 (2)配置接口的 DHCP 服务器 假设 DHCP SERVER 的 IP 地址为 210.52.0.117 ISN8850(config-virtual-e2/0/0)#ip helper-address 210.52.0.117

2.

4.2.2

S3526 中与 DHCP RELAY 相关的数据配置

S3526 系列交换机实现的也是 DHCP RELAY 的功能,它可支持配置 20 个 DHCP 服务器组,每个服务器组可以配置 2 个 IP 地址,分别是主服务器 地址和备份服务器地址,DHCP 服务器组的设置可以让不同的用户群到不同 的 DHCP 服务器组申请 IP 地址,即可以让某些 VLAN 到一个服务器组申 请 IP,另外一些 VLAN 到另一个服务器组申请 IP 地址,这样做可以满足 不同的需求,可以为某些特殊用户提供单独的 DHCP 服务,另外也可以使 DHCP 服务器遭恶意攻击引起的影响降到最小范围。

1、配置 DHCP RELAY (1)配置 DHCP 服务器组对应的 DHCP Server 的 IP 地址 假 设 DHCP 服 务 器 组 为 1 , 对 应 的 主 备 DHCP SERVER 的 地 址 为 210.52.100.2 和 210.52.100.4,则执行命令为: Quidway(config)# dhcp-server 1 ip 210.52.100.2 210.52.100.4 (2)配置 VLAN 接口对应的 DHCP Server 组 假设相应的 VLAN 接口为 2, 所对应的 DHCP 服务器组为 1, 则执行命令为: Quidway(config-vlan2)# dhcp-server 1

5.

第5章

DHCP 协议的发展方向

DHCP 协议虽然可以实现为客户机动态分配地址,但它的安全性有致命 的弱点,表现在以下几个方面: 1、由于 DHCP SERVER 无法控制 CLIENT 行为,无法识别 CLIENT 的 真假。因此 DHCP SERVER 的安全性较差,很容易遭到非法用户的恶意 攻击,如用户大量发送非法 DHCP 报文时,造成 DHCP SERVER 地址 池中地址的耗尽。 2、无法发现非法用户仿冒其他用户的 IP 地址,MAC 地址的情况。 基于上面安全性的问题,目前黑客采用的攻击方法主要有以下几个几种: (1)重复执行 ipconfig -release_all。 【解决方法】:在实际情况中,重复执行 ipconfig -release all,实际上只 发出了 DHCP Request 报文,并没有申请新的 IP 地址, DHCP 服务器回 一个 DHCP Ack 报文,允许用户继续使用该 IP 地址,攻击失败。 (2)先执行一次正常的 DHCP 过程,用 NetXRay 把报文截取下来,再 修改 MAC 地址,把报文按顺序发出去,但没有发 ARP 广播报文,结果 导致 DHCP server 被骗去一个 IP 地址,黑客工具 Azrael 就是利用这个 原理骗取 IP 地址。 【解决方法】: 在正常情况下,用户申请到动态 IP 地址后,都要发一个 ARP 广播,目的 IP 地址是分配给它的 IP,想看看是否有 IP 地址冲突。 可以利用这一点检查用户动态申请 IP 地址后是否发 ARP 广播,如果不 发就认为是假的用户,就通知 DHCP 服务器把该 IP 地址释放。 (3)黑客在方法 2 的基础上再加一条 ARP 广播,就可以骗过 DHCP Relay,申请到的 IP 地址不会被释放,结果大量模拟发送这种报文就可 以把 DHCP 地址池耗尽。 星天平台的 Vlan Dial 可以实现这种原理的攻 击。 【解决方法】:由于现在的网络主要是 ATM 网和 IP 网,而 IP 网络中最 盛行的是以太网,在以太网中为了抑制广播,采用了 VLAN 的技术。由 此 我 们 可以 想 到要 从 根本 上 防止 DHCP 攻 击,可 以 采 用限 制 单个 PVC/VLAN 上的用户数的方法。经过限制 PVC/VLAN 上的接入用户数, 黑客工具再厉害也不能获得很多 IP 地址。 从上面的攻击中可以看出,在实际应用中,仅仅按照 DHCP 的标准协议 内容来实现 DHCP 功能是远远不够的,除非在一个完全可以信任的网络 中如企业内部网。在实际应用中除了实现 DHCP 的标准功能外,还必须 考虑对于用户的控制,虽然这超出了 DHCP 协议本身的内容,但没有这 些控制功能,连网络的安全性都无法保证,DHCP 也就失去了意义。

为了克服其缺点,DHCP 协议也在不断的发展和完善。现在已经有了 DHCP+协议的提法。简单的说,DHCP+协议就是在现在的 DHCP 协议 基础上增加了用户认证功能以克服其缺陷,既然要认证,那么用什么信 息来标识用户呢? 至于怎么实现目前还没有统一的说法。各个公司都有 着自己的方法:如有 DHCP+WEB 认证的方式,两次 DHCP 的方式等, 其实不难看出,MA5200 的 DHCP 实现方式也是一种 DHCP+模式,只 是用户的控制和认证是在 DHCP RELAY 处,即 MA5200 内部做了捆绑 完成的,而且是以 VLANID 来标识用户的。 就目前来说, 感觉最现实, 改动最少的方法还是在 DHCP RELAY 处进行 用户认证,因为如果要在 DHCP SERVR 处实现用户认证,则就必须改 动现存的 DHCP SERVER 软件,而目前 DHCP SERVER 软件都是集成 在操作系统中的,如 NT,UNIX,这意味着要改动操作系统,肯定不是 短时间能够支持的。而 DHCP RELAY 是新增的附加软件,改动容易,在 DHCP RELAY 处实现用户认证后,DHCP SERVER 完全不用改动。


相关文章:
协议讲解
网络七层协议讲解 3页 2下载券 H323协议讲解 26页 1下载券 ISIS协议讲解 80页 1下载券 DHCP协议讲解 25页 1下载券协​议​讲​解 ...
DHCP协议详解6
网络工程师考试复习资料——DHCP 协议详解 DHCP 协议详解在常见的小型网络中(例如家庭网络和学生宿舍网),网络管理员都是采用手工 分配 IP 地址的方法,而到了中、...
DHCP使用详解
Dynamic Host Configuration Protocol DHCP基本知识点 基本知识点 1 、DHCP协议在 协议在RFC2131中定义,使用 中定义, 协议进行数据报传递, 协议在 中定义 使用udp...
DHCP协议讲解
DHCP 从两个方式上扩充了 BOOTP:第一,DHCP 可使计算机用一个消息获 取它所需要的所有配置信息,即传送配置信息的协议;第二,DHCP 允许计 1 DHCP 协议讲解 第 ...
DHCP协议与抓包分析
DHCP协议与抓包分析_IT/计算机_专业资料。1. DHCP 协议简介:DHCP,全称是 ...DHCP协议与抓包分析 5页 免费 DHCP协议详解 25页 1下载券 DHCP协议原理 49...
DHCP协议的工作过程
DHCP 协议的工作过程 首先,DHCP 客户端发送 DHCPDISCOVER 消息(IP 地址租用申请) ,这个消息是通过广播方式发送 出去的,所有网络中的 DHCP 服务器都将接收到这个...
DS-Lite协议讲解及报文分析
DS-Lite协议讲解及报文分析_互联网_IT/计算机_专业资料。DS-Lite协议详解以及对...家庭网关在 DS-Lite 业务模型中会通过 DHCPv6 Option64 字段获取到 AFTR 服务...
DHCP协议介绍
DHCP 协议介绍一、DHCP 概述:动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域 网的网络协议,使用 UDP 协议工作,主要有两个用途:给内部网络...
DHCP协议的8种消息类型及功能
DHCP 协议的 8 种消息类型及功能 1) 主机发送 DHCP Discover 广播包在网络上寻找 DHCP 服务器; 2) DHCP 服务器向中继代理发送 DHCP Offer 单播数据包,中继...
DHCP协议原理分析
实验四 DHCP 协议原理分析 曹成 一、 DHCP 协议简介 DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议, 它的前身是 BOOTP,它工作在 ...
更多相关标签:
dhcp协议 | dhcp协议分析 | dhcp | dhcp协议报文详解 | dhcp详解 | dhcp协议交互过程 | dhcp协议报文 | dhcp协议过程 |