[协议]DHCP 协议原理与分析(一)

Chapter 01 :
DHCP(Dynamic Host Configuration Protocol)协议的作用在TCP/IP网络中向Internet主机提供配置信息。它以Bootstrap Protocol(BOOTP)协议为基础发展起来的,并增加了重新使用的网络地址的自动分配能力和附加配置选项(Configuration Options),同时DHCP保留了BOOTP的Relay代理功能。

Chapter 02: 协议简介

DHCP(Dynamic Host Configuration Protocol)协议是在Bootstrap Protocol (BOOTP)
基础上提出的,其作用是在TCP/IP网络中向Internet主机提供配置信息。
DHCP采用Client / Server模式,由客户端向服务器提出配置申请(包括分配的IP地址、
子网掩码、缺省网关等参数),服务器根据策略返回相应配置信息。
DHCP报文采用UDP作为传输层协议进行封装。

DHCP 2个部分:
1、 DHCP Relay功能,把DHCP Server指定的配置信息传输给Host;
2、 Server功能,分配网络地址和其他配置参数给主机。

DHCP 分配IP 方式:
1、 Automatic Allocation,为首次连接到网络的某些主机分配固定IP地址,该地址
将长期由该主机使用。
2、 Dynamic Allocation,DHCP Server为Host指定一个IP地址,同时为此地址规
定了一个租用期限,如果租用时间到期,Client必须重新申请地址,这是Client
申请地址最常用的方法;
3、 Manual Allocation,网络管理员为某些少数特定的Host指定固定IP地址。

DHCP指定地址的优先级分类:
1、 DHCP Server地址池中与Client的MAC地址静态绑定的IP地址。
2、 Client曾经使用过的地址。当Client端再次申请地址时,Client发送DHCP Discover
报文,其地址选项中会包含上次使用的IP地址,除非此IP地址被分配出去或此地址
进行了其他不可用操作(例如:此IP地址被Forbidden等),否则Client端将再次使
用此地址。
3、 “requested IP address”选项中Client自己指定的IP地址,如果这个地址是地址池里
的有效地址,而且没有被分配出去,那么将此地址分配给Client使用。
4、 顺序查找DHCP地址池中可供分配的IP地址,最先找到的可用IP地址,优先级高。

Chapter 03: DHCP 报文格式

image.png

报文每个字段的含义


image.png

“options”域是个可变长度域,DHCP Client必须能够接收包含有312bytes长度的
“options”域的DHCP报文,也就是说DHCP Client必须能够接受至少576bytes长度的IP报文。
DHCP Client可以通过“Maximum DHCP Message Size”Option来协商DHCP报文的最大
长度。

flag 格式:


image.png

B : 最左边的bit,Broadcast flag;
MBZ : 剩余的bits为保留位,留作将来使用

Chapter 04 : DHCP 报文构造与发送

DHCP 使用 UDP 协议的端口号
DHCP报文采用UDP作为传输层协议进行封装。Client到Server的DHCP报文发送到
DHCP Server的端口号是67,Server到Client的报文发送到DHCP Client的端口号是68

DHCP 的选项
DHCP报文中需要包含一系列的选项,即,选项列表(Options Lists)。选项列表是以
4个字节的魔术字开始,后面跟随一系列的选项,最后以“end”选项结束。

Client ID
DHCP定义了一个用来标识Client的选项,即,“Client Identifier”Option。Client必须
选择一个能够在自己所在的物理网络中唯一标识自己的值来填充Client ID选项的值,一旦该
值被初始化,在随后的报文交互中,该值不能改变。推荐使用Client的MAC地址作为Client ID
值。

Server ID
DHCP定义了一个用来标识Server的选项,即,“Server Identifier”Option。Server
选择自己的IP地址作为Server ID。如果一个DHCP Server有多个IP地址,它可以任意选择
一个作为Server ID,但是,推荐使用Client可达的IP地址。例如,当Server与Client位于同
一网段时,最好选择该网段的地址作为Server ID。如果Client向Server发送单播报文,目的地址就使用Server ID值。

