文档库 最新最全的文档下载
当前位置:文档库 › DHCP协讲解

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

第1章第1章DHCP协议基础知识

1.1 1.1 DHCP协议概述

1.1.1 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:

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

送配置信息的协议;

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

的机制。

DHCP支持三种类型的地址分配:

●●自动分配方式中DHCP给主机指定一个永久的IP地址;

●●动态分配方式中DHCP给主机指定一个有时间限制的IP地址,到

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

●●手工分配方式中主机的IP地址是由网络管理员指定的,DHCP只是

把指定的IP地址告诉主机。

在这三种方式中,只有动态分配的方式可以对已经分配给主机但现在此主机

已经不用的IP地址重新加以利用。这样,在给一台临时连入网络的主机分配

地址或者在一组不需要永久的IP地址的主机中共享一组有限的IP地址时,动

态分配显得特别有用。当一台新主机要永久的接入一个网络时,而网络的IP

地址非常有限,为了将来这台主机被淘汰时能回收IP地址,这种情况下动态

分配也是一个很好的选择。

1.1.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章第2章协议的报文格式

2.1 2.1 DHCP协议的封装

DHCP 协议是基于UDP层之上的应用,DHCP CLIENT将采用知名端口号68,

DHCP SERVER采用知名端口号67。其报文内容的封装如图1所示:

图1 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.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所示:

015

B必须为0

图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地址。

“服务器的主机名”字段:记录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协商。

2.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章第3章DHCP协议的实现过程

3.1 3.1 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所

示。

3.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.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转发。

3.4 3.4 DHCP交互过程

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

图7 DHCP交互过程时序图

下面首先讲解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章第4章DHCP在具体组网中的应用实例4.1 4.1 DHCP在MA5200中的应用

4.1.1 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

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

用户上网过程如下:

1、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报文的帧格式和相关参数

相关文档