为什么使用谷歌的公共DNS 8.8.8.8 反而会让你网速变慢 您所在的位置:网站首页 国内能用谷歌dns吗 为什么使用谷歌的公共DNS 8.8.8.8 反而会让你网速变慢

为什么使用谷歌的公共DNS 8.8.8.8 反而会让你网速变慢

2023-06-04 04:49| 来源: 网络整理| 查看: 265

有一个外部合作商,有次问我们,为什么我们的接口会概率性超时?但是这个接口是供很多外部合作商使用的,其他人都未反馈这个问题,只有他们反馈了,所以觉得很奇怪。

后面我就让他们给我提供请求的参数,根据这些参数也没有搜索到对应的请求记录,想想应该是请求并没有到达我们的业务机,可能在公共接入一层,甚至都没到公共接入这一层,这一下子问题就不好查了。

后来就让他们抓包,把超时的请求的TCP都抓取下来。我用wireshark打开之后,看到超时都是TCP Retransmission 超时重传引起的,然后发现这些请求都跑到了我们公司的香港机房去了,也难怪会超时,毕竟我们的香港机房并没有对国内用户做优化。

然后我自己用curl把请求指向这个香港的服务器,然后用wireshark抓包,确实会时不时出现超时重传的情况。至此可以确定引起超时的原因是因为请求到了香港机房。

于是就有两个疑惑了,为什么请求会到了香港机房?为什么会概率性出现而不是必现?

后来对方的运维根据这个线索,终于意识到是因为他们服务器使用的DNS中有谷歌的公共DNS,从而导致了请求到了我们的香港机房去了。

当时我就很疑惑,为什么配置了8.8.8.8会导致请求到了我们的香港机房?顺着这个疑惑,我去找了好多文章,总算是大概搞明白了一点了。

归结起来就是三个疑问:

为什么使用谷歌的DNS会导致请求到了我们的海外机房是根据什么方式和策略让不同地区的人请求到不同的机房去的概率性出现是因为DNS的选择策略,那DNS的选择策略是怎么样的?

在我们国内,由于多个网络运营商,还需要做到让电信的用户到电信机房,联通的用户到联通机房,移动的用户到移动机房,选择运营商又是怎么做到的呢?

最后搜索到了关于智能DNS的知识,大概如下:

实际上就是智能DNS是根据来源请求的IP地址,来判断所属地区和运营商,然后分配到离用户最近,且运营商一致的机房去。也就是我司这边的域名解析配置了一个智能的DNS,它会根据用户请求的来源IP把用户分配到最佳的机房节点去。

从DNS请求中是获取不到用户的来源IP地址的,只能通过用户所使用的DNS的IP地址,来判断用户所属的地区和运营商,然后分配到最佳的节点去。

不过谷歌也开发了一种DNS的扩展协议,EDNS Client Subnet, 可以在DNS请求中携带上用户的真实IP。但是这个要求用户使用的DNS服务支持这个协议,也要求我司使用的DNS服务支持这个协议,才能从中得到用户的真实IP,所以这个运用并不广泛,国内绝大多少网站都是通过用户的DNS服务的IP来判断用户的地理位置和运营商的。

大多数人使用网络的时候,都默认使用运营商提供的DNS服务器,这些服务器一则与用户地理位置接近,二则运营商也一样。所以根据DNS服务器的IP来判断用户的地理位置和运营商是可行的。

所以使用谷歌的DNS的时候,由于谷歌的8.8.8.8并没有在国内部署,因此都被我司的智能DNS判定为海外用户,然后指向到海外的机房去了。

然后这里就涉及到另一个问题了,这些公共的DNS只有一个IP,难道全球就只部署了一台吗?那114.114.114.114这个电信的公共DNS,为什么其他运营商的网络用起来也没什么问题呢?

实际上公共DNS的部署采取的是任播(Anycast)技术,确切的说是BGP 任播技术,多个主机使用同一个IP地址(该地址即这一组主机的共享单播地址)的一种技术,当发送方发送报文给这个共享单播地址时,报文会根据路由协议路由到这一组主机中离发送方最近的一台。类似于下图:

不同地区的用户访问这个公共DNS的时候,实际访问的服务器是不一样的。另外,作为任播的IP,是只能被动接收请求,而不能主动发起请求的,毕竟主动发起的话,接收方的回复是不知道返回给哪一台服务器好的。

新的问题就来了,比如114.114.114.114是电信的公共DNS,如果一个移动的用户使用这个DNS,智能DNS是如何分辨出这个用户是移动的而不是电信的呢?就如上面所说的,任播的IP是不能主动发起请求的,公共DNS的服务器为了能够主动发起请求,他们本身还必须配置另一个单播IP,主动发起的请求都使用这个IP。这样子的话,智能DNS就能够分辨运营商了。

另外,关于多个DNS服务器的选择策略,目前采取的是平滑往返时间,即SRTT策略。

第一次所有DNS服务器都会随机给一个初始值,然后取最小的那个发起查询请求,根据本次的请求时间,把当前这个DNS的SRTT做一个重算,然后其他的DNS也要有一定量的衰减。

第二次又选择最小SRTT发起请求,如此循环,大约半小时重置一次,重新随机分配一个初始值。

所以谷歌的公共DNS因为SRTT比较大,导致它被选择的概率是比较小的,也就导致了友商出现请求超时的次数并不是特别多



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有