动态主机设置协议(英语:Dynamic Host Configuration Protocol,缩写:DHCP),又称动态主机组态协定,是一个用于IP网络的网络协议,位于OSI模型应用层,使用UDP协议工作,主要有两个用途:

  • 用于内部网或网络服务供应商自动分配IP地址给用户
  • 用于内部网管理员对所有电脑作中央管理

适用性

DHCP用一台或一组DHCP伺服器来管理网络参数的分配,这种方案具有容错性。即使在一个仅拥有少量机器的网络中,DHCP仍然是有用的,因为一台机器可以几乎不造成任何影响地被增加到本地网络中。

甚至对于那些很少改变地址的伺服器来说,DHCP仍然被建议用来设置它们的地址。如果伺服器需要被重新分配地址(RFC 2071)的时候,就尽可能不去做更改。对于一些装置,如路由器防火墙,则不应使用DHCP。

DHCP也可用于直接为伺服器和桌面电脑分配地址,并且透过一个PPP代理,也可为拨接及宽频的主机,以及住宅NAT网关和路由器分配地址。DHCP一般不适用于使用在无边际路由器和DNS伺服器上。

历史

DHCP于1993年10月成为标准协议,其前身是BOOTP协议。当前的DHCP定义可以在 RFC 2131 中找到,而基于IPv6的DHCPv6可以在 RFC 3315 中找到。

原理

