DHCP 分配地址过程.docx

上传人:b****6 文档编号:7527378 上传时间:2023-01-24 格式:DOCX 页数:10 大小:49.19KB
下载 相关 举报
DHCP 分配地址过程.docx_第1页
第1页 / 共10页
DHCP 分配地址过程.docx_第2页
第2页 / 共10页
DHCP 分配地址过程.docx_第3页
第3页 / 共10页
DHCP 分配地址过程.docx_第4页
第4页 / 共10页
DHCP 分配地址过程.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

DHCP 分配地址过程.docx

《DHCP 分配地址过程.docx》由会员分享,可在线阅读,更多相关《DHCP 分配地址过程.docx(10页珍藏版)》请在冰豆网上搜索。

DHCP 分配地址过程.docx

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) =

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)  =

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) =

DHCP:

BootFileName   (file)  =

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1