Client 端发送报文的源 IP 地址
在Client端没有获取到IP地址之前,其发送报文的源IP(指IP首部中的源IP字段)必须
填0。

广播标志
Flags,第1bit用作广播标志,后面15bits保留,必须置0。
在软件没有对自己IP协议的IP地址进行有效配置时,Client可能无法处理收到的单播报
文,这时,Client在发送Discover和Request报文时,必须将广播标志位置1, Server或Relay
Agent收到这样的报文,必须回复广播报文给Client。
如果Client可以处理广播报文,它就将广播标志位置0,Server或Relay Agent收到这样
的Discover和Request报文,可以使用单播报文进行回复,其目的IP地址为Server分配给
Client的IP地址,即,报文中yiaddr (You IP Address)字段的值。当然,Server或Relay Agent
也可以以广播的方式回复。

Server 端对 ciaddr 和 giaddr 字段的处理
ciaddr,Client IP Address,只有Client是BOUND、RENEW、REBINDING状态,并且
能响应ARP requests时,才能被填充;
giaddr,Relay Agent IP Adress;
1、 如果Server收到的报文giaddr字段不为0(即,说明该报文是经过Relay Agent进行
转发的报文),那么它将以单播的方式进行回复,其目的地址为giaddr字段的值;
2、 如果Server收到的报文giaddr字段为0,ciaddr字段不为0(即,说明Client已经有效
配置了自己的IP地址),那么它将以单播的方式进行回复,其目的地址为ciaddr字
段的值;
3、 如果Server收到的报文giaddr字段为0,ciaddr字段为0,广播标志位不为0(即,说
明Client没有配置自己的IP地址,并且,此时无法处理单播报文),那么它将以广
播的方式进行回复;

4、 如果Server收到的报文giaddr字段为0,ciaddr字段为0,广播标志位为0(即,说明
Client虽然没有配置自己的IP地址,但是,此时可以处理单播报文),那么它将以
单播的方式进行回复(推荐以单播方式回复,当然,也可以以广播方式回复)。

Transaction ID
Xid(Transaction ID),由Client选择的一个随机数,用于Server和Client之间交互报文
的匹配。
Client必须采用相应的算法来保证其选取的xid值与其他Client选取的xid值尽量不同,
即,将相同的概率降到最低。

选项过载
在DHCP报文头中,sname和file字段都占用较多的字节,如果一个报文中的这两个字段
有一个或两个不含信息,空间就浪费了。为此,DHCP可以将选项内容扩充到sname和file字
段中。DHCP定义了一个Overload Option(过载选项),如果出现Overload Option,就告诉
接收者sname和file字段失去了原来的含义,而表示Option

报文类型
DHCP在Message Type Option中,定义了报文类型,
Message Type Option的格式如下:


image.png

Option Code:长度为1个字节,其值为53,表示Message Type Option;
Option Length:长度为1字节,其值为1,表示Option Value字段长度为1个字节;
Option Value:长度为1个字节,其值标识了DHCP的报文类型(Message Type)。
在RFC2131中定义了如下8种DHCP报文:

Type 描述
1 DHCPDISCOVER
2 DHCPOFFER
3 DHCPREQUEST
4 DHCPDECLINE
5 DHCPACK
6 DHCPNAK
7 DHCPRELEASE
8 DHCPINFORM

DHCP Server可以收到Client的报文为:DHCPDISCOVER、DHCPREQUEST、
DHCPDECLINE、DHCPRELEASE和DHCPINFORM;
DHCP Client可以收到Server的报文为:DHCPOFFER、DHCPACK和DHCPNAK。

