跳到主要内容

2. SRV RR 的格式 (The Format of the SRV RR)

2.1 基本格式 (Basic Format)​

以下是 SRV RR 的格式,其 DNS 类型码为 33:

_Service._Proto.Name TTL Class SRV Priority Weight Port Target

(本文档末尾附近有一个示例。)


2.2 字段规格 (Field Specifications)​

2.2.1 Service​

所需服务的符号名称,定义于 Assigned Numbers [STD 2] 或本地定义。服务标识符前置一个下划线(_),以避免与自然出现的 DNS 标签发生冲突。

某些被广泛使用的服务(尤其是 POP)并没有一个统一的通用名称。如果 Assigned Numbers 为所指的服务规定了名称,那么该名称就是 SRV 查找时唯一合法的名称。Service 字段不区分大小写。


2.2.2 Proto​

所需协议的符号名称,前置一个下划线(_)以避免与自然出现的 DNS 标签发生冲突。目前该字段最有用的取值是 _TCP 和 _UDP,不过也可以使用任何由 Assigned Numbers 定义或本地定义的名称(与 Service 字段相同)。Proto 字段不区分大小写。


2.2.3 Name​

该 RR 所指向的域。SRV RR 的独特之处在于:检索时所使用的名字并非此处的 Name;本文档末尾的示例清楚地说明了这一点。


2.2.4 TTL​

标准 DNS 含义 [RFC 1035]。


2.2.5 Class​

标准 DNS 含义 [RFC 1035]。SRV 记录出现在 IN 类中。


2.2.6 Priority​

此目标主机的优先级。客户端必须 (MUST) 尝试联系其能够到达的、优先级编号最低的目标主机;具有相同优先级的目标主机应当 (SHOULD) 按照 weight 字段所定义的顺序依次尝试。取值范围为 0-65535。这是一个网络字节序的 16 位无符号整数。


2.2.7 Weight​

一种服务器选择机制。weight 字段为具有相同优先级的条目指定相对权重。权重较大的条目应当 (SHOULD) 被赋予相应更高的选中概率。该数值的取值范围为 0-65535,是一个网络字节序的 16 位无符号整数。当不需要进行服务器选择时,域管理员应当 (SHOULD) 使用权重 0,以使 RR 更便于人工阅读(减少干扰信息)。在存在权重大于 0 的记录时,权重为 0 的记录被选中的概率应当极小。


2.3 负载均衡算法 (Load Balancing Algorithm)​

在没有规范要求使用其他权重信息的情况下,客户端应为具有相同 Priority 的 SRV RR 排序,以决定各 SRV RR 所指定的目标主机被联系的顺序。应当 (SHOULD) 使用下列算法为相同优先级的 SRV RR 排序:

要选择下一个被联系的目标,先将所有(尚未排序的)SRV RR 以任意顺序排列,但所有权重为 0 的记录必须置于列表开头。

计算这些 RR 的权重之和,并按所选顺序为每个 RR 关联一个累积和。随后在 0 与所计算出的总和之间(含端点)选取一个均匀随机数,并选中其累积和值在所选顺序中第一个大于或等于该随机数的 RR。被选中的 SRV RR 所指定的目标主机,即为客户端下一个要联系的目标主机。将该 SRV RR 从无序的 SRV RR 集合中移除,并对剩余的无序 SRV RR 重复上述算法以选择下一个目标主机。持续此排序过程,直至不存在无序的 SRV RR。对每一个 Priority 都重复执行该过程。


2.4 其他字段 (Other Fields)​

2.4.1 Port​

此目标主机上该服务的端口。取值范围为 0-65535。这是一个网络字节序的 16 位无符号整数。该值通常(但并非必须)与 Assigned Numbers 中的规定一致。


2.4.2 Target​

目标主机的域名。该名称必须 (MUST) 拥有一个或多个地址记录,且该名称不得 (MUST NOT) 是别名(依 RFC 1034 或 RFC 2181 的含义)。强烈建议(但非强制)实现者在附加数据段(Additional Data Section)中返回这些地址记录。除非未来的标准动作另有许可,否则不得对此字段使用名字压缩。

Target 为 "." 表示该服务在此域中确实不可用。


导航​