DHCP Option 82详细讲解[通俗易懂]

DHCP Option 82详细讲解[通俗易懂]option82是dhcp报文中的中继代理信息选项(relayagentinformationoption)。当dhcpclient发送请求报文到dhcpserver时,若需要经过dhcp中继,则由dhcp中继将option82添加到请求报文中。option82包含很多sub-option,本文中的option82只支持sub-option1、sub-option2和sub-

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

option 82是dhcp报文中的中继代理信息选项(relay agent information option)。当dhcp client发送请求报文到dhcp server时,若需要经过dhcp中继,则由dhcp中继将option 82添加到请求报文中。option 82包含很多sub-option,本文中的option 82只支持sub-option 1、sub-option 2和sub-option 5。sub-option 1中定义了代理电路id(即circuit id),sub-option 2中定义了代理远程id(即 remote id),sub-option 5为链路选择(link selection)子项,该选项中包含了dhcp中继添加的ip地址。

 

   option 82实现了dhcp客户端和dhcp中继设备的地址信息在dhcp服务器上的记录,与其他软件配合使用可以实现dhcp分配的限制和计费功能。

    1. 概念介绍

    option

    dhcp报文中的一个选项,该选项在dhcp报文中为可变长的字段,option选项中包含了部分租约信息、报文类型等。option选项中最多可以包括255个option,最少为1个option。

    option 82

    option 82又称为中继代理信息选项(relay agent information option),是dhcp报文中option内容的一部分。rfc3046中定义了option 82,其位置在option 255之前而在其他option之后。option 82中可以包含最多255个sub-option,若定义了option 82,至少要定义一个sub-option。目前option 82中常用的sub-option 1、sub-option 2和sub-option 5。

    sub-option 1

    sub-option 1是option 82的一个子选项,为代理电路id(即circuit id)子项。子选项通常在dhcp中继设备上配置,定义了在传输报文的时候要携带dhcp客户端所连接交换机端口的vlan-id及二层端口号。通常sub-option 1与sub-option 2子选项要共同使用来标识dhcp源端的信息。

    sub-option 2

    sub-option 2也是option 82的一个子选项,为代理远程id(即remote id)子项。该子选项也通常在dhcp中继设备上配置,定义了在传输报文的时候要携带中继设备的mac地址信息。通常与sub-option 1子选项要共同使用来标识dhcp源端的信息。

    sub-option 5

    sub-option 5也是option 82的一个子选项。为链路选择(link selection)子项,该选项中包含了dhcp中继添加的ip地址。这样dhcp server在分配ip地址给dhcp客户端的时候就可以分配与该地址同网段的ip地址。

    2. option 82报文组成
    
    在dhcp报文中有一个options字段,该字段可以为空,也可以为某一个特性的option,option 82就是其中的一种option,可以有多个sub-option 组成。

    code:标识了中继代理信息选项的序号。本报文中序号为82,即option 82。option 82 在其他option之后,在option 255 之前。

    len:为代理信息域(agent information field)的长度。

    agent information field:代理信息域。在该字段中指定了使用的sub-option。

    sub-option报文结构

    subopt:子选项序号,本报文中为sub-option 1、sub-option 2和sub-option 5。各子选项含义如下:

    1表示代理电路id(circuit id)子项

    2表示代理远程id(remote id)子项

    5表示链路选择(link selection)子项

    len:标识sub-option value域的长度。

    sub-option value:sub-option的值。例如sub-option 1对应的值为circuit id。

    3. 标准模式与华为固网模式

    dhcp relay支持option 82,在收到从client到server的请求报文中添加option 82,以标识用户的位置信息。现在只添加sub-option 1和sub-option 2,不添加sub-option5。在标准模式,sub-option 1是接收报文的二层端口号和vlan号,sub-option 2是接收报文设备的mac地址。

    为了更加精确地定位用户位置信息,我司针对dslam应用提出ip dslam用户物理位置定位解决方案,定义了dhcp option 82的华为固网模式,其中option 82的sub-option1表示“节点标识+框号/槽号/子槽/端口号+vlan”;sub-option2没有改变,表示的是的relay系统mac地址;sub-option5 relay不添加。

    option 82的sub-option1中的节点标识为字符串,缺省可以采用设备的管理接口mac地址,形如:00-e0-fc-0d-dc-ec。为了提高维护的方便性,也允许网络管理者通过配置修改用户节点标识,可以选择是用relay的桥mac或设备名(通过sysname配置的),也可以由用户自行输入字符串。

    华为固网模式option 82中sub-option 1的标识格式:

    accessnodeidentifier eth frame/slot/subslot/port:vlan

    对各段的解释如下:

    accessnodeidentifier:接入节点标识,长度不超过50个字符的字符串,缺省为桥mac

    frame:框号,不支持的为0

    eth:以太端口类型

    slot:槽号

    subslot:子槽号

    port:端口号

    vlan:vlan标识

    4. 相关规范

    与dhcp中继支持option 82相关的协议规范有:

    rfc2131 dynamic host configuration protocol

    rfc3046 dhcp relay agent information option

    5. dhcp 中继支持option 82工作机制

    dhcp客户端通过dhcp中继从dhcp服务器获取ip地址的过程与同网段的dhcp获取过程完全相同,都要经历发现、提供、选择和确认四个阶段,详细的过程请参考本手册“网络层协议”的dhcp部分。这里将只介绍dhcp中继支持option 82时的工作机制,具体如下:

    dhcp客户端在初始化时以广播的形式发送请求报文;

    若本地网络存在dhcp服务器,则客户端可以直接从该服务器获取ip地址。

    若本地网络没有dhcp服务器,则与本网络相连的dhcp中继设备对该广播报文进行相应的处理。dhcp中继设备将检查报文中是否已有option 82选项,进行相应的处理。

    如果报文中已有option 82,设备按照配置的策略对该报文进行处理(丢弃、用中继设备本身的option 82项替代报文中原有的option 82项或保持报文原有的option 82项),然后将请求报文转发给dhcp服务器。

    若请求报文中没有option 82选项,则dhcp中继设备将option 82选项添加到报文中后转发给dhcp服务器。此时,请求报文中将包含了dhcp客户端所连接的交换机端口的mac地址、所属的vlan以及dhcp中继设备本身的mac地址。

    dhcp服务器收到dhcp中继设备转发的dhcp请求报文后,将记录报文中option选项所携带的信息,然后将带着dhcp配置信息以及option 82信息的报文发给dhcp中继。

    dhcp中继收到dhcp服务器的返回报文后将剥离报文中的option 82信息,然后将带有dhcp配置信息的报文转发给dhcp客户端。

    dhcp客户端发送的请求报文有四种,分别为dhcp_discover报文、dhcp_request报文、dhcp_release报文和dhcp_inform报文,dhcp中继设备将在四种报文中都添加option 82选项,因为不同厂商生产的dhcp服务器设备对请求报文的处理机制不同,有些设备处理dhcp_discover报文中的option 82信息,而有些处理dhcp_request报文中的option 82信息。




