DHCP原理课程内容DHCP简介DHCP原理DHCP扩展介绍DHCP简介•为什么会有DHCP?–所有基于TCP/IP协议族实现的网络,其通信的一个重要基础就是IP地址,但对于大多数非专业的用户而言,IP地址是什么都不甚了解,要正确设置或者修改就更难了–但用户主机需要访问网络时,其网卡的IP却又是必不可少的–DHCP-DynamicHostControlProtocol动态主机配置协议,就是用于简化主机IP地址设置的协议。通过DHCP,用户可以实现各项必要网络参数IP、DNS、Wins等的“零设置”,做到“即插即用DHCP简介•DHCP的设计目标DHCP设计的主要目标是使TCP/IP网络的管理易于实现和维护:–自动IP地址的分配和配置,用户无需手工配置–所有IP地址资源都由服务器统一存放、控制,集中IP子网的管理–对不使用的IP地址资源回收,提高利用率DHCP简介•DHCP的优缺点–可避免手工设置所产生的错误–可避免多个用户使用相同IP地址而产生的冲突–无需网络管理员干涉,减少网络管理工作量–每个用户的IP地址是不固定的、随机性的,不利于管理和监控–服务器故障可能会导致全网瘫痪,需要在网内做相应的冗余备份,网络组建成本增加课程内容DHCP简介DHCP原理DHCP扩展介绍DHCP原理•DHCP要解决的问题–问题:DHCP目的是为了方便使用者,无需手工配置IP等相关信息,而DHCP又是一种基于IP运行的协议,在没有IP地址的情况下,DHCP又如何交互呢?DHCP原理–DHCP分配的IP地址资源则具有时效性、是动态的,有利于提高IP资源的利用率–DHCP使用UDP协议报头,服务器端口67,客户端端口68–DHCP使用Request和Reply消息格式,DHCP的功能是依赖于报文的OPTION字段来进行实现的;DHCP原理•DHCP报文介绍DHCP原理•DHCP报文介绍(续)DHCP报文直接借用了BOOTP的报文格式,其中的核心内容是OPTION–DHCPOPTION格式每个Option都由Tag、Len、Data三大部分组成:1、Tag表示本Option的作用2、Len表明后续Data的长度(Tag=0、255的option比较特殊,没有对应Data,当然也不需要Len长度)3、Data内容作为Tag的补充详细说明DHCP原理•DHCP报文介绍(续)–DHCP常见OPTIONRequestedIPAddress,DHCP客户端曾请求并使用过的IP地址,通常出现在请求报文中。Tag=50,Len=4,Data=ip.addrDHCP原理•DHCP报文介绍(续)–DHCP常见OPTIONIPAddressLeaseTime,用户请求分配IP地址的使用时间(租约期),在DHCP客户端的请求报文和服务器的回应报文中都有,但以服务器分配为准Tag=51,Len=4,Data=timeDHCP原理•DHCP报文介绍(续)–DHCP常见OPTIONDHCPMessageType,DHCP协议交互的控制报文类型Tag=53,Len=1,Data=1~7(只用了3bit)DHCP原理•DHCP报文介绍(续)–DHCPMessageType是本文的一个重点,DataValue取值如下:Value=1,标示DHCPDiscoverValue=2,标示DHCPOfferValue=3,标示DHCPRequestValue=4,标示DHCPDeclineValue=5,标示DHCPACKValue=6,标示DHCPNAKValue=7,标示DHCPReleaseDHCP原理•DHCP报文介绍(续)–DHCP常见OPTIONServerIdentifier,服务器身份,通常在DHCP报文中指定与哪个服务器进行交互通信Tag=54,Len=4,Data=ip.adrDHCP原理•DHCP报文介绍(续)–DHCP常见OPTIONParameterRequestList,请求参数列表,标示客户端需要服务器分配的内容Tag=55,Len=n(n≥1),Data=parameters其中,具体的参数内容使用代码来标示,如:1为子网掩码、6为DNS-Server等等,有兴趣的可以查找rfc获得更详细的内容DHCP原理•DHCP报文介绍(续)–DHCP常见OPTIONClientidentifier,客户端身份识别,用以表示DHCP客户端的唯一身份,服务器据此查询数据库,唯一指定一个IP地址资源Tag=61,Len=n(n≥2),Data=hw.addr类似的Option还有OP=12,客户端的Hostname,服务器也可以据此唯一绑定一个IP地址DHCP原理•DHCP报文介绍(续)–DHCP常见OPTIONEnd,Tag=255时,是一个特殊的Option,表示所有的Options字段已经填充完毕,后面没有了。DHCP原理•DHCP的协议流程–下面以DHCP客户端的角度来描述DHCP整个协议流程转换机制Start1Start2InitSelectingRequestingBoundRenewingRebindingDiscoverSellectOfferSendRequestACKT1expiresSendRequestNAKT2expiresSendRequestNAK/TimeoutNAK/TimeoutACKCollectOffersACKDHCP原理•DHCP的协议流程(续)–INIT客户机第一次启动之后,进入Init初始化状态,此时通过发送DHCPDiscover,用于探测和发现服务器,同时状态切换到Selecting状态该报文承载于UDP:67中,通过IP广播发送ClientClientServ1ClientServ2DHCPDiscoverDHCP原理•DHCP的协议流程(续)–Discover报文常见参数构成:OP=1,BOOTRequestXid=Random,由Client确定Ciaddr=0.0.0.0Yiaddr=Siaddr=Giaddr=0.0.0.0Chaddr=ClientMACAddrDHCP原理•DHCP的协议流程(续)–Discover报文常见Option构成:RequestedIPaddr=MAYIPAddrLeaseTime=MAYClientIentifier=MAYServerIdentifier=MustNOTParameterRequestList=MAYDHCP原理•DHCP的协议流程(续)–INIT由于该请求为广播形式,通常在发送时会设置一个随机的实验延迟(≤10秒),以避免各个DHCPClient同时发送广播报文,对局域网造成不必要的影响DHCP原理•DHCP的协议流程(续)–SELECTING服务器收到Discover报文后,查看自己的IPPool,如果IPPool有地址可用,则选取一个地址,分配到Yiaddr中;如果没有可用IP,则丢弃;该报文被封装到UDP:68中,通过IP广播给ClientsClientClientServ1ClientServ2DHCPOfferDHCP原理•DHCP的协议流程(续)–SELECTINGDHCPServ判断Discover报文接收端口的IP网段,然后从与之相同的DHCPIPPool中按顺序选取一个服务器同时还必须分配LeaseTime给用户:如果Discover请求的LeaseTime未指定,且Client还没有IP地址,则按照Server的默认设置分配如果请求的LeaseTime未指定,但Client已经获取了地址,则把该IPBinding的Leasetime值返回如果Discover指定了LeaseTime值,则无论Client是否已经有IP地址,Server可以选择在请求值和自己的默认LeaseTime中选取一个进行分配DHCP原理•DHCP的协议流程(续)–Offer报文常见参数构成:OP=2,BOOTReplyXid,由Client的Discover报文确定Ciaddr=0.0.0.0Yiaddr=OfferedIPAddr,由Server确定Siaddr=BOOTP/DHCPServIPAddrGiaddr,由Discover报文确定Chaddr=ClientMACAddr,fromDiscoverDHCP原理•DHCP的协议流程(续)–Offer报文常见Opton构成:RequestedIPaddr=MustNotIPAddrLeaseTime=MustClientIentifier=MustNotServerIdentifier=MustParameterRequestList=MustNotDHCP原理•DHCP的协议流程(续)–REQUESTING在一个广播域中,客户端可能同时收到多个DHCPServ的Offer,如何选择呢?Client设置一个较短的收集时间段,在此期间可能收到的多个Offers,一般最先到达的Offer为优先,或者可以选择上次确定使用的Server,Client可以根据需要来进行选择,并向该Serv发起后续请求报文,同时状态切换为RequestingDHCP原理•DHCP的协议流程(续)–REQUESTINGClient选定一个最优的Offer以后,就会根据该Offer提供的OPTION来发起Request,正式请求这些资源以上内容被封装到UDP:6867报文,通过IP广播发送到指定的ServClientClientServ1ClientServ2DHCPRequestDHCP原理•DHCP的协议流程(续)–Request报文常见参数构成:OP=1,BOOTRequestXid,根据Server的Offer报文确定Ciaddr=0.0.0.0Yiaddr=Siaddr=Giaddr=0.0.0.0Chaddr=ClientMACAddrDHCP原理•DHCP的协议流程(续)–Request报文常见Opton构成:RequestedIPaddr=MustIPAddrLeaseTime=MayClientIentifier=MayServerIdentifier=MustParameterRequestList=MayDHCP原理•DHCP的协议流程(续)–BOUND服务器收到Request报文之后,会通过ACK报文给用户正式指派一个IP地址,并进行Binding操作;如果用户请求的IP地址非法,则回应NAK以上内容被封装到UDP:6768报文,通过IP广播发送到指定的ClientClientClientServ1ClientServ2DHCPACK/NAKDHCP原理•DHCP的协议流程(续)–ACK报文常见参数构成:OP=2,BOOTReplyXid,根据Client的Request报文确定Ciaddr=0.0.0.0或者与Request报文相同Yiaddr=Server指定Siaddr=BOOTP/DHCPServIPAddrGiaddr=根据Request报文确定Chaddr=ClientMACAddrDHCP原理•DHCP的协议流程(续)–ACK报文常见Opton构成:RequestedIPaddr=MustNotIPAddrLeaseTime=MustClientIentifier=MustServerIdentifier=MustParameterRequestList=MustNotDHCP原理•DHCP的协议流程(续)–最后客户端收到ACK报文之后,从中提取相关的IPAddr、LeaseTime、Router、DNS等信息,并自动设置到自己的网卡中–DHCP基本流程就此结束,用户可以进行后续的网络访问和操作–当然,Client如果发现ACK报文异常,可以使用Decline报文进行拒绝,此时状态将回到初始INIT–注意:DHCPServ在正式ACK之前,通常需要通过Ping或者ARP报文来探测一下