主要是关于DHCP报文类型、报文结构、同网段通信原理以及帧中继的基础内容
DHCP有八种报文种类,其中常见的是前7种报文,比较重要的是前4种报文,如下:
- DHCP DISCAVER报文:DHCP客户端在本地网络以广播的形式发送discover请求报文(源IP:0.0.0.0 目的IP:255.255.255.255),用于发现网络中的DHCP服务器;
- DHCP OFFER报文:DHCP服务器收到discover请求报文后,会查找地址池里可用IP地址,并将租期、子网掩码、网关、DNS等信息一同封装在offer请求报文(源IP:DHCP服务器 目的IP:255.255.255.255)以广播的方式发送出去并且在服务器上添加租约记录;
- DHCP REQUEST报文:客户端用于请求收到offer报文里的IP地址所发送的request请求报文(源IP:0.0.0.0 目的IP:255.255.255.255);在租期时间只剩1/2时,也会发送该报文用于请求延长租期,如果DHCP没有回复ACK应答报文,就会在租期时间只剩7/8时,也会再次发送该报文用于请求延长租期;
- DHCP ACK报文:服务器收到客户端的request报文,请求的IP地址及参数无误就会发送ACK应答报文(源IP:DHCP服务器 目的IP:255.255.255.255)同意客户端的请求;根据该报文的用户Mac地址查找是否有相应的租约记录,如果有就发送ACK报文同意续租(收到续租时发送request报文);
- DHCP NAK报文:如果服务器收到的request报文中请求的IP地址及参数有误或没有相应的租约记录就会发送NAT应答报文,通知客户端无法分配IP地址或者续约;
- DHCP RELEASE报文:客户端主动释放IP地址时就会发送该报文,用于告知服务器不再使用该IP地址,服务器就能快速收回地址;
- DHCP DELINE报文:客户端获得IP地址后,发送免费ARP发现服务器分配的IP地址已经被使用或者由于某种原因使得该IP不能正常使用,就会发送该报文通告DHCP服务器地址不可用,希望获取新的IP地址;
- DHCP INFORM报文:客户端有IP地址但没有其他参数就会向DHCP发送inform报文请求获取其他参数(很少见);
注:在客户端获取IP地址过程中,所有报文都是采用广播形式发送(同网段);如果有DHCP中继器,那么中继器与客户端发送的报文都是广播形式,中继器与DHCP服务器之间发送的报文都为单播形式;
报文字段 | 说明 |
---|---|
OP | 指定DHCP报文的类型,请求报文置为1,应答报文置为2(请求报文包含:discover报文,request报文,decline报文,release报文,inform报文;应答报文包括:offer报文,ack报文,nak报文) |
Hype | 指定客户端MAC地址类型,该字段置为1表示最常见的以太网类型 |
Hlen | 指定客户端MAC地址的长度 |
Hops | 指定DHCP经过DHCP中继器的数量,请求报文经过一个DHCP中继器该字段就会增加1,没有经过置为0 |
Xid | 在客户端发送discover报文时随机产生的标识符,用于标识IP地址请求过程,整个IP地址的请求过程使用的都是一样的,简单来说,整个IP地址请求的过程都使用discover报文产生的XID值,便于区分不同客户端的IP地址请求过程(一个DHCP服务器有多个客户端,便于区分不同客户端的IP地址请求过程) |
Secs | 指客户端获取到IP地址后已使用的时间或者续约成功后IP地址已使用时间(定时器,确定IP地址租期是否过期)单位为秒,没有获取IP地址之前置为0 |
Flags | 标识应答报文是采用单播还是广播发送,置为0是单播发送,置为1是广播发送(只使用第一位,其余位未使用) |
Ciaddr | DHCP客户端的IP地址;在没有获取到IP地址之前该字段都置为0.0.0.0 |
Yiaddr | DHCP服务器分配给客户端的IP地址,除offer和ACK报文,其他报文该字段为0.0.0.0(只有应答报文才有该字段) |
Siaddr | DHCP服务器的IP地址,除offer和ACK报文,其他报文该字段为0.0.0.0(只有应答报文才有该字段) |
Giaddr | DHCP客户端发送的报文经过的第一个DHCP中继器的IP地址,没有经过中继器就置为0.0.0.0 |
Chaddr | 记录DHCP客户端的MAC地址,每个报文中都有 |
Sname | 记录为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式),除了offer和ACK报文(应答报文),其余报文均为空 |
File | 记录DHCP服务器为DHCP客户端启动的配置文件以及文件路径信息;仅在offer报文中存在,其余报文为空 |
Options | 可选字段,长度可变,最多为312字节;该字段包含了报文类型、有效租约时间、网关、子网掩码、DNS服务器、域名称、续约时间等 |
Options字段可以包含的内容(仅供了解),如下
Options代码号 | 长度/字节 | 说明 |
---|---|---|
1 | 4 | 子网掩码 |
3 | 长度可变,必须是4字节的倍数 | 默认网关(可以是路由器IP地址列表) |
6 | 长度可变,必须是4字节的倍数 | DNS服务器地址(可以是DHS服务器地址列表) |
15 | 长度可变 | 域名称(注DNS服务器名称) |
44 | 长度可变,必须是4字节的倍数 | WINS服务器(可以是WINS服务器地址列表) |
51 | 4 | 有效租约时间,单位秒 |
53 | 1 | 报文类型,数值从1-8依次表示的报文为:Discover报文、Offer报文、Request报文、Decline报文、ACK报文、NAK报文、Release报文和Inform报文 |
58 | 4 | 续约时间,单位秒 |
客户端在请求获取IP的过程中,以广播的形式发送DHCP Discover请求报文(OP置为1,Ciaddr置为0.0.0.0;Yiaddr置为0.0.0.0;Siaddr置为0.0.0.0;Chaddr置为客户端的MAC地址;Options字段为基础信息)用于发现本地网络的DHCP服务器;
当DHCP服务器收到discover报文后,会以广播的形式回复DHCP Offer应答报文(OP置为2;Ciaddr置为0.0.0.0;Yiaddr置为DHCP可分配的IP地址;Siaddr置为DHCP服务器IP;Chaddr置为客户端的MAC地址;Sname置为DHCP服务器的名称;Options字段里含有相应的子网掩码、默认网关、DNS服务器IP、有效租约期、服务器IP地址)用于通告客户端,DHCP服务器可以分配的一个IP地址以及相应相应的参数;
客户端只会接收第一个收到的Offer报文,后续的Offer报文(其他DHCP服务器)丢弃,收到discover报文之后,客户端会以广播的形式发送DHCP Request请求报文(OP置为1;Ciaddr置为0.0.0.0;Yiaddr置为0.0.0.0;Siaddr置为0.0.0.0;Sname置为空;Options字段包含服务器主机名、请求的IP地址、服务器的IP地址等)用于告诉服务器,客户端需要申请的IP地址;
服务器收到Request报文,如果请求的IP地址以及参数无误并同意分配,就会以广播的形式发送DHCP ACK应答报文(OP置为2;Ciaddr置为0.0.0.0;Yiaddr置为被分配的IP;Siaadr置为服务器的IP地址;Sname置为服务器的名称;Options字段包含子网掩码、默认网关、DNS服务器IP地址、有效租约期等)用于通知客户端,服务器同意该IP地址后的申请;如果服务器不同意IP地址的申请,会以广播形式发送NAK应答报文(OP置为2;Ciaddr置为0.0.0.0;Yiaddr置为被请求的IP地址;Siaddr置为服务器IP地址;Options字段包含相应参数)
客户端收到ACK报文,就会使用该IP地址,在使用之前会以广播形式发送免费ARP(源MAC:客户端的Mac、目的Mac:广播Mac;源IP:请求的IP地址、目的IP:请求的IP地址)[源/目IP的IP地址是相同的]用于探测本地网络中该IP地址是否被使用,如果有设备回复,就会发送DHCP Decline请求报文(OP置为1;Ciaddr置为0.0.0.0;Yiaddr置为0.0.0.0;Siaddr置为0.0.0.0;Options字段包含服务器IP、服务器名称、请求的IP地址等),请求服务器重新分配IP地址;如果在规定时间里没有收到回复,客户端使用该IP地址;
如果客户端不再使用该IP地址,就会以单播形式发送DHCP Release请求报文(OP置为1;Ciaddr置为0.0.0.0;Yiaddr置为0.0.0.0;Siaddr置为0.0.0.0;Options字段包含服务器IP、服务器名称、请求的IP地址等)用于客户端释放被请求的IP地址;服务器收到Release报文,会以广播形式发送ACK应答报文;
当客户端IP地址的租期期限只剩1/2时,就会以单播形式发送Request请求报文通告服务器自己想重新续约,如果服务器不同意续约,就会以单播形式发送NAK应答报文,告诉客户端不同意续约,如果同意就以单播形式发送ACK应答报文;当客户端IP地址的租期期限到了7/8时,会再次发送Request请求报文,与上述相同
上述过程,如下图所示:
Option82是DHCP报文中的中继代理信息选项,该选项记录了客户端的物理位置信息;该选项最多支持255个子选项,目前设备主要支持的是sub-option1(Ciruit ID,电路ID子选项)、sub-option2(Remote ID,远端ID子选项)
Sub-option1的内容用于接收DHCP客户端请求报文的端口所属的VLAN编号(对应“VLAN ID”字段)以及端口索引(取值为端口的物理编号减一,对应“Port Index”字段)
Sub-option2的内容用于接收客户端请求报文的DHCP中继器的MAC地址(对应“MAC”字段)
跨网段和同网段的DHCP获取IP地址过程基本相同,只是多了DHCP中继器,报文的Options字段里会添加一个Option82字段;
当DHCP中继器收到客户端发送的请求报文后,会检测该报文是否含有Option82字段,如果含有该字段,DHCP中继器会根据预先配置的策略对报文进行处理(丢弃或保持原有Option82或使用DHCP中继器自身的Option82代替),同时根据Sub-option1的VLAN ID和Port Index字段,找到为对应网段分配地址的服务器,将报文中的Giaddr字段置为DHCP中继器的IP地址;
如果不含有Option82字段,就会将DHCP中继器自身的Option82填充进报文,以单播形式发送给DHCP服务器;
DHCP中继收到服务器发送的应答报文就会剥离Option82字段,以广播形式转发出去。
跨网段通信,如下图所示:
DHCP Snooping是一种DHCP安全技术,能够有效防止网络中仿冒DHCP服务器的攻击,保证客户端从合法的服务器获取IP地址,而且能够记录DHCP客户端IP地址与MAC地址等参数的对应关系而生成绑定表,同时还可以防范各种基于DHCP服务器攻击。
信任功能:信任端口(正常转发DHCP应答报文)、非信任端口(丢弃接收的DHCP应答报文,offer报文、ACK报文、NAK报文);
基本监听功能:通过监听DHCP的请求和应答报文,生成DHCP Snooping绑定表,绑定表项包括,客户端的MAC地址、IP地址、端口号以及端口所属的VLAN号等
注:DHCP Snooping绑定表根据IP地址的DHCP租用期进行老化,或根据用户释放IP地址所发送的release报文自动删除对应项;DHCP Snooping一般在接入网络的二层设备上或中继设备上开启