DHCP报文

DHCP报文是承载于UDP上的高层协议报文,采用67(DHCP服务器)和68(DHCP客户端)两个端口号。DHCP报文的格式如下图所示。

图1 DHCP报文格式

DHCP Option 82详细讲解[通俗易懂]

< 所有DHCP提供的配置信息都在options字段中,这才是精华部分 >

报文中各字段的描述如下:

  • op,报文类型,1表示请求报文,2表示回应报文。
  • htype,硬件地址类型,1表示10Mb/s的以太网的硬件地址。
  • hlen,硬件地址长度,以太网中该值为6。
  • hops,跳数。客户端设置为0,也能被一个代理服务器设置。
  • xid,事务ID,由客户端选择的一个随机数,被服务器和客户端用来在它们之间交流请求和响应,客户端用它对请求和应答进行匹配。该ID由客户端设置并由服务器返回,为32位整数。
  • secs,由客户端填充,表示从客户端开始获得IP地址或IP地址续借后所使用了的秒数。
  • flags,标志字段。这个16比特的字段,目前只有最左边的一个比特有用,该位为0,表示单播,为1表示广播。
  • ciaddr,客户端的IP地址。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。
  • yiaddr,”你自己的”或客户端的IP地址。
  • siaddr,表明DHCP协议流程的下一个阶段要使用的服务器的IP地址。
  • giaddr,DHCP中继器的IP地址。//注意:不是地址池中定义的网关
  • chaddr,客户端硬件地址。客户端必须设置它的”chaddr”字段。UDP数据包中的以太网帧首部也有该字段,但通常通过查看UDP数据包来确定以太网帧首部中的该字段获取该值比较困难或者说不可能,而在UDP协议承载的DHCP报文中设置该字段,用户进程就可以很容易地获取该值。
  • sname,可选的服务器主机名,该字段是空结尾的字符串,由服务器填写。
  • file,启动文件名,是一个空结尾的字符串。DHCP Discover报文中是”generic”名字或空字符,DHCP Offer报文中提供有效的目录路径全名。
  • options,可选参数域,格式为”代码+长度+数据”。

    DHCP Options

Option id

Length(字节)

描述

1

4

Subnet Mask

3

n*4

Router(网关)

6

n*4

DNS Server

7

n*4

Log Server

26

2

Interface MTU

33

n*8

Static route

35

4

ARP cache timeout

42

n*4

NTP servers

51

