DHCP一家子(不包括DHCPv6)包括DHCP Client、DHCP Server、DHCP Relay以及DHCP Snooping,之后我会一个个详细学习之后发出来。今天讲述一下DHCP relay,之前先学习的DHCP Sever,还没来得及整理,之后会发出来,今天先说说DHCP Relay。
DHCP Relay(DHCP中继),也叫作DHCP Agent,主要用于DHCP Client和DHCP Server不在一个网段时,DHCP Client又有自动地址分配的请求。下面说一下工作过程:
DHCP Client广播发送请求报文,如果同一存在DHCP Server,则Server给客户端提供地址分配。如果本网络不存在DHCP Server,那么就需要DHCP Realy充当代理,来代替DHCP Client寻找DHCP Server,同时也把Server发送给客户端的响应报文转发给客户端。
具体流程如下:假设本网络内没有DHCP Server
Dhcp relay会根据接收到的报文的op字段判断是请求报文还是响应报文:
1)如果收到请求报文的话(可能来自dhcp cllient也可能是dhcp relay),检查如果带有option82字段,则丢弃(来自client,单层relay)或者用自己的option82替换(来自dhcp relay,多层relay)。如果没有携带option82,则DHCP Relay需要添加这个选项,并修改giaddr字段为自己的ip地址,hops字段加1,如果DHCP Relay知道DHCP Server的地址那么就单播出去,否则就广播出去(看如何配置)。Dhcp server收到请求报文后,解析option82字段得到dhcp relay的信息,同时发送响应报文,响应报文带有给DHCP Client的配置信息以及option82字段。
2)如果收到的是响应报文(可能来自DHCP Relay也可能是DHCP Server),那么dhcp relay会剥离option82字段,然后一层层下发到HDCP Client
交互过程如此下图:
说明:
请求报文包括:Discover、Request、Inform、Decline、Release
响应报文包括:Offer、ACK、NAK
DHCP Client正常请求报文是广播报文,如果是DHCP Server直接发送给DHCP Server的那就需要看Client是否设置广播标志位。如果设置则是广播,未设置就是单播。DHCP server若发送给DHCP Relay则是单播。DHCP Relay 发送给DHCP Client要检查是否设置广播标志位(响应报文的这个位的设置和请求报文设置的是相同值),DHCP Relay到DHCP Relay是单播。
Option82:
Option82选项是dhcp报文options中对dhcp relay应用设置的选项。在RFC3046中讲述了option82的作用
格式为:
Code:82(option的code号)
Len:N(为sub-options的长度。设置了option82后,至少设置一个sub-option)
Sub-options:
sub-options的格式为:
现在有三种sub-opt:
Sub-opt:1(circuit id表示代理电路id)一般配合sub-opt2一起使用
Len:n(sub-option value的长度)
Sub-option value:
不同的模式有不同的规定值:
在标准模式下通常是接收报文的二层端口号(port)和vlan号
另外还有华为固网模式的格式为:
AccessNodeIdentifier eth frame/slot/subslot/port/:vlan
AccessNodeIdentifier:接入点标识
eth :以太网的类型
Frame:框号
Slot:槽号
Subslot:子槽号
Port:端口号
Vlan:vlan id
Sub-opt:2(remote id表示代理远程id)
Len:n(sub-option value的长度)
Sub-option value:
接收报文的设备mac地址
Sub-opt:5(link selection 表示链路选择)
Len:n(sub-option value的长度)
Sub-option value:
一般不设置