httpdns是什么

httpdns是面向无线端的域名解析服务,与传统走UDP协议的DNS不同,httpdns基于HTTP协议。

PC端的服务一般通过浏览器访问,对于域名解析,浏览器只会走标准DNS,我们没法干预。无线端的可操作空间比较大,APP自己构造并发送HTTP请求,能够做精细化的控制,其中就包括域名解析。

使用httpdns解析域名的基本流程如下:

  1. 客户端向httpdns服务端发送普通的HTTP请求,请求中携带需要解析的域名。
  2. httpdns服务端解析出域名对应的ip地址,将解析结果封装为JSON格式,返回给客户端。

和传统DNS一样,httpdns的解析结果中包含TTL,客户端可以根据TTL将结果缓存一段时间。

httpdns服务包括服务端和客户端SDK,SDK有Android版和iOS版。当前接入httpdns服务的主要是集团内的APP,包括手机淘宝、天猫魔盒、支付宝、云OS、虾米音乐、阿里师生和淘伴等。

httpdns的优势

相比于传统DNS,httpdns的优势主要有下面几点:

  1. 防止域名劫持
    传统DNS由Local DNS解析域名,不同运营商的Local DNS有不同的策略,某些Local DNS可能会劫持特定的域名。采用httpdns能够绕过Local DNS,避免被劫持;另外,httpdns的解析结果包含HMAC校验,也能够防止解析结果被中间网络设备窜改。
  2. 更精准的调度
    对域名解析而言,尤其是CDN域名,解析得到的IP应该更靠近客户端的地区和运营商,这样才能有更快的网络访问速度。然而,由于运营商策略的多样性,其推送的Local DNS可能和客户端不在同一个地区,这时得到的解析结果可能不是最优的。httpdns能够得到客户端的出口网关IP,从而能够更准确地判断客户端的地区和运营商,得到更精准的解析结果。
  3. 更小的解析延迟和波动
    在2G/3G这种移动网络下,DNS解析的延迟和波动都比较大。就单次解析请求而言,httpdns不会比传统的DNS更快,但通过httpdns客户端SDK的配合,总体而言,能够显著降低解析延迟和波动。httpdns客户端SDK有几个特性:预解析、多域名解析、TTL缓存和异步请求。
  4. 额外的域名相关信息
    传统DNS的解析结果只有ip,httpdns的解析结果采用JSON格式,除了ip外,还支持其它域名相关的信息,比如端口、spdy协议等。利用这些额外的信息,APP可以启用或停止某个功能,甚至利用httpdns来做灰度发布,通过httpdns控制灰度的比例。

httpdns如何解析一个域名

httpdns服务端并没有“域名和IP对应关系”的数据库,它做了一次协议转换,从HTTP转换为DNS,将域名解析请求转发给后端DNS。

为了得到更精准的解析结果,后端DNS需要拿到客户端的来源IP,而不是httpdns服务器的IP。如何将客户端IP透传给后端DNS呢?httpdns使用了Google提出的DNS扩展选项edns-client-subnet,通过该选项,可以将客户端IP放在DNS报文中传给后端DNS,只要后端DNS支持该选项,它就会从DNS报文中提取客户端IP。httpdns对接的后端DNS都支持edns-client-sub选项。

httpdns服务端部署在cm3和cm10的两个集群上,总体架构图如上。

具体而言,httpdns服务端的处理过程如下:

  1. 接收客户端发来的HTTP请求,请求中携带域名列表。
  2. 解析请求的内容,检查安全校验值,执行白名单过滤,得到待解析的域名列表。
  3. 针对域名列表中的每一个域名,构造DNS请求报文,发往对应的后端DNS。
  4. 等待并收集DNS响应报文,解析报文得到IP地址,最后,每个域名都有了解析结果或已经超时。
  5. 对每个域名,将解析得到的IP,以及在httpdns上配置的其它信息,添加到JSON报文中。
  6. 根据JSON报文计算HMAC校验值,将校验值和JSON报文发送给客户端。

对于不同类型的域名,httpdns会转给不同的后端DNS。目前,httpdns共有下面3个后端DNS:

  • Pharos:权威DNS,对应淘宝CDN域名,例如

gw.alicdn.com

  • ADNS:权威DNS,对应CNAME到

*.gds.taobao.com

  • 的淘宝主站域名,例如

api.m.taobao.com

  • AliDNS:递归DNS,阿里公共DNS,对应所有其它的域名,例如

mcgw.alipay.com

www.baidu.com