DNS&&HTTPDNS

DNS 是什么?

域名系统即 DNS 就相当于是数字电话簿,负责将URL解析成对应的IP地址。

公共DNS

我们很难在物理上提升网络传输速度,但我们可以减少一些DNS服务器物理距离。

谷歌公共 DNS

是最流行的 DNS 服务器之一,使用 8.8.8.8 和 8.8.4.4 这两个 IP 地址。这些被称为任播地址,在世界各地有多个服务器响应来自这些地址的请求。

Cloudflare公共DNS

Cloudflare 声称它将是“互联网上速度最快且高度关注隐私保护的消费级 DNS 服务”
并承诺永远不会将查询 IP 地址写入磁盘,并在每 24 小时内就清除所有 DNS 查询日志一次。以保护隐私。

域名

域名是全球唯一的,需要通过专门的域名注册商才可以申请注册。为了组织全球互联网中的众多计算机,域名同样用点来分开,形成一个分层的结构。而每个被点分割开的字符串,就构成了域名中的一个层级,并且位置越靠后,层级越高。

以time.geekbang.org 为例,来理解域名的含义。
这个字符串中,最后面的 org 是顶级域名,中间的 geekbang 是二级域名,而最左边的 time 则是三级域名。
所有域名都以点作为后缀,也可以理解为,在域名解析的过程中,所有域名都以点结束。



DNS解析

几种DNS服务器:

  1. 本地 DNS服务器:
    如果是通过 DHCP 配置,本地 DNS 由你的网络服务商(ISP),如电信、移动等自动分配,它通常就在你网络服务商的某个机房
  2. 根 DNS 服务器 :
    持有所有顶级域(.cn/.com/.org.....)DNS服务器地址,并返回对应服务器
  3. 顶级域 DNS 服务器:
    持有所有下属权威域(dex.org/geekbang.org.....)DNS服务器地址,并返回对应服务器
  4. 权威 DNS 服务器:
    持有所属域名(www.geekbang.org/time.geekbang.org....)主机ip,并返回对应ip地址

以查询time.geekbang.org对应ip地址为例:


dig +trace +nodnssec

也可以用更加详细的命令,查看整个流程:

dig +trace +nodnssec 域名

本地host解析

可以把主机名和 IP 地址的映射关系,写入本机的 /etc/hosts 文件中

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain
::1         localhost6 localhost6.localdomain6
192.168.0.100 domain.com

Host文件属于一个历史遗留问题。早年间在ARPANET 时期,是没有DNS的,整个互联网上只有数百台主机,那时就是通过hosts 文件来解析域名的。后来Internet 爆发增长,已经不可能再将所有的主机名与ip的对应关系写进hosts 文件里面了,那样速度太难。后来就出现了DNS。DNS是一个分布式的数据库。同时原来的hosts 文件也保留了下来 . 当主机进行dns查询的时候,是先查找hosts文件,如果在hosts文件中找不到对应关系,再询问dns服务器的。

① 适用于小型公司局域网或本地的域名解析工作。
② 当 DNS 服务器解析出错的时候,可以通过临时修改 HOSTS 文件来解决域名解析问题。
③ 通过修改 HOSTS 文件,添加相应的记录,可以达到屏蔽广告的效果。
④ 早期的时候可以通过修改 HOSTS 文件,上 google 网站。现在该方法应该是无效的了。

内网DNS解析

搭建自定义的 DNS 服务器,专门用来解析内网中的域名。而内网 DNS 服务器,一般还会设置一个或多个上游 DNS 服务器,用来解析外网的域名


DNS的传输

DNS 协议在 TCP/IP 栈中属于应用层,不过实际传输还是基于 UDP 或者 TCP 协议(UDP 居多) ,并且域名服务器一般监听在端口 53 上。

为什么DNS使用UDP而不是TCP?

由于TCP三次握手的规则限制,采用UDP传输,DNS域名解析时间更小。
再加上多级域服务器的递归查询,三次握手的耗时会被更加放大。


传统 DNS 存在的问题

  1. 域名缓存问题
    不是每一个请求,它都会去访问权威 DNS 服务器,而是访问过一次就把结果缓存到自己本地用于之后的查询。
    一旦想要访问的ip地址发生变化(负载均衡,页面更新),可能就无法返回最新、最高效的ip地址了

  2. 域名转发问题
    比如NAT,会影响权威服务器对于请求源的地址判断,可能返回一个跨运营商的ip地址。
    比如跨运营商转发,用户就会得到一个不属于自己运营商的ip地址。

  3. 域名更新
    本地 DNS 服务器是由不同地区、不同运营商独立部署的。对域名解析缓存的处理上,实现策略也有区别,有快有慢。
    在负载均衡和触发容灾时,权威 DNS更新速度决定有多少用户会出现访问异常。

  4. 解析延迟问题
    DNS 的查询过程需要递归遍历多个 DNS 服务器,才能获得最终的解析结果。这会带来一定的时延,甚至会解析超时。