动态主机设置协议(DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议。在IP网络中,每个连接Internet的装置都需要分配唯一的IP地址。DHCP使网络管理员能从中心结点监控和分配IP地址。当某台电脑移到网络中的其它位置时,能自动收到新的IP地址。

DHCP使用了租约的概念,或称为电脑IP地址的有效期。租用时间是不定的,主要取决于用户在某地连接Internet需要多久,这对于教育行业和其它用户频繁改变的环境是很实用的。透过较短的租期,DHCP能够在一个电脑比可用IP地址多的环境中动态地重新配置网络。DHCP支持为电脑分配静态地址,如需要永久性IP地址的Web伺服器。

DHCP和另一个网络IP管理协议BOOTP类似。目前两种配置管理协议都得到了普遍使用,其中DHCP更为先进。某些操作系统,如Windows Server,带有DHCP伺服器。

协议结构

More information 8 bits, 16 bits ...
协议结构
8 bits 16 bits 24 bits 32 bits
Op Htype Hlen Hops
Xid
Secs Flags
Ciaddr
Yiaddr
Siaddr
Giaddr
Chaddr (16 bytes)
Sname (64 bytes)
File (128 bytes)
Option (variable)
Close
  • Op:消息操作代码,既可以是引导请求(BOOTREQUEST)也可以是引导答复(BOOTREPLY)
  • Htype:硬件地址类型
  • Hlen:硬件地址长度
  • Xid:处理ID
  • Secs:从获取到IP地址或者续约过程开始到现在所消耗的时间
  • Flags:标记
  • Ciaddr:客户机IP地址
  • Yiaddr:“你的”(客户机)IP地址
  • Siaddr:在bootstrap中使用的下一台伺服器的IP地址
  • Giaddr:用于导入的接替代理IP地址
  • Chaddr:客户机硬件
  • Sname:任意伺服器主机名称,空终止符
  • File:DHCP发现协议中的引导文件名、空终止符、属名或者空,DHCP供应协议中的受限目录路径名
  • Options:可选参数字段。参考定义选择列表中的选择文件

技术细节

Thumb
Schema of a typical DHCP session

DHCP统一使用两个IANA分配的端口作为BOOTP伺服器端使用67/udp,客户端使用68/udp。

DHCP运行分为四个基本过程,分别为请求IP租约、提供IP租约、选择IP租约和确认IP租约。

客户在获得了一个IP地址以后,就可以发送一个ARP请求来避免由于DHCP伺服器地址池重叠而引发的IP冲突。

More information OP, HTYPE ...
DHCPDISCOVER
UDP Src=0.0.0.0
sPort=68
Dest=255.255.255.255
dPort=67
OP HTYPE HLEN HOPS
0x01 0x01 0x06 0x00
XID
0x3903F326
SECS FLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0x00000000
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Discover
DHCP option 50: 192.168.1.100 requested
DHCPOFFER
UDP Src=192.168.1.1
sPort=67
Dest=255.255.255.255
dPort=68
OP HTYPE HLEN HOPS
0x02 0x01 0x06 0x00
XID
0x3903F326
SECS FLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0xC0A80164
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Offer
DHCP option 1: 255.255.255.0 subnet mask
DHCP option 3: 192.168.1.1 router
DHCP option 51: 1 day IP lease time
DHCP option 54: 192.168.1.1 DHCP server


DHCPREQUEST
UDP Src=0.0.0.0
sPort=68
Dest=255.255.255.255
dPort=67
OP HTYPE HLEN HOPS
0x01 0x01 0x06 0x00
XID
0x3903F326
SECS FLAGS
0x0000 0x0000
CIADDR
0x00000000
YIADDR
0x00000000
SIADDR
0x00000000
GIADDR
0x00000000
CHADDR
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP Request
DHCP option 50: 192.168.1.100 requested
DHCP option 54: 192.168.1.1 DHCP server.
DHCPACK
UDP Src=192.168.1.1
sPort=67
Dest=192.168.1.100
dPort=68
OP HTYPE HLEN HOPS
0x02 0x01 0x06 0x00
XID
0x3903F326
SECS FLAGS
0x0000 0x0000
CIADDR (Client IP Address)
0x00000000
YIADDR (Your IP Address)
0xC0A80164
SIADDR (Server IP Address)
0x00000000
GIADDR (Gateway IP Address switched by relay)
0x00000000
CHADDR (Client Hardware Address)
0x00053C04
0x8D590000
0x00000000
0x00000000
192 octets of 0's. BOOTP legacy
Magic Cookie
0x63825363
DHCP Options
DHCP option 53: DHCP ACK
DHCP option 1: 255.255.255.0 subnet mask
DHCP option 3: 192.168.1.1 router
DHCP option 51: 1 day IP lease time
DHCP option 54: 192.168.1.1 DHCP server
Close

DHCP发现(DISCOVER)

client在物理子网上发送广播来寻找可用的伺服器。网络管理员可以配置一个本地路由来转发DHCP包给另一个子网上的DHCP伺服器。该client实现生成一个目的地址为255.255.255.255或者一个子网广播地址的UDP包。

客户也可以申请它使用的最后一个IP地址(在下面的例子里为192.168.1.100)。如果该客户所在的网络中此IP仍然可用,伺服器就可以准许该申请。否则,就要看该伺服器是授权的还是非授权的。授权伺服器会拒绝请求,使得客户立刻申请一个新的IP。非授权伺服器仅仅忽略掉请求,导致一个客户端请求的超时,于是客户端就会放弃此请求而去申请一个新的IP地址。

DHCP提供(OFFER)

当DHCP伺服器收到一个来自客户的IP租约请求时,它会提供一个IP租约。DHCP为客户保留一个IP地址,然后通过网络单播一个DHCPOFFER消息给客户。该消息包含客户的MAC地址、伺服器提供的IP地址、子网掩码、租期以及提供IP的DHCP伺服器的IP。

伺服器基于在CHADDR字段指定的客户硬件地址来检查配置。这里的伺服器,192.168.1.1,将IP地址指定于YIADDR字段。

DHCP请求(REQUEST)

当客户PC收到一个IP租约提供时,它必须告诉所有其他的DHCP伺服器它已经接受了一个租约提供。因此,该客户会发送一个DHCPREQUEST消息,其中包含提供租约的伺服器的IP。当其他DHCP伺服器收到了该消息后,它们会收回所有可能已提供给该客户的租约。然后它们把曾经给该客户保留的那个地址重新放回到可用地址池中,这样,它们就可以为其他电脑分配这个地址。任意数量的DHCP伺服器都可以响应同一个IP租约请求,但是每一个客户网卡只能接受一个租约提供。

DHCP确认(Acknowledge,ACK)

当DHCP伺服器收到来自客户的REQUEST消息后,它就开始了配置过程的最后阶段。这个响应阶段包括发送一个DHCPACK包给客户。这个包包含租期和客户可能请求的其他所有配置资讯。这时候,TCP/IP配置过程就完成了。

该伺服器响应请求并发送响应给客户。整个系统期望客户来根据选项来配置其网卡。

DHCP释放(RELEASE)

客户端向DHCP伺服器发送一个请求以释放DHCP资源,并注销其IP地址。鉴于客户端更多的时候并不清楚何时用户会将其从网络中移除,此协议不会托管“DHCP释放的发送”。

DHCP NAK

伺服器回复客户,客户要求的IP不能被分配。

客户端配置参数

DHCP伺服器会提供一些选择性的配置项目供DHCP客户端设置。在RFC 2132文件里面有提到这个详细的内容。[1]

设置选项

DHCP Option 60可以被DHCP客户端用来做为识别供应商及DHCP客户端这边的兼容性识别[2]。DHCP的协议里头有提供默认路由的选项,Option 60则是供应商的识别ID。基于这个选项,可在CPE方提供给STB方一些特定的选择。这样做最大的好处是在使用Option 60的时候,不用去定义桥接或路由的端口号。桥接是基于Option 60的MAC地址,如此一来switch可以连到STB上面,如同在PC及STB上面拥有同一个接口。

Option 60这个消息会是一个长度会变动的字符串也有可能依供应商提供的八进制数字的一个集合。DHCP客户端通常会用来沟通的一个方式是在提交DHCP要求的时候按硬件或固件的类型来设置这个资讯,这个资讯会被称之为供应商Class识别(VCI Vendor Class Identifier)/(Option 60)。这个方式可能因DHCP Server之间的不同而会在两种 CMs或两种 modems之间进行DHCP request时造成差异。有些set-top的Boxes也会设置VCI去通知DHCP Server有关硬件和装置的功能性资讯。所以结论是,这个选项的资讯会给予DHCP Server在做DHCP回应时必要附加消息上面的提示。

参考资料

相关

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.