SRV记录(英語:Service Record,中文又名服务定位记录)是域名系统中用于指定服务器提供服务的位置(如主机名和端口)数据。此数据于RFC 2782中定义,类型代码为33。部分协议,如会话发起协议(SIP)及可扩展消息与存在协议(XMPP)通常需要服务记录的支持。
服务记录的格式为:
_服务._协议.名称. TTL 类别 SRV 优先级 权重 端口 主机.
以下是区域文件中的服务记录示例:
_minecraft._tcp.example.com. 86400 IN SRV 0 5 25565 mc.example.com.
此记录指向在TCP端口25565上监听Minecraft游戏协议的 mc.example.com。此处的优先级为0,权重为5。
与MX记录一样,SRV记录中的主机必须指向已有地址记录(A或AAAA记录)的主机名。指向带有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%的时间内,客户端会将请求发送给主机 smallbox1 和 smallbox2;其中的一半将发送给 smallbox1,另一半给 smallbox2。若bigbox
不可用,则剩余两台机器由于权重相同,其将共享负载。
若三台优先级为10的服务器均不可用,则客户端将使用下一优先级的记录,即backupbox.example.com。这台机器可能为位于其他地理位置且不受造成上述三台机器不可用原因影响的主机。
由于SRV记录所提供的记录均为静态数据,其负载均衡能力天生有限。记录无法根据服务器的当前负载进行变通,除非TTL值足够低(一分钟或更小)才能使优先级(或权重值)迅速更新。
在微软Windows 2000中,客户端查询SRV服务来确定特定服务的域名控制器。SRV记录同时也被Outlook 2007、2010及macOS 10.6邮件使用来定位Exchange自动发现服务。[12] 微软Windows网络域名控制器在DNS中注册其活动目录的服务类型。
RFC 6335中定义互联网号码分配局(IANA)来维护SRV记录及协议的服务名记录表。[13]