沈阳电脑维修网,沈阳上门维修电脑服务
当前位置: 主页 > 网络设备故障>剖析DHCP服务的工作原理-电脑维修助手 >

剖析DHCP服务的工作原理-电脑维修助手

时间:2017-5-23来源:www.sypcwx.cn 作者: 沈阳电脑维修网点击:
沈阳电脑维修,上门维修电脑
  沈阳电脑维修上门服务13889116605: 在与读者的交流中,发现许多读者对DHCP服务的工作原理不是很清楚,如为什么DHCP服务报文不能穿越网关,在网络中有多台DHCP服务器时客户端到底该如何选择?各阶段的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:YourIPAddress(yiaddr)=0.0.0.0 DHCP:ServerIPAddress(siaddr)=0.0.0.0 DHCP:RelayIPAddress(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=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:YourIPAddress(yiaddr)=157.54.50.5 DHCP:ServerIPAddress(siaddr)=0.0.0.0 DHCP:RelayIPAddress(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=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协议头部中,客户端的SourceAddress仍然是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:YourIPAddress(yiaddr)=0.0.0.0 DHCP:ServerIPAddress(siaddr)=0.0.0.0 DHCP:RelayIPAddress(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协议头部,SourceAddress是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: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:YourIPAddress(yiaddr)=157.54.50.5 DHCP:ServerIPAddress(siaddr)=0.0.0.0 DHCP:RelayIPAddress(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=DHCPACK DHCP:RenewalTimeValue(T1)=8Days,0:00:00 DHCP:RebindingTimeValue(T2)=14Days,0:00:00 DHCP:IPAddressLeaseTime=16Days,0:00:00 DHCP:ServerIdentifier=157.54.48.151 DHCP:SubnetMask=255.255.240.0 DHCP:Router=157.54.48.1 DHCP:NetBIOSNameService=157.54.16.154 DHCP:NetBIOSNodeType=(Length:1)04 DHCP:Endofthisoptionfield     【说明】客户端在收到服务器返回的DHCP-ACK确认报文后,会以广播的方式发送免费ARP报文(该报文中,源IP地址和目标IP地址都是本机IP地址,源MAC地址是本机MAC地址,目的MAC地址是广播MAC地址),探测是否有主机使用服务器分配的IP地址,如果在规定的时间内没有收到回应,客户端才使用此地址。否则,客户端会发送DHCPDECLINE报文给DHCP服务器,并重新申请IP地址。www.it165.net    如果网络中存在多个DHCP服务器,除DHCP客户端选中的服务器外,其它DHCP服务器中本次未分配出的IP地址仍可分配给其他客户端。  
上一篇:路由图与路由过渡
查看[剖析DHCP服务的工作原理-电脑维修助手]所有评论
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:
推荐内容
关于我们 服务价格 联系我们 企业网站优化 沈阳网站建设 沈阳维修电脑