什么是计算机网络(计算机网络)?
admin
2023-09-09 08:45:16

DNS和HTTPDNS

DNS

在互联网中与主机通信时,用户必须知道对方的IP地址。但是用户很难记住长达32位的IP二进制主机地址,即使是点分十进制的IP地址也不容易记住。为了方便记忆,引入域名系统,方便把人用的机器名转换成IP地址。

域名和ip地址的映射关系记录在DNS服务器中。

域名解析的过程

主机使用递归查询来查询本地域名服务器。如果本地域名服务器无法解析该域名的IP地址,则本地域名服务器向作为DNS客户端的根域名服务器发送查询请求;从本地域名服务器到根域名服务器的查询采用迭代查询。根域名服务器收到本地域名服务器的迭代查询请求时,要么给出要查询的IP地址,要么告诉本地域名服务器:& quot接下来应该查询哪个域名服务器& quot。这里先来看几个重要概念。

根域名服务器

根域名服务器是最高级别,也是最重要的域名服务器。根域名服务器知道所有顶级域名服务器的域名和IP地址。本地域名服务器应能解析互联网上的任何域名。如果通过法律解决,首先向根域名服务器求助。

顶级域名服务器

这些域名服务器负责管理所有在顶级域名服务器注册的二级域名。当收到DNS查询请求时,会给出相应的答案(可能是最终结果,也可能是接下来要搜索的域名服务器的IP地址)。

权限域名服务器

负责一个区的域名服务器。当有权限的域名服务器无法给出最终的查询答案时,它会告诉请求的DNS客户端下一步要找哪个域名服务器。

本地域名服务器

当主机发送DNS查询时,它首先被发送到本地域名服务器。每个互联网提供商ISP或大学都可以拥有自己的本地域名服务器。

如果是由DHCP配置的,本地DNS是由您的互联网服务提供商(ISP)自动分配的,如电信、移动等。它通常位于互联网服务提供商的机房内。

让我们看一下查询的步骤

1.主机从本地域名服务器查询www.tsinghua.edu.cn的IP地址。这一步是递归查询;

2.本地域名服务器会在自己的服务器中找到对应的域名映射关系。如果找到了,它会直接返回IP地址,如果没有,它会询问根域名服务器。

3.根域名服务器会把下次要查询的顶级域名服务器的IP地址告诉本地域名服务器;

4.本地服务器继续向顶级域名服务器发起查询请求;

5.如果顶级域名服务器找到了,就会返回结果。如果没有找到,它将告诉本地域名服务器正确的域名服务器的IP地址,用于下一次查询。

6.本地服务器继续向权限域名服务器发起查询请求;

7.权威域名服务器会告诉本地域名服务器被查询主机的IP地址。当一个权威域名服务器无法给出最终的查询答案时,它会告诉发出请求的DNS客户端接下来应该找到哪个权威域名服务器。

8.本地域名服务器最终将查询结果返回给主机,主机可以与目标建立连接。

传统DNS存在的问题

1、域名缓存问题

会做一个本地缓存,让你不用每次请求都去请求权威的DNS服务器,再次访问的时候可以直接获取本地缓存。

由于有缓存,所以会出现缓存同步不及时的情况,所以会有一些请求发送到旧页面。

然后是本地缓存,这往往会使全局负载均衡失败,因为缓存中的地址不一定是这次访问中离客户最近的地方。如果这个地址还给客户,肯定会走弯路。

2、域名转发问题

域名转发后,域名查询可能会跨运营商。

栗子如:

如果你是运营商A的客户,访问自己运营商的DNS服务器。如果运营商A去权威DNS服务器查询,权威DNS服务器会知道你属于运营商A,并返回到部署在运营商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、跳过LocalDNS,防止本地DNS劫持;

2、直接通过IP访问,平均访问延迟下降;

3、服务器算法筛选最佳节点IP,提升请求成功率;

4、快速更换IP(不受TTL的限制)。

HTTPDNS的适用场景

1、App防止恶意劫持;

2、对访问速度要求高的应用;

3、应用、视频加速服务,配合CDN,通过DNS服务器返回最佳节点,提高访问效率;

4、提供更灵活的流量调度能力。

HTTPDNS的工作模式

1、在客户端的SDK里动态请求服务端,获取HTTPDNS服务器的IP列表,缓存到本地。随着不断地解析域名,SDK也会在本地缓存DNS域名解析的结果;

2、当手机应用要访问一个地址的时候,首先看是否有本地的缓存,如果有就直接返回,没有就请求HTTPDNS服务器;

2、请求HTTPDNS的服务器,HTTPDNS的服务器都会提供api接口,选择对应的接口发出接口请求,会返回一个要访问的网站的IP列表;

3、客户端,收到返回的IP列表,就能选择IP,建立连接,发起正常访问操作;

4、若客户端向HttpDNS服务器请求失败,则启用备选,走正常DNS解析过程,向LocalDNS发起请求;

5、LocalDNS进行递归查询;

6、最终返回DNS结果;

7、客户端拿到最优IP后,建立连接,发起正常访问操作。

总结

1、传统的DNS有很多问题,例如解析慢、更新不及时。因为缓存、转发、NAT问题导致客户端误会自己所在的位置和运营商,从而影响流量的调度。

2、HTTPDNS通过客户端SDK和服务端,通过HTTP直接调用解析DNS的方式,绕过了传统DNS的这些缺点,实现了智能的调度。

参考

【极客时间-趣谈网络协议】https://time.geekbang.org/column/intro/100007101

【计算机网络第八版】https://www.bilibili.com/video/BV1WP4y1j7JU?p=1

【计算机网络学习笔记】https://github.com/boilingfrog/Go-POINT/tree/master/tcp

【全面理解DNS及HTTPDNS】https://juejin.cn/post/6844903987796246542

作者:liz

出处:https://boilingfrog.github.io/2022/08/26/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-DNS%E5%92%8CHTTPDNS

相关内容

热门资讯

金花创建房间/微信金花房卡怎么... 1.微信渠道:(荣耀联盟)大厅介绍:咨询房/卡添加微信:88355042 2.微信游戏中心:打开微...
金花房间卡/金花房卡如何购买/... 金花房间卡/金花房卡如何购买/新超圣金花房卡正版如何购买新超圣是一款非常受欢迎的游戏,咨询房/卡添加...
牛牛创建房间/金花房卡批发/神... 微信游戏中心:神牛大厅房卡在哪里买打开微信,添加客服【88355042】,进入游戏中心或相关小程序,...
链接牛牛/牛牛房卡游戏代理/鸿... 鸿运大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
科技实测!牛牛房卡怎么获得/乐... 微信游戏中心:乐酷大厅房卡在哪里买打开微信,添加客服【88355042】,进入游戏中心或相关小程序,...