BINLD 容器
当 DHCP 服务器接收到一个请求时,包被分析并且标识键用于决定抽取哪个容器、选项和地址。
BINLD 配置 中的最后一个示例显示了子网容器。 它的识别密钥是客户机在网络中的位置。 如果客户机来自于该网络,那它就属于该容器。
每一类型的容器使用不同的选项来识别客户机:
- subnet 容器使用 giaddr 字段或接收接口的接口地址来确定客户机来自哪个子网。
- class 容器使用选项 77(用户位置类标识符)中的值。
- vendor 使用选项 60(供应商类标识符)中的值。
- client 容器对 PXED 客户机使用选项 61(“客户机标识”),对 BOOTP 客户机使用 BOOTP 包中的 chaddr 字段。
除了子网,每个容器都允许对与其匹配的值的指定,包括正则表达式。
也有一个隐式容器,全局容器。 置于全局容器中的选项和修饰符适用于所有容器,除非被覆盖或否定。 大多数容器能够放置在其他包含可见性范围的容器内。 容器可能有或可能没有与它们联系的地址范围。 按子网的性质,子网有与其关联的范围。
容器和子容器的基本规则如下:
- 在全局级别上所有的容器都有效。
- 子网绝不可以置于其他容器内。
- 受限制的容器内不能有同一类型的常规容器。 (例如,一个带有仅允许一个
Accounting类选项的容器不能包含带有允许所有以子母“a”开头的类的选项的容器。 这是非法的。) - 受限的客户机容器不能有子容器。
鉴于以上规则,您可以生成容器的层次结构,它为特定的客户机或客户机集而将您的选项分为不同的组。
Subnet 1
--Class 1
--Client 1
Subnet 2
--Class 1
----Vendor 1
----Client 1
--Client 1此示例显示了两个子网 Subnet 1 和 Subnet
2。 有一个类名 Class 1,一个供应商名 Vendor 1和一个客户机名 Client 1。 Class
1 和 Client 1 在多个位置定义。 由于它们位于不同的容器中,它们
的名称可以相同但其中的值可能不同。 如果 Client 1 从 Subnet 1 发送
消息到 DHCP 服务器,并在其选项列表中指定了 Class 1,那么 DHCP 服务器将生成以下容器路径:
Subnet 1, Class 1, Client 1最具体的容器在最后列出。 为得到地址,以逆向的层次结构来检查列表以查找第一个可用的地址。 接着,用正向层次结构检查列表以得到选项。 除非选项 deny 在容器中出现,否则选项会覆盖前面的值。 此外,由于 Class 1 和 Client 1 位于 Subnet
1中,因此会根据容器优先级对它们进行排序。 如果在 Subnet 2 中相同的客户机发送相同的消息,生成的容器列表为:
Subnet 2, Class 1, Client 1 (在 Subnet 2 级别) , Client
1 (在 Class 1 级别)
Subnet 2 首先列出,然后是 Class 1,接着是位于 Subnet 2 级的 Client 1(因为在层次结构上该客户机语句仅低一个级别)。 层次结构暗示与第一个客户机语句匹配的客户机比与 Subnet 2中的 Class
1 的客户机匹配 Client 1 的客户机更具体。
在层次结构内通过深度选择的优先级不能由容器自身的优先级取代。 例如,如果相同的客户机发送相同的消息并指定供应商标识,那么容器列表是:
Subnet 2, Class 1, Vendor 1, Client 1 (在 Subnet
2 级别) , Client 1 (在 Class 1 级别)
容器优先级改善了搜索性能因为它遵行一个常规的概念,那就是客户机容器是定义一个或多个客户机的最详尽的方法。 类容器包含的地址没有客户机容器详尽,供应商次之,子网最差。