4

IP address lease time

53

1

Message type 1-DHCPDISCOVER 2-DHCPOFFER 3-DHCPREQUEST 4-DHCPDECLINE 5-DHCPACK 6-DHCPNAK 7-DHCPRELEASE 8-DHCPINFORM

54

4

DHCP Server Identifier

60

n

华为自定义:可配置该终端设备在发起DHCP请求时,通过Option 60携带域信息。ME60收到DHCP报文时,可根据Option 60中携带的域信息来分配IP地址。

82

n

华为自定义:ME60作为DHCP Relay,在中继用户DHCP报文时,可在Option 82中填写用户的物理位置信息,通知DHCP服务器按物理位置信息对为用户分配IP地址

DHCP报文类型

DHCP共有八种报文,分别为DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各报文类型功能如表1所述。

DHCP报文类型

描述

DHCP Discover

DHCP客户端请求地址时,并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送请求报文,这个报文成为Discover报文,目的是发现网络中的DHCP服务器,所有收到Discover报文的DHCP服务器都会发送回应报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。

DHCP Offer

DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给用户,告知用户本服务器可以为其提供IP地址。< 只是告诉client可以提供,是预分配,还需要client通过ARP检测该IP是否重复>

DHCP Request

DHCP客户端可能会收到很多Offer,所以必须在这些回应中选择一个。Client通常选择第一个回应Offer报文的服务器作为自己的目标服务器,并回应一个广播Request报文,通告选择的服务器。DHCP客户端成功获取IP地址后,在地址使用租期过去1/2时,会向DHCP服务器发送单播Request报文续延租期,如果没有收到DHCP ACK报文,在租期过去3/4时,发送广播Request报文续延租期。

DHCP ACK

DHCP服务器收到Request报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK报文作为回应,通知用户可以使用分配的IP地址。

DHCP NAK

如果DHCP服务器收到Request报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则发送NAK报文作为回应,通知用户无法分配合适的IP地址。

DHCP Release

当用户不再需要使用分配IP地址时,就会主动向DHCP服务器发送Release报文,告知服务器用户不再需要分配IP地址,DHCP服务器会释放被绑定的租约。

DHCP Decline

DHCP客户端收到DHCP服务器回应的ACK报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则发送Decline报文,通知服务器所分配的IP地址不可用。

DHCP Inform

DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则发送Inform报文向服务器进行请求,服务器收到该报文后,将根据租约进行查找,找到相应的配置信息后,发送ACK报文回应DHCP客户端。< 极少用到>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181448.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • mysql explain不准确_mysql explain预估剖析「建议收藏」

    mysql explain不准确_mysql explain预估剖析「建议收藏」引子:使用MySQL建立了一张表country,总共有才3121行记录。但是使用explainselectcount(*)fromcountry;的时候,发现行数rows达到6897,让我大吃一惊。mysql>explainselectcount(*)fromcountry;+—-+————-+———+——+————–…

    2022年10月17日
  • JAVA四舍五入保留一位小数

    JAVA四舍五入保留一位小数newBigDecimal(speed).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue()

  • Latex插入图片却不显示问题小结

    Latex插入图片却不显示问题小结1、首先检查有没有导入宏包\usepackage{graphicx}2、检查图片路径有无问题3、可以尝试将Tex的同名文件删除,重新编译生成4、若是文章分栏\begin{multicols}{2}那是因为multicols环境不能识别figure环境,重新定义一个环境即可\newenvironment{figurehere}{\def\@captype{figure}}{}\makeatother%用于连接公式编号在文中,用figureher

  • python怎样安装whl文件

    python怎样安装whl文件python第三方组件有很多都是whl文件,遇到这样的whl文件应该怎样安装呢,今天来介绍一下whl文件怎样安装。(一)下载whl文件可以从下面;两个网站找到自己需要的whl文件,部分文件在国内网站上没有,pypi网站上是最全的。pypi网站:https://pypi.python.org/pypi/国内whl集合网:https://www.l…

  • logback配置详解maxhistory(logback配置discrim)

    目录1、根节点包含的属性2、根节点的子节点 2.1、设置上下文名称: 2.2、设置loger、root 正文回到顶部1、根节点&lt;configuration&gt;包含的属性scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生…

  • 用原子操作实现无锁编程[通俗易懂]

    用原子操作实现无锁编程[通俗易懂]假设我们要维护一个全局的线程安全的int类型变量count,下面这两行代码都是很危险的:count++;count+=n;我们知道,高级语言中的一条语句,并不是一个原子操作.比如一个最简单的自增操作就分为三步: 1.从缓存取到寄存器2.在寄存器加13.存入缓存。多个线程访问同一块内存时,需要加锁来保证访问操作是互斥的. 所以,我

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号