首页/网络/协议速查/SRV 记录(服务定位)
DNS 与域名解析60 条

SRV 记录(服务定位)

描述服务的「主机 + 端口 + 优先级 + 权重」:让客户端不必写死端口,如 SIP、LDAP、Minecraft、Matrix 等。

协议速查网络更新于 2026-10-13

SRV 记录是什么

SRV 是一种 DNS 记录类型,用来回答「某个服务在哪个主机、哪个端口」:它一次给出目标主机、端口、优先级与权重。这样客户端就不必把服务器地址和端口写死在配置里,改服务位置只需改 DNS。它常用于 SIP、LDAP、XMPP、Minecraft、Matrix 等需要动态定位服务的场景,Kubernetes 的无头 Service 也用 SRV 做成员发现。

基本信息

类型号SRV(TYPE 33)
规范RFC 2782
名字格式_service._proto.name,如 _sip._tcp.example.com
记录格式优先级 权重 端口 目标主机
优先级数值小者优先;不同优先级间先按优先级选
权重同一优先级内按权重随机分流

典型使用场景

  • SIP/VoIP 与统一通信:客户端靠 _sip._tcp 定位注册服务器与端口
  • LDAP/Kerberos 服务发现:域内客户端自动找到目录服务
  • 游戏或自研客户端:把集群入口与端口写进 DNS,便于扩容与迁移
  • Kubernetes 无头服务:用 SRV 查询拿到各 Pod 的地址与命名端口
  • 多实例负载:同优先级下用不同权重把流量按比例分摊

查询与配置示例

查询与配置示例
# 查询 SIP 服务的 SRV 记录
dig +short _sip._tcp.example.com SRV
# 10 60 5060 sip1.example.com.
# 10 40 5060 sip2.example.com.
# 用 dig 指定类型也可
nslookup -type=SRV _ldap._tcp.example.com
# 区文件写法(BIND 风格)
_ldap._tcp.example.com. 3600 IN SRV 0 100 389 ldap.example.com.

字段读法

字段含义要点
优先级越小越优先先选最小的优先级组
权重组内分流比例全为 0 时退化为均匀随机
端口服务监听端口需与目标主机实际监听一致
目标主机名(A/AAAA)不应指向 CNAME
目标为 .该域明确不提供此服务用于显式拒绝而非缺省
名字前缀下划线加服务与协议客户端按此规则拼查询名
权重 0 不等于禁用:RFC 2782 的选路算法在存在非零权重记录时,给权重 0 的记录留了很小但非零的命中概率;只有当同优先级下所有记录权重都为 0 时,才退化为均匀随机。想真正停用某台服务器,应从记录里删掉而不是把权重写 0。
SRV 的目标字段应是具备 A/AAAA 记录的主机名,不宜指向 CNAME;把目标写成 . 表示该域名明确不提供这项服务,这与「记录不存在」的含义不同。

易错点

  • 以为把权重设为 0 就停用了该服务器,实际仍可能被选中,正确做法是删除记录
  • SRV 目标写成 CNAME 或写成 IP 地址,违反 RFC 2782 的期望,部分客户端解析失败
  • 忘记服务名与协议的下划线前缀,直接查 example.com 拿不到 SRV 记录
  • 只改了 SRV 记录却没确认目标主机端口真的在监听,解析成功但连接失败
  • TTL 设置过长,服务迁移后客户端长时间仍按旧地址连接

数据来源与参考

  • RFC 2782 SRV 记录
  • RFC 6335(服务名与端口注册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