DHCP 分配地址过程.docx
- 文档编号:27496823
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:12
- 大小:51.04KB
DHCP 分配地址过程.docx
《DHCP 分配地址过程.docx》由会员分享,可在线阅读,更多相关《DHCP 分配地址过程.docx(12页珍藏版)》请在冰豆网上搜索。
DHCP分配地址过程
在与读者的交流中,发现许多读者对DHCP服务的工作原理不是很清楚,如为什么DHCP服务报文不能穿越网关,在网络中有多台DHCP服务器时客户端到底该如何选择?
各阶段的DHCP报文格式有哪些主要变化?
DHCP客户端与DHCP服务器又是如何识别并建立通信的等。
在此本文给出了具体介绍.
11.4。
4DHCP服务IP地址自动分配原理
DHCP在提供服务时,DHCP客户端是以UDP68号端口进行数据传输的,而DHCP服务器是以UDP67号端口进行数据传输的。
DHCP服务不仅体现在为DHCP客户端提供IP地址自动分配过程中,还体现在后面的IP地址续约和释放过程中。
本节仅介绍DHCP客户端初次分配IP地址的过程。
在整个DHCP服务器为DHCP客户端初次提供IP地址自动分配过程中,一共经过了以下四个阶段,利用了表11—10中的前四个报文:
发现阶段(DHCP客户端在网络中广播发送DHCPDISCOVER请求报文,发现DHCP服务器,请求IP地址租约)、提供阶段(DHCP服务器通过DHCPOFFER报文向DHCP客户端提供IP地址预分配)、选择阶段(DHCP客户端通过DHCPREQUEST报文确认选择第一个DHCP服务器为它提供IP地址自动分配服务)和确认阶段(被选择的DHCP服务器通过DHCPACK报文把在DHCPOFFER报文中准备的IP地址租约给对应DHCP客户端)。
在DHCP客户端在获得了一个IP地址以后,就可以发送一个免费ARP请求探测网络中是否还有其它主机使用IP地址,来避免由于DHCP服务器地址池重叠而引发的IP冲突。
以上四个阶段如图11—19所示,相当于DHCP客户端与DHCP服务器的四次握手过程。
具体描述如下:
图11-19 DHCP客户端从DHCP服务器获取IP地址的四个阶段
(1)发现阶段:
即DHCP客户端获取网络中DHCP服务器信息的阶段。
在客户端配置了DHCP客户端程序(如在Windows系统中进行了如图11-16所示的配置)并启动后,以广播方式发送DHCPDISCOVER报文寻找网络中的DHCP服务器。
示例如下。
此广播报文采用传输层的UDP68号端口发送(封装的目的端口为UDP68号端口),经过网络层IP协议封装后,源IP地址为0。
0。
0。
0(因为此时还没有分配IP地址),目的IP地址为255.255。
255.255(有限广播IP地址).如下是一个DHCPDISCOVER报文封装的IP报头示例,可以看到 DestinationAddress(目的地址)是 255.255。
255。
255,而SourceAddress(源地址)是 0。
0。
0.0.IP报头中的其它字段含义大家可以参见本书第7章7.3。
4节相关内容。
IP:
ID=0x0;Proto=UDP;Len:
328
IP:
Version=4(0x4)
IP:
HeaderLength=20(0x14)
IP:
ServiceType=0(0x0)
IP:
Precedence=Routine
IP:
。
..0。
...=NormalDelay
IP:
.。
.。
0。
。
。
=NormalThroughput
IP:
...。
。
0..=NormalReliability
IP:
TotalLength=328(0x148)
IP:
Identification=0(0x0)
IP:
FlagsSummary=0(0x0)
IP:
。
。
。
。
..。
0=Lastfragmentindatagram
IP:
。
..。
。
.0.=Mayfragmentdatagramifnecessary
IP:
FragmentOffset=0(0x0)bytes
IP:
TimetoLive=128(0x80)
IP:
Protocol=UDP-UserDatagram !
—-—使用UDP传输层协议
IP:
Checksum=0x39A6
IP:
SourceAddress=0.0。
0.0 !
-——源IP地址为0。
0。
0。
0
IP:
DestinationAddress=255.255.255.255 !
—-——目的IP地址为255。
255。
255。
255
IP:
Data:
Numberofdatabytesremaining=308(0x0134)
【经验之谈】在以上DHCPDISCOVER报文中IP报头中的目的地址(DestinationAddress)是255。
255.255。
255这个有限广播地址.这个有限广播地址就是代表任意一个IPv4子网的广播地址,当然是发送报文的主机所在的子网和DHCP服务器所在子网的广播地址,但因为此时DHCP客户端并不知道DHCP服务器所在的是哪个子网。
下面所有其它DHCP报文中的255.255。
255。
255地址的含义也是一样的。
至于IP报头中的源地址(SourceAddress),由于当前DHCP客户端主机并未分配具体的IP地址,所以只能用具有任意代表功能的0。
0。
0。
0地址来表示了。
下面所有其它DHCP报文中指定的0.0.0。
0地址的含义也是一样的。
因为此时,DHCP客户端没有分配到IP地址,也不知道DHCP服务器或DHCP中继的IP地址,所以在DHCPDISCOVER报文中Ciaddr(客户端IP地址)、Yiaddr(被分配的DHCP客户端IP地址)、Siaddr(下一个为DHCP客户端分配IP地址的DHCP服务器地址)、Giaddr(DHCP中继IP地址)这四个字段均为0.0。
0.0,如下所示.另外,从中可以看到,在CHADDR字段和DHCP选项中ClientIdentifier字段中都标识了DHCP客户端网卡MAC地址。
DHCP:
Discover (xid=21274A1D)
DHCP:
OpCode (op) =1(0x1)
DHCP:
HardwareType (htype) =1(0x1)10MbEthernet
DHCP:
HardwareAddressLength(hlen)=6(0x6)
DHCP:
Hops (hops) =0(0x0)
DHCP:
TransactionID (xid) =556223005(0x21274A1D)
DHCP:
Seconds (secs) =0(0x0)
DHCP:
Flags (flags) =1(0x1) !
-——标志位置1,代表以广播方式发送
DHCP:
1..。
.。
。
。
....。
..。
=Broadcast
DHCP:
ClientIPAddress(ciaddr)=0。
0。
0。
0
DHCP:
Your IPAddress(yiaddr)=0.0。
0。
0
DHCP:
ServerIPAddress(siaddr)=0.0。
0.0
DHCP:
Relay IPAddress(giaddr)=0。
0.0.0
DHCP:
ClientEthernetAddress(chaddr)=08002B2ED85E
DHCP:
ServerHostName (sname) =〈Blank>
DHCP:
BootFileName (file) =
DHCP:
MagicCookie=[OK]
DHCP:
OptionField (options)
DHCP:
DHCPMessageType =DHCPDiscover !
-——DHCP报文类型为DHCPDiscover
DHCP:
Client-identifier =(Type:
1)08002b2ed85e
DHCP:
HostName =JUMBO-WS !
-—-DHCP服务器主机名
DHCP:
ParameterRequestList=(Length:
7)010f032c2e2f06
DHCP:
Endofthisoptionfield
(2)提供阶段:
即DHCP服务器向DHCP客户端提供预分配IP地址的阶段。
网络中的所有DHCP服务器接收到客户端的DHCPDISCOVER报文后,都会根据自己地址池中IP地址分配的优先次序选出一个IP地址,然后与其它参数一起通过传输层的UDP67号端口,在DHCPOFFER报文中以广播方式发送给客户端(目的端口是DHCP客户端的UDP68号端口)。
客户端通过封装在帧中的目的MAC地址(也就在DHCPDISCOVER报文中的CHADDR字段值)的比对来确定是否接收该帧.但这样一来,理论上DHCP客户端可能会收到多个DHCPOFFER报文(当网络中存在多个DHCP服务器时),但DHCP客户端只接受第一个到来的DHCPOFFER报文。
DHCPOFFER报文经过IP协议封装后的源IP地址DHCP服务器自己的IP地址,目的地址仍是255.255.255。
255广播地址,使用的协议仍为UDP。
下面是一个DHCPOFFER报文的IP报头示例。
IP:
ID=0x3C30;Proto=UDP;Len:
328
IP:
Version=4(0x4)
IP:
HeaderLength=20(0x14)
IP:
ServiceType=0(0x0)
IP:
Precedence=Routine
IP:
..。
0。
。
。
.=NormalDelay
IP:
。
。
。
.0.。
.=NormalThroughput
IP:
.。
。
..0.。
=NormalReliability
IP:
TotalLength=328(0x148)
IP:
Identification=15408(0x3C30)
IP:
FlagsSummary=0(0x0)
IP:
。
。
。
。
。
..0=Lastfragmentindatagram
IP:
。
.。
。
。
。
0.=Mayfragmentdatagramifnecessary
IP:
FragmentOffset=0(0x0)bytes
IP:
TimetoLive=128(0x80)
IP:
Protocol=UDP-UserDatagram
IP:
Checksum=0x2FA8
IP:
SourceAddress=157.54。
48.151
IP:
DestinationAddress=255.255。
255.255
IP:
Data:
Numberofdatabytesremaining=308(0x0134)
在DHCPOFFER报文中,Ciaddr字段值仍为0。
0。
0。
0,因为客户端仍没有分配到IP地址;Yiaddr字段已有值了,这是DHCP服务器为该客户端预分配的IP地址;因为此时仍没有得到客户端确认,所以Siaddr字段值仍为0。
0.0。
0;因为没有经过DHCP中继服务器,所以Giaddr字段值仍为0.0。
0.0.另外,在 DHCP可选项部分,可以看到由服务器随 IP 地址一起发送的各种选项。
在这种情况下,服务器发送的是子网掩码、默认网关(路由器)、租约时间、WINS 服务器地址(NetBIOS 名称服务)和 NetBIOS 节点类型。
下面是一个DHCPOFFER报文示例。
DHCP:
Offer (xid=21274A1D)
DHCP:
OpCode (op) =2(0x2)
DHCP:
HardwareType (htype) =1(0x1)10MbEthernet
DHCP:
HardwareAddressLength(hlen)=6(0x6)
DHCP:
Hops (hops) =0(0x0)
DHCP:
TransactionID (xid) =556223005(0x21274A1D)
DHCP:
Seconds (secs) =0(0x0)
DHCP:
Flags (flags) =1(0x1)
DHCP:
1。
...。
..。
.。
。
..。
.= Broadcast
DHCP:
ClientIPAddress(ciaddr)=0。
0.0。
0
DHCP:
Your IPAddress(yiaddr)=157。
54。
50。
5
DHCP:
ServerIPAddress(siaddr)=0。
0.0。
0
DHCP:
Relay IPAddress(giaddr)=0。
0。
0.0
DHCP:
ClientEthernetAddress(chaddr)=08002B2ED85E
DHCP:
ServerHostName (sname) =
DHCP:
BootFileName (file) =〈Blank>
DHCP:
MagicCookie=[OK]
DHCP:
OptionField (options)
DHCP:
DHCPMessageType =DHCPOffer !
-—-DHCP报文类型为DHCPOffer
DHCP:
SubnetMask =255.255。
240.0 !
———所分配IP地址的子网掩码为255。
255.240。
0
DHCP:
RenewalTimeValue(T1)=8Days, 0:
00:
00 !
-——想要继续租约原来分配的IP地址,则提出续约申请的期限为8天
DHCP:
RebindingTimeValue(T2)=14Days, 0:
00:
00 !
——-如果上次申请续约失败,再次申请绑定原来分配到的IP地址的期限为14天
DHCP:
IPAddressLeaseTime =16Days, 0:
00:
00 !
-—-租约期限为16天,也就是DHCP客户端可使用此IP地址的最长时间为16天
DHCP:
ServerIdentifier =157。
54。
48。
151 !
—-—DHCP服务器的IP地址为157。
54。
48.151
DHCP:
Router =157.54.48。
1 !
-——默认网关IP地址为157。
54。
48.1
DHCP:
NetBIOSNameService =157.54。
16.154 !
-——DNS服务器IP地址为157。
54。
16.154
DHCP:
NetBIOSNodeType =(Length:
1)04
DHCP:
Endofthisoptionfield
(3)选择阶段:
即DHCP客户端选择IP地址的阶段。
如果有多台DHCP服务器向该客户端发来DHCPOFFER报文,客户端只接受第一个收到的DHCPOFFER报文,然后以广播方式发送DHCPREQUEST报文.在该报文的“RequestedAddress”选项中包含DHCP服务器在DHCPOFFER报文中预分配的IP地址,对应的DHCP服务器IP地址等.这样也就相当于同时告诉得其他DHCP服务器,它们可以释放已提供的地址,并将这些地址返回到可用地址池中.
在DHCPOFFER报文封装的IP协议头部中,客户端的 Source Address仍然是 0.0.0。
0,数据包的 Destination 仍然是 255.255。
255.255。
但在DHCPOFFER报文中Ciaddr、Yiaddr、Siaddr、Giaddr 字段的地址均0.0。
0.0,大家自己分析一下为什么,很简单的.下面是一个DHCPOFEER报文头部和DHCPOFFER报文示例.
IP:
ID=0x100;Proto=UDP;Len:
328
IP:
Version=4(0x4)
IP:
HeaderLength=20(0x14)
IP:
ServiceType=0(0x0)
IP:
Precedence=Routine
IP:
.。
.0.。
.。
=NormalDelay
IP:
。
...0...=NormalThroughput
IP:
。
.。
。
.0。
。
=NormalReliability
IP:
TotalLength=328(0x148)
IP:
Identification=256(0x100)
IP:
FlagsSummary=0(0x0)
IP:
.。
。
..。
。
0=Lastfragmentindatagram
IP:
.。
.。
。
.0.=Mayfragmentdatagramifnecessary
IP:
FragmentOffset=0(0x0)bytes
IP:
TimetoLive=128(0x80)
IP:
Protocol=UDP-UserDatagram
IP:
Checksum=0x38A6
IP:
SourceAddress=0。
0。
0.0
IP:
DestinationAddress=255.255。
255.255
IP:
Data:
Numberofdatabytesremaining=308(0x0134)
DHCP:
Request (xid=21274A1D)
DHCP:
OpCode (op) =1(0x1)
DHCP:
HardwareType (htype) =1(0x1)10MbEthernet
DHCP:
HardwareAddressLength(hlen)=6(0x6)
DHCP:
Hops (hops) =0(0x0)
DHCP:
TransactionID (xid) =556223005(0x21274A1D)
DHCP:
Seconds (secs) =0(0x0)
DHCP:
Flags (flags) =1(0x1)
DHCP:
1。
。
..。
.。
.。
。
。
.。
.。
=Broadcast
DHCP:
ClientIPAddress(ciaddr)=0.0.0。
0
DHCP:
Your IPAddress(yiaddr)=0。
0。
0。
0
DHCP:
ServerIPAddress(siaddr)=0.0。
0。
0
DHCP:
Relay IPAddress(giaddr)=0.0.0。
0
DHCP:
ClientEthernetAddress(chaddr)=08002B2ED85E
DHCP:
ServerHostName (sname) =〈Blank>
DHCP:
BootFileName (file) =〈Blank>
DHCP:
MagicCookie=[OK]
DHCP:
OptionField (options)
DHCP:
DHCPMessageType =DHCPRequest
DHCP:
Client-identifier =(Type:
1)08002b2ed85e
DHCP:
RequestedAddress =157。
54.50。
5
DHCP:
ServerIdentifier =157。
54。
48。
151
DHCP:
HostName =JUMBO-WS
DHCP:
ParameterRequestList=(Length:
7)010f032c2e2f06
DHCP:
Endofthisoptionfield
(4)确认阶段:
即DHCP服务器确认分配级DHCP客户端IP地址的阶段。
某个DHCP服务器在收到DHCP客户端发来的DHCPREQUEST报文后,只有DHCP客户端选择的服务器会进行如下操作:
如果确认将地址分配给该客户端,则以广播方式返回DHCPACK报文;否则返回DHCPNAK报文,表明地址不能分配给该客户端。
在DHCP 服务器发送的DHCPACK报文的IP协议头部,Source Address是 DHCP 服务器IP地址,DestinationAddress仍然是广播地址255。
255.255。
255.在DHCPACK报文中的Yiaddr字段包含要分配给客户端的IP地址,而Chaddr和DHCP:
ClientIdentifier字段是发出请求的客户端中网卡的MAC地址.同时在选项部分也会在DHCPOFFER报文中把所分配的IP地址的子网掩码、默认网关、DNS服务器、租约期、续约时间等信息加上。
IP:
ID=0x3D30;Proto=UDP;Len:
328
IP:
Version=4(0x4)
IP:
HeaderLength=20(0x14)
IP:
ServiceType=0(0x0)
IP:
Precedence=Routine
IP:
..。
0。
.。
.=NormalDelay
IP:
。
...0..。
=NormalThroughput
IP:
。
。
。
。
。
0。
。
=NormalReliability
IP:
TotalLength=328(0x148)
IP:
Identification=15664(0x3D30)
IP:
FlagsSummary=0(0x0)
IP:
。
.。
。
.。
.0=Lastfragmentindatagram
IP:
。
.。
..。
0.=Mayfragmentdatagramifnecessary
IP:
FragmentOffset=0(0x0)bytes
IP:
TimetoLive=128(0x80)
IP:
Protocol=UDP-UserDatagram
IP:
Checksum=0x2EA8
IP:
SourceAddress=157.54.48.151
IP:
DestinationAddress=255.255.255。
255
IP:
Data:
Numberofdatabytesremaining=308(0x0134)
DHCP:
ACK (xid=21274A1D)
DHCP:
OpCode (op) =2(0x2)
DHCP:
HardwareType (htype) =1(0x1)10MbEthernet
DHCP:
HardwareAddressLength(hlen)=6(0x6)
DHCP:
Hops (hops) =0(0x0)
DHCP:
Transaction
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DHCP 分配地址过程 分配 地址 过程