频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
根据客户端IP地址,通过DNS解析合适的服务器IP
2019-01-31 09:55:40           
收藏   我要投稿

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

11localdns返回本机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服务器出问题的时候,慢总比不能访问强。

点击复制链接 与好友分享!回本站首页
上一篇:stdint.h介绍
下一篇:关于系统设计中的流程图
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站