DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。
客户端 客户端广播dhcp discover传向服务端------> 服务端
客户端 <-----服务器提供地址租约(客户端offer) 服务端
客户端 客户端选择并请求地址租用(客户端接收request)->服务端
客户端 <----**服务器确认将地址租用给客户端(客户端ack) ** 服务端
Xid :随机生成的一段字符串,两个数据包拥有相同的xid说明他们属于同一次会话(Transaction ID: 0x118b1bc5Seconds elapsed: e)
Ciaddr :客户端会在发送请求时将自己的ip地址放在此处(~client IPaddress: 10.18.18.i)
**Yiaddr *服务器会将想要分配给客户端的ip地址放在此处
**Siaddr *一般来说是服务器的ip地址.但是注意!根据openwrt源码给出的注释,当报文的源地址、siaddr、option>server_id字段不一致(有经过跨子网转发)时,通常认为option>srever_id字段为真正的服务器ip,siaddr有可能是多次路由跳转中的某一个路由的ip (下图中wireshark抓包中也有标明siaddr为nextserver ip address)
**Chaddr *客户端的mac地址
Giaddr :如果需要跨子网进行DHCP地址发放,则在此处填入经过的路由器的ip地址
Sname :服务器主域名
**Options *可以自由添加的部分,用于存放客户端向服务器请求信息和服务器
xid (4) :Transaction ID: 0x118b1bc5Seconds elapsed: e
ciaddr(4):~client IPaddress: 10.18.18.i
yiaddr (4):Your (client) IPaddress: 8.e.e.e
giaddr(4):. Relay agent IPaddress: 8.e.e.e
在pe(服务商路由器)-ce(客户路由器)简单环境下。我们设定ce路由dhcp长度为64,但实际连接ce设备获取到的dhcp包长度为128.
原因:
1, 当客户端是有状态自动分配模式时(非none),服务器发送两个地址(普通地址和PD地址),客户端接收到消息后会选择普通地址,即/128.
2,当客户端是无状态地址自动分配模式(none),服务器只会发送PD地址,客户端接收到请求后生成请求前缀长度。
dhcp服务器地址长度必须小于客户端请求长度才会下发PD(委派)地址。 如服务器长度为 A::B/48时才能下发请求/64.
服务器必须找到相关地址否则不下饭或下发128长度的。这个实际不影响上网功能,默认不配置。 如果需要,需要自己配置。
服务器必须找到相关地址否则不下饭或下发128长度的。这个实际不影响上网功能,默认不配置。 如果需要,需要自己配置。
例子:
ROUTER(config)# ipv6 dhcpd
ROUTER(dhcpv6-config)# declare subnet6 Bridge0 2020:2021:2022:: 48
ROUTER(dhcpv6-subnet6-config)# prefix-length-mode minimum
ROUTER(dhcpv6-subnet6-config)# prefix6 2020:2021:2022 100::2020:2021:2022:f00::/64
ROUTER(config)#service dhcp6