跳到主要内容

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 (服务)

所需服务的符号名称, 如已分配号码 [STD 2] 中定义或本地定义。在服务标识符前加下划线 (_) 以避免与自然出现的 DNS 标签冲突。

一些广泛使用的服务 (尤其是 POP) 没有单一的通用名称。如果已分配号码命名了所指示的服务, 则该名称是 SRV 查找唯一合法的名称。Service 不区分大小写。


2.2.2 Proto (协议)

所需协议的符号名称, 前面加下划线 (_) 以防止与自然出现的 DNS 标签冲突。_TCP 和 _UDP 目前是此字段最有用的值, 尽管已分配号码定义的任何名称或本地名称都可以使用 (与 Service 相同)。Proto 不区分大小写。


2.2.3 Name (名称)

此 RR 所指的域。SRV RR 的独特之处在于搜索的名称不是此名称; 末尾附近的示例清楚地说明了这一点。


2.2.4 TTL

标准 DNS 含义 [RFC 1035]。


2.2.5 Class (类)

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


2.2.6 Priority (优先级)

此目标主机的优先级。客户端必须 (MUST) 尝试联系其可以到达的优先级编号最低的目标主机; 具有相同优先级的目标主机应该 (SHOULD) 按照权重字段定义的顺序尝试。范围为 0-65535。这是网络字节顺序的 16 位无符号整数。


2.2.7 Weight (权重)

服务器选择机制。权重字段为具有相同优先级的条目指定相对权重。较大的权重应该 (SHOULD) 被赋予按比例更高的被选择概率。此数字的范围为 0-65535。这是网络字节顺序的 16 位无符号整数。当没有任何服务器选择要做时, 域管理员应该 (SHOULD) 使用权重 0, 以使 RR 对人类更易读 (噪音更少)。在存在权重大于 0 的记录的情况下, 权重为 0 的记录被选择的概率应该非常小。

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

在没有规范要求使用其他权重信息的协议的情况下, 客户端按照将联系 SRV RR 指定的目标主机的顺序排列相同优先级的 SRV RR。应该 (SHOULD) 使用以下算法对相同优先级的 SRV RR 进行排序:

要选择下一个要联系的目标, 以任意顺序排列所有 SRV RR (尚未排序的), 但所有权重为 0 的 RR 放在列表的开头。

计算这些 RR 的权重之和, 并将每个 RR 与所选顺序中的运行总和关联。然后在 0 和计算的总和之间 (含) 选择一个均匀随机数, 并选择运行总和值在所选顺序中第一个大于或等于所选随机数的 RR。所选 SRV RR 中指定的目标主机是客户端下一个要联系的主机。从未排序的 SRV RR 集合中删除此 SRV RR, 并将所述算法应用于未排序的 SRV RR 以选择下一个目标主机。继续排序过程, 直到没有未排序的 SRV RR。对每个优先级重复此过程。


2.4 其他字段 (Other Fields)

2.4.1 Port (端口)

此目标主机上此服务的端口。范围为 0-65535。这是网络字节顺序的 16 位无符号整数。这通常如已分配号码中指定的那样, 但不必如此。


2.4.2 Target (目标)

目标主机的域名。此名称必须 (MUST) 有一个或多个地址记录, 该名称不得 (MUST NOT) 是别名 (在 RFC 1034 或 RFC 2181 的意义上)。鼓励但不要求实现者在附加数据部分返回地址记录。除非并直到未来标准行动允许, 否则不得对此字段使用名称压缩。

目标为 "." 意味着此域明确不提供该服务。