一、什么是DHCP?

DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。

二、DHCP报文

  1. DHCP DISCOVER :DHCP协议开头报文
  2. DHCP OFFER:务器接收到DHCP DISCOVER之后做出的响应,它包括了给予客户端的IP(yiaddr)、客户端的MAC地址、租约过期时间、服务器的识别符以及其他信息
  3. DHCP REQUEST:客户端对于服务器发出的dhcp offer作出响应,租约续期使用
  4. DHCP ACK:服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的IP和其他信息可以被允许使用。
  5. DHCP NAK:ack相反报文,服务器拒绝客户端请求
  6. DHCP RELEASE:一般出现在客户端关机下线等
  7. DHCP INFORM:客户端向服务器发出的一些请求报文
  8. DHCP DECKINE:客户端发现服务端分配ip无法使用将发出次报文
工作流程:

客户端 客户端广播dhcp discover传向服务端------> 服务端

客户端 <-----服务器提供地址租约(客户端offer) 服务端

客户端 客户端选择并请求地址租用(客户端接收request)->服务端

客户端 <----**服务器确认将地址租用给客户端(客户端ack) ** 服务端

三、dhcp协议详解(与wireshark抓包对应)

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

四、dhcp实际长度大于设定长度

在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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