dns - 执行 NAPTR 查询

标签 dns sip srv

这可能看起来是一个非常简单的问题,但我还没有在互联网上找到答案。

任何人都可以告诉我如何对 SIP 域执行 NAPTR 查询吗? (这主要用于 DNS 查找),或者任何对我来说也很棒的引用(这个存在于 rfc2915 上)。

也许可以使用终端或任何工具,而且我想使用 java 来完成它,所以如果任何代码片段都会非常有帮助。

最佳答案

您要查找的 RFC 是“Session Initiation Protocol (SIP): Locating SIP Servers ”。

以下是有关如何选择传输协议(protocol)和解析 SIP 服务器地址的简短摘要。

  1. 如果指定了传输参数,则优先,
  2. 如果没有传输参数并且目标是 IP 地址,则 sip 应使用 udp 和 sips tcp,
  3. 如果没有传输参数并且目标是具有显式端口的主机名,则 sip 应使用 udp 和 sips tcp,并且应使用 A 或 AAAA 记录 DNS 查找来解析主机(第 4.2 节),
  4. 如果没有传输协议(protocol),也没有明确的端口和目标是主机名,则客户端应执行 NAPTR 查找并利用服务 SIP+D2U、SIP+D2T、SIP+D2S、SIPS+D2T 和 SIPS+D2S 的记录,
  5. 如果找到 NAPTR 记录,请选择所需的传输并查找 SRV 记录,
  6. 如果未找到 NAPTR 记录,则查找所需协议(protocol) _sip._udp、_sip._tcp、_sips._tcp、_sip._tls 的 SRV 记录
  7. 如果未找到 SRV 记录,则查找 A 或 AAAA 记录。

在现实世界中,几乎没有 SIP 提供商使用 NAPTR 记录,可能有一半或更少的人使用 SRV 记录,其余的仅依赖 A 记录。在我自己的 SIP 软件中,我关闭了 NAPTR 查找,因为它只是浪费时间,而且如果 SIP 提供商费心设置 NAPTR 记录,他们很可能也会设置标准 SRV 记录。

事后看来,SIP 协议(protocol)设计者可能应该不考虑整个 SIP 服务器地址解析,而让实现者使用标准 IP 负载平衡和故障转移机制。由于 SIP 客户端并非全部支持 SRV 记录,根据我的经验,使用此类记录总比没有好,但对于故障转移或负载平衡来说并不是一个很好的解决方案。

如果您正在寻找带有 SIP NAPTR 记录的主机名,请尝试 columbia.edu 和 snom.com,我上次检查时它们都有一些记录。

关于dns - 执行 NAPTR 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180750/

相关文章:

java - 高性能 rtsp 服务器

objective-c - 使用 iOS SDK 解析 SRV 记录

dns - PowerDNS 和 CNAME 到外部域

azure - Azure 为记录提供的 IP 地址出现 404 错误

sip - 使用SIP和WebRTC的来电

python - 如何在 Python 中解析 SRV 记录?

PHP查询一条SRV记录

amazon-s3 - 顶级域上的 Cloudfront dist

heroku - 我在哪里可以找到我的 Heroku 应用程序的名称服务器?

ios - 虹吸调用不起作用 - pjsip