1.DHCP in IPv4

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

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(1)

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无中继工作过程

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(2)

第一阶段: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有中继工作过程

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(3)

过程与无中继基本相同,不同点如下:

第一阶段:收到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工作过程

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(4)

Client 发送Request(Option50填入之前用过的IP)---->Server;

Server通过查看自身MAC和IP对应记录决定是否给Client续用,如果可以---->ACK,否则沉默,直到客户端重新发送Discover报文;

1.4客户端更新租期DHCP工作过程

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(5)

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的选项字段;

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(6)

2.1无状态自动地址分配

无状态自动配置:即插即用,可以配置多个地址进行网络无缝迁移,利用RS、RA报文实现。

无状态自动配置,没有DHCP的情况下,设备自己生成IPv6地址

路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。

在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(7)

IPv6主机无状态自动配置过程:

2.2DHCPv6有状态地址分配2.2.1DHCPv6四步交互(多用于存在多个DHCPv6服务器的情况下)

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(8)

利用Solicit报文来定位DHCPv6服务器,收到Advertise报文后根据优先级确定使用哪个DHCPv6服务器,接着通过Request/Reply报文交互完成地址申请和分配。

2.2.2DHCPv6两步交互

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(9)

客户端发送Solicit报文中携带Rapid Commit选项,DHCPv6支持快速分配就直接回复Reply,如果不支持按照四部交互执行。

2.3DHCPv6无状态自动配置

IPv6地址获得过程如2.1描述

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(10)

客户端以组播方式发送Information-Request报文,该报文中携带Option Request选项,指定DHCPv6客户端需要从DHCPv6服务器获取的配置参数。DHCPv6服务器单播发送Reply报文,将网络配置参数返回给DHCPv6客户端。

2.4DHCPv6 PD

这个全称叫DHCPv6前缀代理DHCPv6 PD(Prefix Delegation)是一种前缀分配机制,通俗的说是分配网段的。

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(11)

过程类似DHCPv6的有状态地址分配,过程分四步:

1、DHCPv6 PD Client 发送Solicit报文,请求;

2、DHCPv6 PD Server发送Advertise报文确认可以提供前缀;

3、根据收到的多个Advertise报文选优先级高的,并向该服务器发送DHCPv6 request;

4、服务器回复Reply报文将地址前缀分配给客户端使用。

如果客户端携带了Rapid Commit过程同DHCPv6两步交互

2.5DHCPv6中继

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(12)

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)构成。有效生命周期前,续租,否则失效。

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(13)

客户端在T1时刻发送Renew(T1推荐为0.5生命期)

服务器回复Reply则可以续约,如果未收到回复,则如下图

怎么知道有没有dhcp(一文解读DHCPDHCPv6)(14)

客户端在T2时刻,向服务器组播发送Rebind(T2推荐0.8生命期),收到回复继续使用。

否则,在生命周期到达后,地址失效不能再用。

,