SRV记录(英語:Service Record,中文又名服务定位记录)是域名系统中用于指定服务器提供服务的位置(如主机名和端口)数据。此数据于RFC 2782中定义,类型代码为33。部分协议,如会话发起协议(SIP)及可扩展消息与存在协议(XMPP)通常需要服务记录的支持。

记录格式 编辑

服务记录的格式为:

_服务._协议.名称. TTL 类别 SRV 优先级 权重 端口 主机.
  • 服务:服务的符号名称。
  • 协议:服务的传输协议,通常为TCPUDP
  • 名称:此记录生效的所在域名,以半角逗号结尾。
  • TTL:标准DNS存活时间值。
  • 类别:标准DNS类别值(此值总为IN)。
  • 优先级:目标主机的优先级,值越小越优先。
  • 权重:相同优先度记录的相对权重,值越大越优先。
  • 端口:服务所在的TCP或UDP端口。
  • 主机:提供服务的规范主机名,以半角句号结尾。

以下是区域文件英语Zone File中的服务记录示例:

_minecraft._tcp.example.com. 86400 IN SRV 0 5 25565 mc.example.com.

此记录指向在TCP端口25565上监听Minecraft游戏协议的 mc.example.com。此处的优先级为0,权重为5。

MX记录一样,SRV记录中的主机必须指向已有地址记录(AAAAA记录英语AAAA record)的主机名。指向带有CNAME记录的主机名则无效。

负载均衡 编辑

优先级值决定记录数据的先后顺序。客户端应先尝试使用优先级最高的数据,在连接失败时尝试更低优先级的数据。若一项服务有着同一优先级的多个SRV记录,客户端则应根据记录中的权重进行负载均衡。下例中,优先度及权重值用于提供负载均衡与备份服务。

# _服务._协议.名称.       TTL   类别  SRV 优先级   权重    端口 主机.
_sip._tcp.example.com.   86400 IN    SRV 10       60     5060 bigbox.example.com.
_sip._tcp.example.com.   86400 IN    SRV 10       20     5060 smallbox1.example.com.
_sip._tcp.example.com.   86400 IN    SRV 10       20     5060 smallbox2.example.com.
_sip._tcp.example.com.   86400 IN    SRV 20       0      5060 backupbox.example.com.

前三个记录优先度均为10,故客户端将根据权重决定该联系哪台服务器(主机及端口)。三个记录的权重值相加为100,故60%的时间内客户端使用 bigbox.example.com。剩下40%的时间内,客户端会将请求发送给主机 smallbox1smallbox2;其中的一半将发送给 smallbox1,另一半给 smallbox2。若bigbox不可用,则剩余两台机器由于权重相同,其将共享负载。

若三台优先级为10的服务器均不可用,则客户端将使用下一优先级的记录,即backupbox.example.com。这台机器可能为位于其他地理位置且不受造成上述三台机器不可用原因影响的主机。

由于SRV记录所提供的记录均为静态数据,其负载均衡能力天生有限。记录无法根据服务器的当前负载进行变通,除非TTL值足够低(一分钟或更小)才能使优先级(或权重值)迅速更新。

用法 编辑

SRV记录通常与下列标准化传输协议同时使用:

微软Windows 2000中,客户端查询SRV服务来确定特定服务的域名控制器。SRV记录同时也被Outlook 2007、2010及macOS 10.6邮件使用来定位Exchange自动发现服务。[12] 微软Windows网络域名控制器在DNS中注册其活动目录的服务类型。

RFC 6335中定义互联网号码分配局(IANA)来维护SRV记录及协议的服务名记录表。[13]

另请参阅 编辑

参考文献 编辑

  1. ^ Looking up Monitors through DNS – Ceph Documentation. [2017-12-04]. (原始内容存档于2017-12-05). 
  2. ^ Hostnames for the Master and Slave KDCs. Web.mit.edu. [2012-05-23]. (原始内容存档于2012-10-21). 
  3. ^ RFC 3088 – OpenLDAP Root Service An experimental LDAP referral service. Faqs.org. [2012-05-23]. (原始内容存档于2012-05-14). 
  4. ^ Use of SRV Records for Locating Email Submission/Access Services [17 April 2013]. 
  5. ^ Federation API. matrix.org. [2018-01-05]. (原始内容存档于2018-01-06) (英语). 
  6. ^ Minecraft wiki, 1.3.1. Curse Inc. [2019-06-17]. (原始内容存档于2023-11-11). 
  7. ^ 存档副本. [2019-06-17]. (原始内容存档于2008-08-22). 
  8. ^ Puppet Docs: Using Multiple Puppet Masters, Option 4: DNS SRV Records. Puppet Labs. [2013-12-26]. (原始内容存档于2013-12-27). 
  9. ^ [Suggestion] TS DNS. Forum.teamspeak.com. [2013-10-25]. (原始内容存档于2013-10-29). 
  10. ^ TeamSpeak 3 Client Version 3.0.8 Released. [2019-06-17]. (原始内容存档于2016-09-27). 
  11. ^ XEP-0156: Discovering Alternative XMPP Connection Methods. Xmpp.org. [2012-05-23]. (原始内容存档于2012-05-07). 
  12. ^ A new feature is available that enables Outlook 2007 to use DNS Service Location (SRV) records to locate the Exchange Autodiscover service. Support.microsoft.com. 2010-05-13 [2012-05-23]. (原始内容存档于2012-04-20). 
  13. ^ RFC 6335 - Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry. ietf.org. 2011-08-01 [2013-01-28]. (原始内容存档于2013-01-28). 

外部链接 编辑