DNS基本概念:
DNS是属于应用层的协议,因为网络通信是要采用IP地址来进行通信的,但人类对于这些IP地址不容易记住。于是乎就使用方便记住的域名来进行访问网站。而DNS就是进行域名与IP地址转换的。可以称为网络世界的地址薄。
域名系统的概念:
域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
域名的分配和管理:
域名由因特网域名与地址管理机构(ICANN,Internet Corporation for Assigned Names and Numbers)管理,这是为承担域名系统管理、IP地址分配、协议参数配置,以及主服务器系统管理等职能而设立的非盈利机构。
顶级域名:
1 国家和地区顶级域名:中国(cn) 日本(jp)
2 国际顶级域名: 工商企业的 .com,表示网络提供商的 .net,表示非盈利组织的 .org等
3 新顶级域名(New gTLD): 用的.xyz、代表“高端”的.top、代表“红色”的.red、代表“人”的.men等一千多种
二级域名:域名的一条记录,类似与www.alidiedie.com是顶级域名,*.alidiedie.com的域名全部称作是alidiedie.com的二级域名
类推下去可以获得三级域名,四级域名。。。。
DNS解析流程:
1 假设你从浏览器访问www.baidu.com的网站,首先DNS会从本地的HOSTS文件看是否缓存里该映射,如果有,则直接返回对应的IP地址。
2 如果第一步本地的HOSTS文件没有缓存,则访问本地DNS(全世界只有13台根域名服务器好像是错误的)本地DNS服务器,如果你在网络连接里面设置了固定的DNS服务器(如google的8.8.8.8)则为该设置的服务器地址,如果自动分配,则是ISP运营商分配的地址。如果设置了转发模式则向上一级DNS服务器请求,如果没有则继续往下走
3 继续从根域名服务器当中找到一台请求,然后根域名服务器返回了负责管理该(这里是.com)顶级域名的权威服务器.
4 请求权威服务器,该权威服务器返回对应域名的服务器IP(baidu.com)
5 请求(baidu.com)的服务器,返回对应域名的IP地址,但百度的有关cname,处理有点不同
6 向根域名服务器请求cname
7 向.com权威服务器请求cname
8 向shifen.com请求
9 向a.shifen.com域请求
10 拿到www.a.shifen.com的IP
11 localdns返回本机www.baidu.com cname www.a.shifen.com 以及 www.a.shifen.com的IP
DNS存在的问题:
1 域名缓存问题:因为有缓存,并不会每次都从权威服务器获取IP地址,直接从本地返回了,那么假设服务器换地址了,但是缓存没更新,访问就出错了。运营商因为节省成本会缓存静态资源,那么当你也没更新的时候,很多老用户因为缓存的关系,还是继续访问的老的页面。本地的缓存也可能会导致全局负载均衡失效,比如我先在深圳访问了某个网站,但我跑到上海的时候,因为本地缓存的问题,返回的可能还是广东的服务器IP地址,就不能访问离客户最近的服务器地址。
2 域名转发问题:假设我是A运营商的客户,那么访问网站的时候,向访问A运营商的DNS服务器发起请求,如果A去权威DNS查询的话,权威服务器会返回离A运营商近的IP地址,那么客户访问就快了。但是如果A运营商只是转发,把请求转发给你B,那么权威服务器就会返回离B最近的服务器地址,客户访问就慢了。
3 出口NAT问题:很多机房会配置网络地址转换,对应访问来说是没有问题的,但是由于地址转换了,权威服务器不能判断是哪个运营商,误判运营商,就会导致跨运营商的访问。
4 域名更新问题:权威DNS服务器解析变更的时候,由于各个地区,各个运营商是独立部署服务器的,解析结果在全网生效的时间非常长,但是比如 双机房部署的时候,跨机房的负载均衡和容灾多使用DNS来做,这就出问题了。
5 解析延迟问题:DNS查询是递归查询,可能需要遍历多个DNS服务器,会造成很大的延迟问题。
传统的DNS由于这些问题,所以出现了采用HTTP请求获得IP地址的方式替换传统的基于UDP和TCP的DNS查询,一条HTTP请求就将IP地址请求下来。叫做HTTPDNS。
HTTPDNS的服务器一般采用集群分布式部署,因为必须要做到高可用。在具体实现的时候因为要加快访问速度,要设计服务器和客户端的缓存策略。因为解析是全部掌握在自己的手上,可以根据自己的业务需求设计缓存策略(过期时间,更新时间)。同时,手机客户端是知道手机现在是在哪个运营商,哪个地址的,所以我们可以根据客户端的信息,在HTTPDNS服务器上通过采集到的信息,考虑错误率,请求时间,服务器压力,网络状况等多个情况,综合考虑选择一个客户访问最快的节点返回给客户端。客户端得到该IP地址后就可以进行访问了。当然传统的DNS还是要保留的,当自己的HTTPDNS服务器出问题的时候,慢总比不能访问强。