选择网络中最近的节点



网络等待时间会对与网络交互的应用程序或服务的性能产生重大影响。 延迟越短,性能越高。 从常规站点开始并以数据库或网络存储结尾的任何网络服务都是如此。

域名系统(DNS)是一个很好的例子。 DNS本质上是一个分布式系统,其根节点分散在整个星球上。 要仅访问任何站点,您首先需要获取其IP地址。

我不会描述通过域区域的“树”进行递归传递的整个过程,但我将自己限制在以下事实:要将域转换为IP地址,我们需要一个DNS解析器来为我们完成所有这些工作。

那么在哪里获取解析器的DNS地址呢?

  1. ISP提供其DNS解析器的地址。
  2. 在Internet上找到公共解析器的地址。
  3. 自己动手或在家中使用内置路由器。

这些选项中的任何一个都可以让您在万维网上畅游无阻,但是如果您需要将大量域转换为IP,则应该更加谨慎地选择解析器。

正如我已经写过的,除了Internet提供商的解析程序外,还有许多公共地址,例如,您可以在此处找到此列表。 其中一些可能更可取,因为它们比默认解析器具有更好的网络连接性。

当列表很小时,您可以轻松地用手“ ping”它并比较延迟的时间,但是即使您选择了上面提到的列表,本课也已经变得不愉快了。

因此,为了完成此任务,我充斥着冒名顶替综合症,在Go上草拟了我的想法的概念证明,称为“ 封闭者”

例如,我不会检查整个解析器列表,而是将自己限制在最受欢迎的解析器列表中。

$ get-closer ping -f dnsresolver.txt -b=0 --count=10 Closest hosts: 1.0.0.1 [3.4582ms] 8.8.8.8 [6.7545ms] 1.1.1.1 [12.6773ms] 8.8.4.4 [16.6361ms] 9.9.9.9 [40.0525ms] 

有一次,当我为自己选择一个解析器时,我只能检查主要地址(1.1.1.1、8.8.8.8、9.9.9.9),因为它们是如此漂亮,以及从保留的丑陋地址中可以获得什么。

但是由于有一种比较延迟的自动方法,为什么不扩大清单...

如测试所示,“备份” Cloudflare地址更适合我,因为它被卡在spb-ix中,而与msk-ix相比,它更贴近我,后者被美丽的1.1.1.1卡住了。

如您所见,两者之间的差异非常重要,因为即使最快的光线也无法在不到10毫秒的时间内从圣彼得堡传播到莫斯科。

除了简单的ping操作外,PoC还具有使用其他协议(例如http和tcp)比较延迟的能力,以及通过特定解析器将域转换为IP所需的时间。

该计划的任务是使用traceroute比较主机之间的节点数,以便更容易找到路径较短的主机。

该代码是原始代码,没有足够多的检查堆,但是在干净数据上可以很好地工作。 如果有任何反馈,我将不胜感激,如果在github上加星号,如果有人喜欢该项目的想法,欢迎与我们分享。

Source: https://habr.com/ru/post/zh-CN451866/


All Articles