DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,分配IP地址和其他网络参数;
DHCP三种角色:DHCP Client、DHCP Relay和DHCP Server;
DHCP端口:Client UDP68---->Server,Server UDP67---->Client;
DHCP8种报文:DHCP DISCOVER、DHCP OFFER、DHCP Request、DHCP ACK、DHCP NAK、DHCP DECLINE、DHCP RELEASE、DHCP INFORM
OP(OP code):1字节,OP=1客户端请求报文,OP=2服务器响应报文;
htype(Hardware Type):1字节,硬件类型
hlen(Hardware Length):1字节,硬件地址长度,以太网为6,48位;
hops:1字节,表示DHCP报文经过的DHCP Relay的数目,hops≤16;
xid:4字节,DHCP客户端选取的随机数,使DHCP服务器的回复与DHCP客户端的报文相关联
secs(seconds):2字节,表示客户端从开始获取地址或地址续租更新后所用的时间,单位是秒。
flags:2字节,16bit,只有最高位有意义;0表示客户端请求服务器以单播形式发送响应报文;1表示客户端请求服务器以广播形式发送响应报文;
ciaddr(client ip address):客户端IP;
yiaddr(your ip address):服务器分配给客户端IP;
siaddr (server ip address):DHCP客户端获得启动配置信息的服务器的IP地址;
giaddr(gateway ip address):表示第一个DHCP中继的IP地址;
chaddr (client hardware address):表示客户端的MAC地址;
sname (server host name):表示客户端获取配置信息的服务器名字;
file (file name):表示客户端需要获取的启动配置文件名;
options:表示DHCP的选项字段,最多为312字节;1字节Type 1字节Length Value(由Length决定)
options53决定了DHCP报文了类型,很多option代码代表了不同的意思;
1.1客户端首次接入网络DHCP无中继工作过程
第一阶段:Client广播Discover---->同网段所有设备或Relay;
第二阶段:Server会比较一下Client希望的租期和自己配置的租期,提供一个时间短的租期;
第三阶段:如收到多个Offer,只接第一个,Request(Server标识符、客户端IP地址)广播通知所有Server;
第四阶段:Client收到ACK,发送免费ARP确认是否地址冲突;
如冲突Client发送Decline---->Server,之前过程重来;
如Server收到Request,发现无法提供这个IP了,Server发送NAK---->Client,之前过程重来;
1.2客户端首次接入网络DHCP有中继工作过程
过程与无中继基本相同,不同点如下:
第一阶段:收到Discover,检查hops,大于16则丢弃;giaddr=0,填入接收Discover接口的IP,否则不修改;修改DHCP目的IP为下一跳Relay或DHCP Server;
第二阶段:提供giaddr同网段IP地址,向giaddr标识的Relay单播发送Offer,Relay检查广播标志位如置1,则广播Offer,如未置1,则单播发给Client;
第三、四阶段同上;
1.3客户端重用曾用过的IP地址DHCP工作过程
Client 发送Request(Option50填入之前用过的IP)---->Server;
Server通过查看自身MAC和IP对应记录决定是否给Client续用,如果可以---->ACK,否则沉默,直到客户端重新发送Discover报文;
1.4客户端更新租期DHCP工作过程
Client 租期50%单播发送Request---->Server,Server 发送ACK---->Client,则续租成功;
Client 租期87.5%如还未收到ACK,广播发送Request---->Server,Server 发送ACK---->Client,则续租成功;
Client 租期100%如还未收到ACK,或者在以上过程种收到NAK,Client重新发送DHCP DISCOVER报文请求新的IP地址;
Client 租期到期前不想继续使用IP,DHCP RELEASE---->Server; Client 发送DHCP INFORM---->请求更新配置信息;
2.DHCPv6类似IPv4中DHCP,基于UDP,IPv6不使用广播,使用组播报文;
分配类型:
1、手动配置
2、无状态自动地址分配(利用NDP)
3、DHCPv6有状态自动配置
4、DHCPv6无状态自动配置(利用NDP获取地址,利用DHCPv6获取除地址以外的其他参数)
报文:
msy-type报文类型,总共13种;1Solicit2Advertise3Request4Confirm5Renew6Rebind7Reply8Release9Decline10Reconfigure11Information-Request12Relay-Forward13Relay-Reply
transaction-ID:DHCPv6交互ID,这是个随机值,要保证服务器响应和客户端请求两者交互ID一致,如果服务器主动发起的报文ID为0;
options:DHCPv6的选项字段;
2.1无状态自动地址分配
无状态自动配置:即插即用,可以配置多个地址进行网络无缝迁移,利用RS、RA报文实现。
无状态自动配置,没有DHCP的情况下,设备自己生成IPv6地址
路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。
在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
- 路由器请求RS(Router Solicitation)报文:Type=133,主机接入网络后希望尽快获取网络前缀进行通信,此时主机立刻发送RS报文。(地址解析和DAD中用的那个叫NS,Type=135)
- 路由器通告RA(Router Advertisement)报文:Type=134,每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。(地址解析和DAD中用的那个叫NA,Type=136)
IPv6主机无状态自动配置过程:
- 根据接口标识产生链路本地地址。
- 发出邻居请求,进行重复地址检测。
- 如地址冲突,则停止自动配置,需要手工配置。
- 如不冲突,链路本地地址生效,节点具备本地链路通信能力。
- 主机会发送RS报文(或接收到设备定期发送的RA报文)。
- 根据RA报文中的前缀信息和接口标识得到IPv6地址。
利用Solicit报文来定位DHCPv6服务器,收到Advertise报文后根据优先级确定使用哪个DHCPv6服务器,接着通过Request/Reply报文交互完成地址申请和分配。
2.2.2DHCPv6两步交互
客户端发送Solicit报文中携带Rapid Commit选项,DHCPv6支持快速分配就直接回复Reply,如果不支持按照四部交互执行。
2.3DHCPv6无状态自动配置IPv6地址获得过程如2.1描述
客户端以组播方式发送Information-Request报文,该报文中携带Option Request选项,指定DHCPv6客户端需要从DHCPv6服务器获取的配置参数。DHCPv6服务器单播发送Reply报文,将网络配置参数返回给DHCPv6客户端。
2.4DHCPv6 PD这个全称叫DHCPv6前缀代理DHCPv6 PD(Prefix Delegation)是一种前缀分配机制,通俗的说是分配网段的。
过程类似DHCPv6的有状态地址分配,过程分四步:
1、DHCPv6 PD Client 发送Solicit报文,请求;
2、DHCPv6 PD Server发送Advertise报文确认可以提供前缀;
3、根据收到的多个Advertise报文选优先级高的,并向该服务器发送DHCPv6 request;
4、服务器回复Reply报文将地址前缀分配给客户端使用。
如果客户端携带了Rapid Commit过程同DHCPv6两步交互
2.5DHCPv6中继
1、客户端先向FF02::1:2(组播地址)的请求报文;
2、中继将收到的报文封装在Relay-Forward报文的中继消息选项(Relay Message Option)中,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继;
3、如果客户端和中继不在同一链路,则重新构造一个新的Relay-Forward报文,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继;
4、Server从客户端收到Relay-Forward后解析出DHCPv6客户端请求,将应答封装到Relay-reply的中继消息选项中,并将Relay-reply发给中继;
5、DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。
2.6DHCPv6地址续租DHCPv6服务器为DHCPv6客户端分配的地址是有租约的,租约由生命期(包括地址的首选生命期和有效生命期构成)和续租时间点(IA的T1、T2)构成。有效生命周期前,续租,否则失效。
客户端在T1时刻发送Renew(T1推荐为0.5生命期)
服务器回复Reply则可以续约,如果未收到回复,则如下图
客户端在T2时刻,向服务器组播发送Rebind(T2推荐0.8生命期),收到回复继续使用。
否则,在生命周期到达后,地址失效不能再用。
,