DHCPDISCOVER
当Server收到来自Client的DHCPDISCOVER报文后,Server会为此Client选择一个网
络地址,如果没有可用地址,那么Server会向系统管理员报告;如果有可用地址,那么Server
会选择一个可用地址给Client,选择机制为:
1、 Server地址池中与Client的MAC地址静态绑定的IP地址;
2、 Client先前使用的已经过期或释放掉的地址,如果此地址在地址池里是可用地
址,并且没有被分配出去,那么将此地址分配给Client使用;
3、 “requested IP address”选项中Client自己指定的IP地址,如果这个地址是地址
池里的有效地址,而且没有被分配出去,那么将此地址分配给Client使用;
4、 地址池里的有效的未分配出去的新地址,根据一定的选择方法分配给Client使
用。
租期选择机制:
1、 如果Client在DHCPDISCOVER中请求了指定租期,这时不管Client是否已经被
指定了网络地址,Server都会指定为请求租期;
2、 如果Client没有请求指定租约期限,而Client已经被指定了网络地址,那么
Server将把先前此地址使用的租期指定给该地址;
3、 如果Client没有请求指定租约期限,而Client也没有被指定网络地址,那么
Server将指定本地默认租期。

DHCPREQUEST
DHCPREQUEST是Client响应来自Server的DHCPOFFER报文、检验先前分配的网络
地址或扩展已存在的租约的。如果DHCPREQUEST报文中包含“server identifier”选项,那
么这个报文是用来响应DHCPOFFER的,否则,这个报文是用来请求检验和扩展已存在的
租约的。
如果在DHCPREQUEST中Client使用了“client identifier”选项,那么在以后的所有后续
报文中都要使用相同的“client identifier”;如果在DHCPDISCOVER报文中包含需求参数列
表,那么在后续的报文中都要包含这个参数列表。
DHCPACK中的配置参数不应该和DHCPOFFER报文产生冲突,而Client使用的配置参
数就是DHCPACK报文中的配置参数。

DHCPDECLINE
如果Client发现Server建议使用的网络地址已被使用,那么Client将向Server发送

DHCPDECLINE报文,Server必须把这个网络地址标记为不可用,并且应该通报本地系统
管理员可能的配置问题。
Client检查Server分配的地址是否已经被使用的方法:Client收到Server的ACK报文,
在配置自己的IP地址和其他参数之前,发送免费ARP进行检查该IP地址是否在网络中被使
用。

DHCPRELEASE
如果Client不再需要使用它的指定地址,那么Client将向Server发送DHCPRELEASE报
文,当收到DHCPRELEASE后,Server会标记此网络地址不再被分配,但Server应该保留
Client的初始化参数记录,以备以后响应Client对此地址可能的重使用。

DHCPINFORM
当Client已经配置了自己的IP地址,但又要配置其他参数时,它将向Server发送
DHCPINFORM报文,请求其他参数配置。
当收到DHCPINFORM报文,Server直接对报文“ciaddr”域中给出的地址发送DHCPACK
报文。Server不必发送租期超出时间,也不应该填充“yiaddr”域。

DHCPOFFER
Server收到DHCPDISCOVER报文,使用DHCPOFFER报文进行回应。DHCPOFFER
报文应该包括“yiaddr”域的可用网络地址和其它DHCP options的配置参数。当分配新的地址
时,Server应该确认提供的网络地址没有被其他Client使用(Server可以通过发送指向被分
配地址的ICMP echo request来确认被分配地址没有被使用)。

DHCPACK&DHCPNAK
如果某个Server提供的配置参数是可以接受的,那么Client记录下Server的地址,并且
把此地址写入DHCPREQUEST的“server identifier”域,并以广播形式向外发送,如果收到
DHCPREQUEST报文里面的配置参数是有效的,Server会响应一个DHCPACK报文。一旦
DHCPACK被收到,Client将会被初始化并且进入BOUND状态。
如果DHCPREQUEST报文里面的配置参数是无效的,那么Server会响应一个
DHCPNAK报文。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271