DNS相关

238 阅读4分钟

DNS(Domain Name System)是域名“系统”的英文缩写
使用UDP协议
他是联系ip与域名的分布式数据库

  • A: Address,域名指向的IP地址,一个域名可以有多个A记录。
  • NS:Name Server,保存下一级域名信息的服务器地址
  • MX:Mail eXchange,接受电子邮件的服务器地址
  • CNAME:Canonical Name,返回另一个域名,令当前查询域名挑去该域名,多个域名->服务器的映射。
  • PTR: Pointer Record,只用于ip地址查询域名

域名层次结构与域名服务器

根域名--顶级域名--二级域名(三级域名)

根域名为 . (root domain)
www.baidu.com 其实为最后一个点被删除的 www.baidu,com.
最后的点就为根域名

互联网 名称 数字 地址 分配 机构(ICANN)
这就是根域名服务器,记载着顶级域名与对应的托管商(或者理解为顶级域名分配服务器)

.com为顶级域名,顶级域名解析服务器会返回权限域名服务器>>baidu.com为二级域名,再次向权限域名服务器请求
当然baidu的域名服务器还可以解析多层级如tieba.baidu.com

递归DNS/localDNS/代理商DNS/路由器DNS

个人理解为转发代理的DNS层级,并且拥有缓存能力

用户解析DNS时,被这一层代理,寻找缓存与TTL,命中且TTL未过期则返回过期则向权威DNS获取结果并缓存返回。

智能DNS/DNS负载均衡/CDN

配置后递归缓存无法获取ip时,解析到网站的授权DNS层,如果配置有CDN服务,DNS 系统会最终将域名的解析权交给 CNAME 指向的 CDN 专用 DNS 服务器。CDN服务器会对所有可选服务ip选择并返回。

如网站的DNS域名解析器(授权DNS层)设置了CNAME,指向了www.web.51cdn.com ,请求指向了CDN网络中的智能DNS负载均衡系统;

例如:请求的源头是电信还是联通等,如果是电信则将解析的IP分流到电信对应的IP上,或者返回距离最近的服务器IP地址

  • 根据用户 IP 地址,判断哪一台服务器距用户最近;
  • 根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需内容;
  • 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。

解析过程

  1. 检查缓存,包括检查浏览器缓存,系统缓存如host文件,路由器缓存
  2. 缓存中没有或者TTL过期,则从前面查询过的递归DNS层的最后一层开始,迭代查询域名服务器。一般从网络代理商LDNS发出。
  3. 顺序向根域名服务器/顶级域名服务器/二级域名服务器(或者授权域名服务器)发送解析请求拿到ip,这些服务器会根据请求的域名找到对应的下级域,返回这个域的服务器。
  4. 递归层级的返回,缓存,给应用。

图片

存在的问题

中间人的劫持
通过奇怪方法劫持递归解析中的某一个环节,修改解析后的地址,从而使得访问到错误的服务器。
缓存LLT之前改变
转发解析
可以理解为你的迭代查询的某一部偷懒又丢给了其他人。 比如移动给你解析自己不干活去问电信的DNS服务器又加一层迭代。影响响应时间。

HTTPDNS

HTTPDNS使用HTTP与DNS服务器交互,代替传统的基于UDP的DNS协议,域名解析请求直接发送到HTTPDNS服务端,从而绕过运营商的Local DNS

防止域名劫持

由于 HttpDns 是通过 IP 直接请求 HTTP 获取服务器 A 记录地址,不存在向本地运营商询问 domain 解析过程,所以从根本避免了劫持问题。

精准调度

HTTPDNS能够直接获取到用户的IP地址,从而实现精确定位与导流(CDN思路)

用户连接失败率下降

通过算法找寻最空闲最合适的服务器,对服务器进行推荐排序。