HttpDNS

HttpDNS不走传统的 DNS 解析,而是服务商(比如阿里云)搭建基于 HTTP 协议的 DNS 服务器集群,分布在多个地点和多个运营商。当客户端需要 DNS 解析的时候,直接通过 HTTP 协议进行请求这个服务器集群。
使用 HttpDNS 的,往往是手机应用,需要在手机端嵌入支持 HttpDNS 的客户端 SDK。

工作流程

在客户端的 SDK 里动态请求服务端,获取 HttpDNS 服务器的 IP 列表,缓存到本地。随着不断地解析域名,SDK 也会在本地缓存 DNS 域名解析的结果。
当手机应用要访问一个地址的时候,首先看是否有本地的缓存,如果有就直接返回。这个缓存和本地 DNS 的缓存不一样的是,这个是手机应用自己做的,而非整个运营商统一做的。如何更新、何时更新,手机应用的客户端可以和服务器协调来做这件事情。
如果本地没有,就需要请求 HttpDNS 的服务器,在本地 HttpDNS 服务器的 IP 列表中,选择一个发出 HTTP 的请求,会返回一个要访问的网站的 IP 列表。

HttpDNS即使使用Http,也比使用UDP的传统DNS要快

HttpDNS服务端不会使用递归的方式依次通过根域名、顶级域名、权威域名去递归查询,而是直接返回目标IP。

鸡生蛋还是蛋生鸡

HttpDNS服务器的地址一般不变 可以使用DNS的方式获取HttpDNS服务器的ip地址 也可以直接把HttpDNS服务器的ip地址写死在客户端中。

HttpDNS的ip地址簿从哪来

直接向权威DNS请求,对于特殊的IP也可以由用户自行配置


HTTP与DNS的关系

以发送一个HTTP请求为例:

  1. 生成HTTP请求消息
  2. 根据域名,通过DNS查询解析出ip地址
  3. 找到IP地址对应的服务器通过三次握手建立TCP连接,向服务器发送HTTP Request请求,并得到服务器的Response响应

提升DNS解析速度的一些方法

更换一个块的DNS服务

  1. 解析URL的IP地址

$time nslookup time.geekbang.org

// 域名服务器及端口信息
Server:     1.1.1.1
Address:    1.1.1.1#53

// 非权威查询结果
Non-authoritative answer:
Name:   time.geekbang.org
Address: 39.106.233.176

// 耗时
real    0m0.245s
user    0m0.003s
sys 0m0.005s

可以看到解析用了0.2秒

  1. 查看你的本地DNS

$ cat /etc/resolv.conf

#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
#   scutil --dns
#
# SEE ALSO
#   dns-sd(1), scutil(8)
#
# This file is automatically generated.
#
nameserver 1.1.1.1   //这个就是你默认的DNS
  1. 检查DNS服务器的链接速度

$ ping -c3 1.1.1.1

PING 1.1.1.1 (1.1.1.1): 56 data bytes
64 bytes from 1.1.1.1: icmp_seq=0 ttl=51 time=175.752 ms
64 bytes from 1.1.1.1: icmp_seq=1 ttl=51 time=213.000 ms

--- 1.1.1.1 ping statistics ---
3 packets transmitted, 2 packets received, 33.3% packet loss
round-trip min/avg/max/stddev = 175.752/194.376/213.000/18.624 ms

平均194.376ms
你也可以比较其他的DNS地址,比如1.1.1.18.8.8.8。然后选出一个最快的。

$ ping -c3 114.114.114.114

PING 114.114.114.114 (114.114.114.114): 56 data bytes
64 bytes from 114.114.114.114: icmp_seq=0 ttl=73 time=37.513 ms
64 bytes from 114.114.114.114: icmp_seq=1 ttl=68 time=34.629 ms
64 bytes from 114.114.114.114: icmp_seq=2 ttl=60 time=76.672 ms

--- 114.114.114.114 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 34.629/49.605/76.672/19.176 ms

平均 49.605ms

  1. 更换你的DNS服务地址
    找一个你觉得不错的地址替换一下。

$ time nslookup time.geekbang.org

Server:     114.114.114.114
Address:    114.114.114.114#53

Non-authoritative answer:
Name:   time.geekbang.org
Address: 39.106.233.176


real    0m0.019s
user    0m0.003s
sys 0m0.004s

解析变成了0.019秒

DNSmasq

DNSmasq 是最常用的 DNS 缓存服务之一,还经常作为 DHCP 服务来使用。它的安装和配置都比较简单,性能也可以满足绝大多数应用程序对 DNS 缓存的需求。


参考资料

趣谈网络协议

Linux性能优化实战

为什么DNS使用UDP而不是TCP?

HTTP请求过程(一)——DNS解析过程

Linux性能优化实战

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容