和DNS HTTPDNS。
域名服务器(Domain Name Server)
当用户与互联网中的主机通信时,他必须知道对方的IP地址。然而,用户很难记住长度为32位的IP二进制主机地址,即使是点分十进制IP地址也不容易记住。为了方便记忆,引入了域名系统,用来把人用的机器名转换成IP地址。
域名和ip地址的映射关系记录在DNS服务器中。
域名解析的过程
从主机到本地域名服务器的查询是递归的。如果本地域名服务器无法解析域名的IP地址,本地域名服务器将向作为DNS客户端的根域名服务器发送查询请求;
从本地域名服务器到根域名服务器的查询采用迭代查询。根域名服务器收到本地域名服务器的迭代查询请求时,要么给出要查询的IP地址,要么告诉本地域名服务器:“下一步应该查询哪个域名服务器?”
首先,我们来看一些重要的概念。
根名称服务器
根域名服务器是最高最重要的域名服务器。根域名服务器知道所有顶级域名服务器的域名和IP地址。本地域名服务器应能解析互联网上的任何域名。如果通过法律解决,应先咨询根域名服务器。
顶级域名服务器
这些域名服务器负责管理在这个顶级域名服务器上注册的所有二级域名。当收到DNS查询请求时,会给出相应的答案。
域名服务器
负责一个区域的域名服务器,当某个特权域名服务器无法给出最终的查询答案时,会告诉请求的DNS客户端下一步要找哪个特权域名服务器。
本地域名服务器
当主机发出DNS查询时,它首先被发送到本地域名服务器。每个互联网提供商ISP或大学都可以拥有自己的本地域名服务器。
如果是通过DHCP配置的,本地DNS是由您的网络服务提供商自动分配的,如电信、移动等。,它通常位于网络服务提供商的机房中。
我们来看看查询步骤。
1.主机从本地域名服务器查询www.tsinghua.edu.cn的IP地址。这一步是递归查询;
2.本地域名服务器会在自己的服务器中查找对应的域名映射关系。如果它直接找到IP地址,如果没有,它会询问根域名服务器;
3.根域名服务器会把下次要查询的顶级域名服务器的IP地址告诉本地域名服务器;
4.本地服务器继续向顶级域名服务器发起查询请求;
5.如果顶级域名服务器找到了,就会返回结果。如果没有,它将把授权域名服务器的IP地址告诉本地域名服务器,以便下次查询;
6.本地服务器继续向权威域名服务器发起查询请求;
7.特权域名服务器会告诉本地域名服务器被查询主机的IP地址。当某个特权域名服务器无法给出最终的查询答案时,它会告诉发出请求的DNS客户端下一步要找哪个特权域名服务器;
8.本地域名服务器最终将查询结果返回给主机,主机可以与目标建立连接。
传统域名系统存在的问题
1.域名缓存问题
缓存将在本地进行,因此您不必为每个请求都请求权威的DNS服务器。再次访问时,可以直接获取本地缓存。
由于有缓存,所以会出现缓存同步不及时的情况,以至于一些请求会被发送到旧页面。
即使是本地缓存也常常会使全局负载均衡失败,因为缓存中的地址不一定是上次缓存时离客户最近的地方。如果这个地址还给客户,肯定要走很长的路。
2.域名转发问题
域名转发后,域名查询可能会跨运营商。
栗子如:
如果你是运营商A的客户,访问你自己运营商的DNS服务器。如果运营商A去权威DNS服务器查询,权威DNS服务器会返回一个部署在运营商A的网站地址,这样访问同一个运营商会快很多。
但是运营商A比较懒,把解析请求转发给运营商B,如果运营商B去权威DNS服务器查询,权威服务器会误认为你是运营商B的,所以在运营商B返回你的网址,结果客户每次访问都要跨运营商,速度会很慢。
3.导出NAT问题
我们知道,网络退出的时候,很多机房都会配置NAT,也就是网络地址转换,这样所有从这个网关出去的数据包都会被替换成新的IP地址。NAT不仅可以解决IP地址不足的问题,还可以有效避免来自网络外部的攻击,隐藏和保护网络内部的计算机。当然,当请求被返回时,IP地址在这个网关被转换回来,所以访问没有问题。
但是一旦转换了网络地址,权威DNS服务器无法通过这个地址判断客户来自哪个运营商,很有可能会因为转换后的地址而误判运营商,导致跨运营商访问。
4.DNS域名更新问题
本地DNS服务器由不同地区和运营商独立部署。域名解析缓存的实现策略也有差异,有的比较懒,忽略域名解析结果的TTL时间限制。当权威DNS服务器解析更改时,解析结果在很长一段时间内在整个网络中生效。但有时候,在DNS切换中,场景对有效时间的要求更高。
例如,当部署两个机房时,DNS通常用于跨机房的负载平衡和灾难恢复。当一个机房出现问题,需要修改权威DNS,将域名指向新的IP地址,但如果更新太慢,很多用户会出现访问异常。
5.分析延迟问题。
DNS查询过程需要递归遍历多个DNS服务器才能得到最终的解析结果,这会带来一定的时间延迟,甚至解析超时。
6.航母劫持
本地运营商可能会劫持和屏蔽一些域名。
DNS劫持是指劫持DNS服务器,通过某种手段获取某个域名的解析记录的控制权,然后修改该域名的解析结果,导致对该域名的访问由原来的IP地址转移到修改后的指定IP地址。导致特定网址无法访问或者是假网址,从而达到窃取数据或者破坏原有正常服务的目的。
HTTPDNS
因为传统的DNS存在上述的一些问题,这里介绍HTTPDNS。
实际上,HTTPNDS是指代替传统的DNS解析,基于HTTP协议构建自己的DNS服务器集群,分布在多个位置和运营商。当客户端需要DNS解析时,直接通过HTTP协议请求这个服务器集群获取最近的地址。
同时由于默认的域名解析是DNS,使用HTTPDNS需要绕过默认的DNS路径,所以使用HTTPDNS的大多是手机应用,需要在手机中嵌入支持HTTPDNS的客户端SDK。
HTTPDNS的优势
1.跳过本地DNS以防止本地DNS劫持;
2.通过IP直接访问降低了平均访问延迟;
3.服务器算法筛选最佳节点IP,提高请求成功率;
4.赶紧换IP。
HTTPDNS的适用场景
1.App防止恶意劫持;
2.要求高访问速度的应用;
3.应用和视频加速服务,配合CDN,通过DNS服务器返回最佳节点,提高访问效率;
4.提供更灵活的流量调度能力。
pdtns的工作模式
1.在客户端的SDK中动态请求服务器,获取HTTPDNS服务器的IP列表,并缓存在本地。随着域名的不断解析,SDK会在本地缓存DNS域名解析的结果;
2.当手机应用要访问一个地址时,首先检查本地是否有缓存,如果有就直接返回,否则就请求HTTPDNS服务器;
2.请求HTTPDNS的服务器都将提供api接口。选择相应的接口发送接口请求,会返回一个要访问网站的IP列表;
3.客户端收到返回的IP列表后,可以选择一个IP,建立连接,发起正常的访问操作;
4.如果客户端对HttpDNS服务器的请求失败,启用替代方案,通过正常的DNS解析流程,向本地DNS发起请求;
5.LocalDNS执行递归查询;
6.最后返回DNS结果;
7.客户端获得最佳IP后,建立连接并启动正常的访问操作。
摘要
1.传统DNS存在解析慢、更新不及时等诸多问题。由于缓存、转发和NAT问题,客户端会误解其位置和运营商,从而影响流量调度。
2.HTTPDNS通过客户端SDK和服务器端直接调用解析DNS,绕开了传统DNS的这些缺点,实现了智能调度。
资料来源:https://www.cnblogs.com/ricklz/p/16627380.html