传闻你很懂 DNS ?

刚刚阅读1回复0
zaibaike
zaibaike
  • 管理员
  • 注册排名1
  • 经验值172685
  • 级别管理员
  • 主题34537
  • 回复0
楼主

(长文预警!)

想象下面的对话:

“老迈,那个问题怎么处置?”

“去问 14.215.177.39!”

你是不是一脸懵逼?

计算机只喜好数字,每台联网设备都有一个用数字暗示的独一编号叫 IP(类似我们的身份证号),联网的设备之间就通过那个叫 IP 的编号彼此联络——好比我们在小我电脑上输入 http://14.215.177.39 就能拜候百度公司的办事器。

但人类生成对数字不敏感(想想高中背汗青年代的场景,是不是心里抖三抖?),IP 关于人类来说毫无意义(你能从 14.215.177.39 想到百度?),需要有种人类可读可记忆的体例来标识表记标帜联网设备——那玩意就叫域名。

于是我们大致能够像如许拜候百度办事器了:

域名英文叫 Domain Name,那那个将域名转换成 IP 的转换器就叫 Domain Name System(域名系统),简称 DNS。域名系统办事(DNS Server)就是一台拆了相关软件(一般是用 BIND,即 Berkeley Internet Name Domain,最后是由美国加州大学伯克利分校开发和维护的)的办事器,素质上就是一个“德律风本”,用来查找某个域名对应哪个IP。

那个域名到 IP 的转换,想起来很简单,但要施行起来有良多工作要考虑。

起首一点是,谁来负责域名、IP的分配与转换呢?我们在阅读器输入 www.baidu.com 后,我们的电脑要去问谁关于那个域名的 IP 呢?

美国霸权

一个曲觉是,互联网属于全球范畴的收集,应该是有个全球性的机构来负责那件工作(而不克不及每个公司或国度本身搞本身的)。

如无破例,那个机构应该位于互联网发源地。

我们晓得,互联网起家于美国,20 世纪 90 年代之前,互联网并没有普及,那时候次要用于军事和科研,次要是美国政府和大学存眷那些——详细来说就是美国政府在掌管着互联网,也就是说,互联网详细怎么玩,满是美国说了算——所谓霸权,就是我的地皮我做主,游戏规则都是我定的。

美国政府需要处理两方面的工作:域名(字母地址)的办理和 IP(数字地址)的办理,即若何给全世界的计算机分配 IP 和域名,以及若何将域名翻译成对应的 IP。美国政府(美国国度科学基金会)将域名委托给 NSI 公司(Network Solutions)办理,将 IP 地址委托给IANA(The Internet Assigned Numbers Authority,互联网数字分配机构,从其名字就晓得是干嘛的)办理。

跟着互联网的开展与普及,其他国度对美国那种独家垄断越来越不满(美国贸易部在 1998 岁首年月发布了个绿皮书,说美国政府有对 Internet 的间接办理权,让其他国度毛炸)。互联网是世界的,不是你美国的,如今IP由你分配,域名由你解析,哪天你对某个国度不爽,就把那里来的域名解析恳求全给屏障了,那还得了?

但一个事实是,其时全世界的根域名解析和 IP 地址分配根本都是美国机构办理的,所以那事分开美国还实玩不转。所以比力可行的计划是,对那些机构停止变革,让其成为类似结合国的国际性组织,离开美国政府的管辖。

ICANN:互联网界的结合国

在其他国度一致反对的情况下,美国政府在 1998 年被迫对本来的绿皮书做了修订(人称白皮书),提议成立个独立的民间组织 ICANN(Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构,官网 https://www.icann.org,总部在美国加州),参与办理 Internet 域名及地址资本的分配。起初,固然 ICANN 参与(留意是参与)互联网的办理,但仍然是在美国政府的受权框架下行事,遭到美国政府(商务部)的监管。曲到 2016 年 10 月 1 日,美国政府将互联网域名办理权完全交给 ICANN,两者之间的受权办理合同在那一天失效,不再续签——就是说,从此日起,ICANN才是个名副其实的全球性独立机构,不再受美国政府的监管(至少在名义上)。

ICAAN 官网介绍如下:

ICANN 的任务在于确保全球互联网的不变、平安与同一。要与其他 互联网用户联络,您必需在本身的电脑或其他设备中输入地址 — 可 以是一个名称或是一串数字。那个地址必需并世无双,只要如许电 脑之间才气互了解别。ICANN 则负责协调并撑持那些散布在全球各 地的独一标识符。ICANN 成立于 1998 年,是一家非营利公益型机 构,其社群成员遍及全球各地。

上面说的就是以前美国政府委托 NSI 和 IANA 管的事——如今 IANA 是 ICANN 的一个下设机构,其实上面说的工作次要仍是由 IANA 在管,去看下IANA 官网 https://www.iana.org/ 就晓得了,其首页申明:

The global coordination of the DNS Root, IP addressing, and other Internet protocol resources is performed as the Internet Assigned Numbers Authority (IANA) functions.

次要本能机能:全球的根 DNS、IP 地址以及其它互联网协议资本的协调。

我们看看 ICANN 的组织架构:

ICANN 的更高权利机构是董事会,其成员由 ICANN 社群拔取。ICANN 的日常事务由 ICANN 组织(也就是实正的实体机构)施行,而董事会则负责监视 ICANN 组织的政策造定与施行情况。

做个类比,ICANN 社群就相当于全体中国公民,董事会相当于中国的更高权利机关人民代表大会,而 ICANN 则相当于中国的各级政府机关单元。

ICANN 董事会成员来自美国、中国、澳大利亚、巴西、法国、德国等等全世界各个国度,社群成员则散布更广。列国政府则以征询委员会的体例参与 ICANN 事务。

IP 地址分配

在说域名解析前要简单说下 IP 地址的分配,因为域名最末是要被解析成 IP 的,分开 IP 域名玩不转。

由上一节可知,全球互联网 IP 资本是由 ICANN 办理的,详细来说是由其下设机构 IANA 办理的。

(那里需要留意,固然 IANA 如今是 ICANN 的下设机构,但 IANA 比 ICANN 要早得多,其汗青可逃溯到 20 世纪 70 年代——而 ICANN 在 1998 年才成立。能够理解为 ICANN 是对 IANA 等机构组织的变革与重组——IANA 仍是阿谁 IANA,但其上层监管机构由美国政府转为 ICANN。)

然而,中国的一家公司想要申请个 IP,必定不是跑到美国找 IANA——IANA 其实不管那些鸡毛蒜皮的事。IP 资本是以分层组织架构来办理的,IANA 是全球总的 IP 资本办理机构,其在各大洲/区域设立多个区域互联网注册机构(Regional Internet Registry,RIR),IANA 次要做的事就是根据 IETF 造定的相关战略给那些 RIR 分配 IP 资本池(一批 IP),那些 RIR 再将那些 IP 以更小的批次粒度分配给下级机构(如当地互联网注册机构LIR、国度互联网注册机构NIR,也有可能间接分配给 ISP),那些下级机构再以更小的批次粒度分配给辖区的 ISP(Internet Server Provider,互联网接入办事商,如中国电信),而个别或公司则是从 ISP 那里申请最末的 IP。

好比中国一家公司要向中国电信申请一个 IP,而中国电信则要向中国互联收集信息中心(China Internet Network Information Center,CNNIC,属于 NIR)申请,而 CNNIC 要向亚太互联收集信息中心(Asia-Pacific Network Information Center,APNIC,属于 RIR)申请,APNIC 要向 IANA 申请(说是申请,其实是预先分配)。

目前 IANA 下设的RIR:

那里是 IPV4 地址分配情况。

域名解析架构

如今我们晓得谁在办理全世界的域名和 IP 了(ICANN),接下来的问题是:若何将域名解析到指定的 IP?

我们仍是回到上面的图:

很简单嘛,弄台电脑,里面有个数据库存储了域名到 IP 的映射目次,拆个 DNS Server 软件监听某个端口(一般是 53 端口)对外供给办事,然后广而告之让全世界的主机都来那里查询就行了。

如许的办事器撑不了一秒钟。

一个间接的问题是,如许一台办事器若何扛得住每天百万亿次的恳求?

更严峻的问题是,若是那台办事器被 DDoS 了,更有甚数据库被黑了,岂不是全世界断网摸黑了?

所以,鸡蛋不克不及放一个篮子里。DNS 那玩意要玩散布式。

分层架构:

现实中的域名构造和 DNS 解析架构跟 IP 一样,也是分层的——所以域名和 IP 一样也是用多个“.”离隔的。

全球的 DNS 解析从逻辑上分红三个条理:根 DNS 办事器(Root DNS)、顶级 DNS 办事器(TLD)、权势巨子 DNS 办事器:

对应地,我们看看域名的条理构造:

​图片来自阿里云

比照两张图我们发现,域名的构造和 DNS 解析架构是一致的——那很好理解,域名末归是用来解析的嘛,有什么样的解析架构决定了有什么样的域名构造。所以百度的域名叫 www.baidu.com,而不是我们起头随意写的 baidu12345678。

有了如许的层级构造,如今我们在阅读器输入 www.baidu.com,阅读器为了得到那个域名的 IP,就要在那个层级构造中从上往下问——不外现实上不是阅读器本身去问,而是有个叫当地 DNS 办事器(local DNS server,也叫 DNS Resolver)的家伙代庖,阅读器问当地 DNS 办事器 www.baidu.com 的 IP 是几,当地 DNS 办事器说”稍等,我帮你问问“,然后就起头了类似下面的对话:

(下面我们称当地 DNS 办事器叫”小助手“)

- 小助手先问根 DNS 办事器:”大哥,请问 www.baidu.com

的 IP 是几?“

- 根 DNS 办事器说:”我不晓得,但你能够问问 com 顶级 DNS 办事器,他晓得些 com 的内情。他的 IP 是 192.26.92.30。“

- 然后小助手跑去问阿谁 com 顶级 DNS 办事器:”二哥,请问 www.baidu.com

的 IP 是几?“

- com 顶级 DNS 办事器说:”我不晓得,但你能够问问权势巨子办事器 A,他晓得些 http://baidu.com

的内情。他的 IP 是 220.181.33.31。“

- 然后小助手又屁颠屁颠去问权势巨子办事器 A:”三哥,请问 www.baidu.com

的 IP 是几?“

- 权势巨子办事器 A 说:”算你问对人了,www.baidu.com

的 IP 是 14.215.177.38。“

- 于是小助手末于拿到了 www.baidu.com

的 IP,高快乐兴地给到阅读器。

(留意:现实上 www.baidu.com 做了 CNAME 解析,而且最末 IP 也不行一个。)

即先从域名的根(即”.“,有些场所下 www.baidu.com 会写成 www.baidu.com.,最初阿谁”.“就是根域名)起头顺藤摸瓜:. -> com -> baidu.com -> www.baidu.com。

上面过程画成图就是如许:

图片来自收集DNS 缓存:

那个当地 DNS 办事器固然最末问到了 IP,但心理其实很不爽:我为了问个 IP 就漫游了一遍全世界啊。

阅读器也不爽:问个 IP 花那么久,你属乌龟啊?

别的适才说通过层级架构处理拜候量问题,但从上面例子也没发现拜候量降低啊,每层办事器都被拜候了一遍。

所以在那种分层架构中有个核心要点:DNS 缓存(DNS Cache)。

域名和 IP 的映射关系有个重要的事实是,它们不常变革,出格越往上层变更频次越低(13 台根 DNS 办事器的域名和 IP 更是固定稳定的),那种数据十分合适做缓存。

所以现实上在上面的查询中,阅读器所在的当地电脑和当地 DNS 办事器都是先查它们本身的缓存,查不到才往上查。

详细是,阅读器发出 DNS 查询恳求给当地电脑的 DNS 客户端,DNS 客户端先查当地 DNS 缓存有没有对应域名的 IP 信息(且未过时),有则间接返回;没有则去询问当地 DNS 办事器,当地 DNS 办事器先查当地缓存中有没有对应域名的 IP,有则返回,没有则往上层查。

当地 DNS 办事器一般是 ISP 的 DNS Server 或者公共 DNS(如 114DNS),关于一些大量拜候的出名网站,根本都是有缓存的。别的,即便没有缓存,它也纷歧定就是从根 DNS 办事器起头查,因为多半它也持有 TLD DNS 办事器以及响应域名权势巨子 DNS 办事器的缓存,所以大都时候它是抄近道查的。

也就是说,关于绝大部门的 DNS 解析恳求,在当地电脑和当地 DNS 办事器两层已经处理掉了,压根不会跑到外面那三层系统中——即使如许,全球 13 台根 DNS 办事器每天仍要承接数百亿次查询。

根 DNS 办事器(Root DNS Server):

全世界一共有 13 台(逻辑上)根 DNA 办事器,别离用 a 到 m 定名,如 http://a.root-servers.net,http://b.root-servers.net。之所以是 13 台是有其汗青原因的,按照RFC 791规定,为包管 UDP 数据包传输胜利率,尽量将数据包控造在 571 字节以使数据包不会被分片传输,所以算来算去那个数据报就只能放 13 个办事器信息。

那 13 台根办事器中,一台是主办事器(就是 a 办事器),12 台辅助办事器,有 10 台在美国,2 台在欧洲,1台在日本。

说 13 台有点不切当,准确说应该是 13 组,因为 a - m 每个都是全球范畴的散布式集群,到目前为行,一共有1487 个 ROOT 实例(instance),那么多集群节点一方面大大进步恳求承载才能和拜候速度(通过 BGP 路由协议分配比来的节点),同时大大进步抗 DDoS 的才能。

那一千多个根实例散布如下:

图片来自官网

我们点开中国地域的看看:

图片来自官网

上面显示在重庆有个 F 根,贵阳有个 K 根,武汉有两个 L 根(L 的运营机构就是 ICANN 本身)。当然中国其他处所还有良多差别的 Root 实例。

那不是说如今中国就有 IPV4 根办事器了,你看武汉阿谁 Root,他的 Operator 是 ICANN,在美国呢(中国有 IPV6 的根办事器,后面会说到)。

那 13 台(我们仍然习习用”台“,要晓得那是逻辑单元)根办事器由 ICANN 委托 12 家差别的机构运营办理(当然大部门都是美国的),能够在 https://root-servers.org 看到详情。我们看此中一个:

图片来自官网

那是 J 根的情况,它是由 Verisign 公司运营办理的(那家公司在 2000 年收买了 Network Solutions 公司——美国政府曾指派它来办理域名——所以 Verisign 同时还运营主根(A Root)一点不奇异)。J 根在全球一共有 118 个实例(那个数字将来应该还会增加),那些实例都是用统一个 IP:192.58.128.30,接纳一种叫任播(AnyCast)的手艺从中选一台处置恳求。

我们看看 J 根一天的拜候量:

图片来自官网

2022 年 1 月 11 日一天的 UDP 恳求(DNS 次要就是 UDP)约 55 亿。

畴前面 DNS 查询过程可知,根办事器的次要感化就是告知查询者各顶级域名(如com)对应的顶级 DNS 办事器(TLD)的 IP 是什么,好让查询者继续往下查。所以根办事器需要维护一个顶级域名到 TLD 办事器地址的映射目次,那个目次叫 DNS 根区(DNS root zone),能够在那里查看完好的根区列表。下面是部门内容:

;; 一共 5 列依次是:域名、有效期、类别(IN 暗示互联网 Internet)、记录类型(NS 暗示 Name Server,A 暗示 Address)、DNS 办事器或者 IP(取决于记录类型是 NS 仍是 A),那些在后面讲 DNS 协议里面详细申明 cn. 172800 IN NS a.dns.cn. cn. 172800 IN NS b.dns.cn. cn. 172800 IN NS c.dns.cn. cn. 172800 IN NS d.dns.cn. cn. 172800 IN NS e.dns.cn. cn. 172800 IN NS f.dns.cn. cn. 172800 IN NS g.dns.cn. cn. 172800 IN NS ns.cernet.net. ...... a.dns.cn. 172800 IN A 203.119.25.1 a.dns.cn. 172800 IN AAAA 2001:dc7:0:0:0:0:0:1 b.dns.cn. 172800 IN A 203.119.26.1 c.dns.cn. 172800 IN A 203.119.27.1 d.dns.cn. 172800 IN A 203.119.28.1 d.dns.cn. 172800 IN AAAA 2001:dc7:1000:0:0:0:0:1

前面是顶级域名 cn. 对应的 DNS 办事器。cn. 一共有 8 台 TLD 办事器,此中 7 台是 CNNIC (中国互联收集信息中心)的,1 台是 35 互联的。留意办事器也是用域名暗示的,所以后面还需要个 A 记录列出域名对应的 IP 地址(A 是 IPV4,AAAA 是 IPV6)。

不外,在恳求根办事器获取 TLD 办事器信息之前,我们的当地 DNS 办事器怎么晓得根办事器的 IP 呢?

谜底是写死。ICAAN 供给了一份 named.cache 文件,那个文件供给了 13 台根办事器的 IP 地址,那玩意是不会变的,我们把它 down 下来放入当地 DNS Server 设置装备摆设文件中就行了。

顶级 DNS 办事器(TLD Server):

当地 DNS 办事器从根办事器那里拿到顶级域名(如 com)对应的 TLD Server 的 IP 后,要拜候 TLD Server 获取一级域名(如 http://baidu.com)对应的权势巨子 DNS 办事器的 IP。

顶级域名分通用顶级域名(gTLD,如 com、org、edu、net)和国度顶级域名(ccTLD,如 cn、jp、uk)。那些顶级域名(以及 TLD Server)由 ICANN 委托差别的机构办理维护,如 .com 和 .net 由 VeriSign 公司维护,.cn 由 CNNIC 维护,还有些不怎么通用的域名如 ”.google“ 由 google 运营,”.中国“由 CNNIC 运营。所谓委托,就是 ICANN 跟那些机构签订委托合同(在 ICANN 之前是由美国政府和相关机构签委托合同),那些机构在合同框架下现实办理维护那些顶级域名和 DNS 办事器——那其实是一块肥水,想想我们去万网注册个 http://abc.com 的域名,每年都要交钱给万网,而那钱很有一部门是交给那些顶级机构的(还有一小部门交给 ICANN 做为办理费)。

能够在 IANA 网站上看到所有的顶级域名以及运营机构:https://www.iana.org/domains/root/db。

我们能够在网站或者号令行用 whois 东西查看某个顶级域名的详细信息,如通过whois com查看顶级域名 com 的信息:

% IANA WHOIS server % for more information on IANA, visit http://www.iana.org % This query returned 1 object domain: COM organisation: VeriSign Global Registry Services address: 12061 Bluemont Way address: Reston Virginia 20190 address: United States ...... nserver: A.GTLD-SERVERS.NET 192.5.6.30 2001:503:a83e:0:0:0:2:30 nserver: B.GTLD-SERVERS.NET 192.33.14.30 2001:503:231d:0:0:0:2:30 ...... whois: whois.verisign-grs.com status: ACTIVE remarks: Registration information: http://www.verisigninc.com created: 1985-01-01 changed: 2017-10-05 source: IANA

第一行申明域名是归 IANA 管辖的,详细的运营机构是 VeriSign Global Registry Services,后面是用来解析该顶级域名的 DNS 办事器信息,能够看到有 13 组 DNS 办事器(只截取了部门),那些 DNS 办事器同时撑持 IPV4 和 IPV6。.com 下面的域名 whois 信息都是 http://whois.verisign-grs.com 供给的(一般域名的 whois 信息都是由响应顶级域名办事商供给的,如如 whois 查 http://baidu.com 的信息,该信息就是来自 Verisign 的数据库)。最初一部门申明 com 顶级域是在 1985 年 1 月 1 日启用的。

权势巨子 DNS 办事器:

TLD 办事器同样不克不及告诉我们 www.baidu.com 的 IP 到底是什么,它的数据库里面只要一级域名 baidu.com 对应的权势巨子 DNS 办事器的 IP,所以我们还要按照其指示去响应的权势巨子 DNS 办事器查最末的 IP。

一般来说大公司会搭建本身的权势巨子 DNS 办事器解析本身的域名,我们能够通过 whois 号令查看域名对应的权势巨子办事器。

好比百度的:

# whois baidu.com ...... Name Server: ns3.baidu.com Name Server: ns7.baidu.com Name Server: ns4.baidu.com Name Server: ns2.baidu.com Name Server: ns1.baidu.com

淘宝的:

# whois taobao.com ...... Name Server: NS4.TAOBAO.COM Name Server: NS5.TAOBAO.COM Name Server: NS6.TAOBAO.COM Name Server: NS7.TAOBAO.COM

新浪的:

# whois sina.com.cn ...... Name Server: ns3.sina.com.cn Name Server: ns2.sina.com.cn Name Server: ns4.sina.com.cn Name Server: ns1.sina.com.cn

一般公司会选择租用某些大型办事商供给的付费权势巨子 DNS(当然也能够本身搭建,但没需要),好比我们公司域名 http://weicheche.cn 用的阿里旗下万网的权势巨子 DNS 办事器:

# whois weicheche.cn ...... Name Server: dns31.hichina.com Name Server: dns32.hichina.com

和根办事器需要晓得各 TLD 办事器的 IP 信息一样(上面提到的 DNS 根区),TLD 办事器也必需事先晓得响应的权势巨子办事器的域名和 IP 信息。当百度希望用 http://ns1.baidu.com 做为 http://baidu.com 的权势巨子 DNS 办事器时,它必需将该信息(http://ns1.baidu.com 域名以及其 IP )写到 com TLD 办事器的数据库中,若是以后百度想换 http://baidu.com 那个域名的权势巨子 DNS 办事器(如换成 http://ns1.xiaodu.com),则必需修改 com TLD 办事器的那笔记录(一般一个域名的权势巨子 DNS 至少要有两台)。

权势巨子 DNS 是能够有多级的。假设有个家政公司其一级域名叫 http://jiazheng.com,其 DNS 办事器是 http://dns.jiazheng.com,该公司想按省份管辖办事,每个省份有本身的域名和 DNS 解析,如湖北省的叫 http://hb.jiazheng.com,其 DNS 办事器是 http://dns-hb.jiazheng.com,广东的叫 http://gd.jiazheng.com,其 DNS 办事器是 http://dns-gd.jiazheng.com。别的该公司营业分炊庭营业和公司营业两大板块,也别离有本身的域名,好比湖北的家庭板块域名叫 http://jt.hb.jiazheng.com,公司板块叫 http://gs.hb.jiazheng.com。

那家公司需要将(并且只需要)将一级域名 http://jiazheng.com 对应的 DNS 办事器 http://dns.jiazheng.com 注册到 com TLD Server 数据库中,然后将二级域名 http://hb.jiazheng.com 的 DNS 办事器 http://dns-hb.jiazheng.com 以及 http://gd.jiazheng.com 的 DNS 办事器 http://dns-gd.jiazheng.com 注册到 http://dns.jiazheng.com 的数据库中。

当用户拜候 http://jt.hb.jiazheng.com 时,其当地 DNS 办事器依次查根办事器、com TLD 办事器,com TLD 办事器会告诉说你到 http://dns.jiazheng.com 那台办事器上去查,他的 IP 是 X.X.X.X;当当地 DNS 办事器去 http://dns.jiazheng.com 上查时,http://dns.jiazheng.com 其实不能间接告诉其 IP 是几,只能说你要到 http://dns-hb.jiazheng.com 上去查,他的 IP 是 Y.Y.Y.Y(详细是返回一个 NS 报文而非 A 报文,后面会说 DNS 报文类型);最末当地 DNS 办事器从 http://dns-hb.jiazheng.com 上查到了 http://jt.hb.jiazheng.com 的 IP 是 Z.Z.Z.Z。

当地 DNS:

当地 DNS 其实不在三级条理构造中,但它对 DNS 解析十分重要。一般小我电脑上都不会安拆 DNS Server,阅读器也不会去各层 DNS Server 上去查,那个查询使命是由当地 DNS 办事器代办署理完成的,它领受阅读器(其实是阅读器所在电脑上的 DNS Client)的查询恳求,其间无论查询道路多么盘曲,最末总要返回该域名的 IP 给到阅读器。

一般来说,小我的当地 DNS Server 是 ISP 主动分配的,或者是路由器里面集成的。公司可能会搭建本身的当地 DNS 办事器。也能够利用一些公共的 DNS 办事,如 114DNS(114.114.114.114)、google DNS 办事(8.8.8.8)。

Windows 上在”收集和 Internet“中能够看到本身电脑的当地 DNS:

Mac 上在”收集偏好设置->高级->DNS“中:

DNS 协议 概览:

DNS 查询是用 DNS 协议实现的,DNS 协议是应用层协议,其底层次要利用 UDP(某些场景会利用 TCP)。

DNS 办事器存储的那些域名到 IP 的映射叫资本记录(Resource Record,RR),资本记录(RR)是一个包罗下列字段的 4 元祖:

(Name, Value, Type, TTL)

TTL(Time To Live)各人都熟悉,暗示那条资本的缓存有效期,前面不是提过 DNS 缓存嘛,到底要缓存多久就取决于那个 TTL 的值,一般越上层的 TTL 越长。

Type 暗示那是个什么类型的报文,它决定了 Name 和 Value 的详细含义。次要用到的 Type 有 A、AAAA、CNAME、NS、MX:

A:Address 的缩写,此时 Name 暗示域名(一般是二级或多级域名),Value 暗示该域名的 IPV4 地址。当地 DNS 办事器拿到 A 记录就能够返回给客户端了;AAAA:类似 A 记录,暗示的是 IPV6 地址(因为 IPV6 是 16 字节,是 IPV4 4 字节长度的 4 倍,所以写了 4 个 A);CNAME:别号记录,暗示 Name 域名是 Value 域名的别号。如 www.baidu.com 就 CNAME 到了 www.a.shifen.com,当地办事器拿到 CNAME 记录后需要继续解析 CNAME 过来的新域名,如需要继续去问 www.a.shifen.com 的 IP 是什么。CNAME 解析是 CDN 中重要一步;NS:Name Server 的缩写,暗示 Name 那个域名要去 Value 那个 DNS 办事器继续查。整个多层级 DNS 解析架构就靠那玩意——我们看前面的 DNS 根区文件中有大量的 NS 记录暗示某顶级域名需要去哪个 TLD 办事器解析;MX:和 CNAME 类似,都是做别号,差别的是 MX 暗示 Value 是邮件办事器;

一个 DNS 报文构造长如许:

是不是觉得说了等于没说?下面我们用东西抓包实操下你就大白了。

我们用到两个东西:dig 和 wireshark,别离用来发送 DNS 查询和阐发数据报。

dig 一下:

先在号令行用 dig 东西看下 www.baidu.com 的 DNS 解析过程:

# dig +trace www.baidu.com ; +trace 暗示查看 DNS 解析的整个过程 ;; 第一阶段:从当地 DNS 办事器拿到根办事器的信息(因为 dig 东西本身没有那些信息),一共拿到 13 个 . 244973 IN NS d.root-servers.net. . 244973 IN NS b.root-servers.net. . 244973 IN NS f.root-servers.net. ;; ...... 那里省略掉了 10 个 ;; Received 811 bytes from 192.168.30.1#53(192.168.30.1) in 35 ms ;; 第二阶段:从此中一台根办事器(j)获取顶级域名 com. 对应的解析办事器(TLD 办事器),一共拿到 13 个。DS 和 RRSIG 是签名用的 com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. ;; ...... 那里省略掉了 10 个 com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 com. 86400 IN RRSIG DS 8 1 86400 20220126210000 20220113200000 9799 . ......(省略掉一长串签名信息) ;; Received 1173 bytes from 192.58.128.30#53(j.root-servers.net) in 241 ms ;; 第三阶段:从此中一台顶级办事器(h.gtld-servers.net)获取一级域名 baidu.com. 对应的解析办事器(权势巨子 DNS 办事器),一共拿到 5 个 baidu.com. 172800 IN NS ns2.baidu.com. baidu.com. 172800 IN NS ns3.baidu.com. baidu.com. 172800 IN NS ns4.baidu.com. baidu.com. 172800 IN NS ns1.baidu.com. baidu.com. 172800 IN NS ns7.baidu.com. ;; 那里省去了两个签名记录 ;; Received 761 bytes from 192.54.112.30#53(h.gtld-servers.net) in 228 ms ;; 第四阶段:从此中一台权势巨子办事器(ns7.baidu.com)拿到二级域名 www.baidu.com. 的信息,那里拿到的是 CNAME 记录,在现实解析中还需要继续去拿 www.a.shifen.com. 的 IP www.baidu.com. 1200 IN CNAME www.a.shifen.com. ;; Received 72 bytes from 240e:bf:b801:1002:0:ff:b024:26de#53(ns7.baidu.com) in 21 ms

上面的第一阶段在现实 DNS 解析中是事先在当地 DNS 办事器设置装备摆设文件中写好的,不需要另行获取(因为 dig 的设置装备摆设文件没那些工具,所以必需从当地 DNS 办事器那里获取)。

我们发现各层 DNS 办事器都有多个,那是为了避免一台挂了就整个瘫痪。

DNSSEC:若何证明”你妈是你妈“:

上面的数据除了 NS 记录还有 DS、RRSIG 记录,那是用于对返回的数据做签名用的,因为收集是不受信赖的情况,我们发出个恳求,然后领受到回复,怎么能包管那个回复就是实正的合法办事器返回的而且数据在途中没有被其别人修改?好比我们拜候 www.baidu.com,当地 DNS 颠末几轮查询,从 ns7.baidu.com 拿到了 www.baidu.com 的 CNAME 值 www.a.shifen.com——那过程中你能包管拿到的数据必然是 ns7.baidu.com 给你的?就没有中间人拦截你的恳求然后给你发个伪造的应答包,给你 CNAME 到某个日本动做片网址?

那不是瞎猜的,2014 年 9 月,CMU 的研究人员发现,本应通过 Yahoo!、Hotmail 和 Gmail 办事器发送的电子邮件酿成通过地痞邮件办事器发送。攻击者就是操纵了 DNS 系统承受应答前不会查抄根据那一破绽实现的攻击。

然而为了性能 DNS 底层选择利用 UDP,而 UDP 是无毗连传输协议,所以 DNS 其实不能学 HTTP 那样加个 SSL 层酿成 DNSS。

IETF 为了 DNS 数据传输的平安性搞了个 DNSSEC(Domain Name System Security Extensions,即 DNS 平安扩展),详细内容拜见 RFC2535。大致是说既然你 UDP 数据报是无毗连的,那我就在数据报身上(而不是毗连)做文章,为那些数据(A、NS等记录)生成一个签名(如 SHA256),然后对那个签名用非对称加密算法(私钥)加密一下,放在那些记录后面(Type 叫 RRSIG,就是 Resource Record Signature 资本记录签名的意思),客户端拿到数据报后,用公钥解密出签名信息,并和客户端本身对那些记录做的签名成果比对一下,若是纷歧样申明数据就长短法的(当然客户端用的签名算法必定要和办事器端一样的,好比都用 SHA256)。

但问题是,客户端(当地 DNS 办事器)怎么晓得公钥是几呢?所以客户端必需再恳求办事器端(如权势巨子 DNS 办事器)要公钥。

那是不是很有问题?若是恳求被某个贼人拦截了,那拿到的公钥岂不也是假的?

所以 DNSSEC 设想了个叫做信赖链的校验流程,一句话就是:”若是你不信赖儿子,就去问老子“——上层办事器持有下层办事器的身份验证信息。

客户端不信赖那个”权势巨子办事器“给的公钥,就去问其上级 TLD 办事器,TLD 办事器返回个叫 DS 的记录告诉客户端:”他是长如许的,你查抄下,若是不婚配,就是个 Fake DNS。“

当然 TLD 返回的那条 DS 记录同样也要签名并加密,所以客户端同样需要再恳求 TLD 办事器讨要公钥来解密。

问题又来了:客户端怎么能相信那个"TLD"就是实 TLD 呢(它供给的公钥是不是实的)?

谜底是:”继续问他老子!“

TLD 的上层就是根办事器——那天然的一个问题就是:客户端若何能相信那个”根办事器“是实的呢?

根办事器没有上层了,天然不克不及再”问他老子“了——其实也不尽然,根办事器的老子就是人类啊。根区的公钥私钥对是在根区域签名仪式(Root Signing Ceremony)上由几个特定的人在严酷的安保情况下生成并构成记录的——那里关键的关键就是阿谁私钥,是必然不克不及泄露到外面的,不然那个 DNSSEC 系统就好像废纸。生成完了将公钥公布于世,各人就都晓得根区的公钥是 XYZ,谁也伪造不了了。

DNSSEC 呈现时间晚于 DNS 自己(RFC2535 草案是 1999 年提的,是对 1997 年一版的修订案,而 DNS 在 20 世纪 80 年代就有了),别的那种信赖链机造要求所有条理的 DNS 办事器都要严酷实现那个验证机造(因为那种机造是用上级来验证下级的合法性,整个链条实正可以相信的只要根服,所以必需可以从更底层不断逃溯到根),哪个环节没有做,就好像废纸了,所以致今并不是所有 DNS 办事器都撑持 DNSSEC(当然根服和绝大部门 TLD 服都撑持),有些 DNS 办事商的 DNSSEC 功用是付费的,所以说,良多域名解析仍然是”裸奔“的。

(那里只说了大致流程,没有展现手艺细节,感兴趣的能够去研究下 RFC2535,Cloudflare 官网也有比力详细的介绍)

DNS 数据报阐发:

讲了那么久还不晓得 DNS 数据事实长啥样有点过意不去,接下来我们就用 wireshark 抓个包玩玩(就是上面 dig www.baidu.com 阿谁的报文)。

翻开 wireshark,选择响应的网卡进入抓包界面,过滤 dns 协议的数据。

先看下概览:

从上往下定时间摆列,一共 4 对问答(每对的 ID 不异,如 No.8,9 的 ID 是 0x8a60),编号 8、10、17、19 是恳求包(问),9、16、18、20 是响应包(答)。

192.168.30.10 是我电脑的 IP,192.168.30.1 是我电脑的当地 DNS 办事器。

(留意:dig tace 的数据是 dig 本身向各层 DNS 办事器发恳求,现实中是当地 DNS 办事器做那些工作。)

解析过程:

No.8,9:本机向当地 DNS 办事器发送恳求询问根 DNS 办事器信息,当地 DNS 办事器返回 13 台根服的域名和 IP。No.10,16:本机向 192.5.5.241 那台根办事器(f.root-servers.net.)询问 www.baidu.com 的 IP(A 记录)。根办事器返回了一组 NS 记录告诉本机要去那些 TLD 办事器解析域名。No.17,18:本机向 192.33.14.30 那台 TLD 办事器(b.gtld-servers.net.)询问 www.baidu.com 的 IP。该 TLD 办事器返回了一组 NS 记录告诉本机要去那些权势巨子办事器解析域名。No.19,20:本机向 14.215.178.80 那台权势巨子办事器(http://ns4.baidu.com)询问 www.baidu.com 的 IP。该权势巨子办事器返回了一条 CNAME 记录,指向 www.a.shifen.com.。在现实 DNS 解析中,当地 DNS 办事器要继续上面的过程解析 www.a.shifen.com. 的 IP。

下面我们用 No.19,20 为例看看恳求数据报和响应数据报的详细内容。

那是四层收集构造,我们那里仅存眷应用层里面的工具。

再贴下前那张概要图比照着看下:

Queries 之前的都是头部(一共 12 字节。别的因为那是个查询恳求,body 部门没有”答复“和”权势巨子“信息)。

展开看看各部门长啥样:

应答包构造上和查询包根本一样,我们展开 No.20 应答包:

上面是百度的权势巨子 DNS 办事器给出了 CNAME 应答,而关于 TLD 办事器,它不会给出 CNAME 或 A 应答,只会给出 NS 应答,指示客户端去以下 DNS 继续解析。我们看看 No.18 的应答信息:

上面的 Queries 部门都是都是指定想要 A 记录,其实客户端也能够指定想要其他类型记录(如 MX、CNAME 等)。

至此,DNS 根本讲得差不多了,下面我们讲讲一个基于 DNS 的应用:CDN。

CDN

CDN(Content Delivery Network)即内容分发收集,就是个大 Cache,把本来放在你公司办事器的内容(次要是静态内容)缓存到世界各地,让用户可以就近拜候。

​图片来自阿里云

如图所示,CDN 就是一个分层的缓存系统(那些 L1、L2 可类比我们日常平凡开发用到的办事当地缓存、Redis 缓存,源站则相当于数据库系统),通过 DNS 调度战略为用户(客户机)供给一个离他比来的缓存办事器 IP,实现最快下载速度的同时减轻源站的压力。

我们如今存眷的是若何让 DNS 返回一个离用户比来的 IP。

CNAME 解析:

前面说过,CNAME 解析是玩 CDN 的重要一步,你去各大 CDN 办事商(阿里云、腾讯云、七牛云等)开通 CDN 办事,他们城市为你生成一个加速域名,让你把你公司需要加速的域名 CNAME 解析到那个加速域名。

理论上,CNAME 解析并非 CDN 的需要步调,你完全能够间接利用办事商供给的阿谁 URL 嘛。但你想想,你得把网站所有处所的相关域名改成阿谁域名(并且若是那个域名有被外界用户或公司利用,外界也要改——那几乎不现实),并且(更要命的)后面若是你想换 CDN 办事商(如从阿里云换成腾讯云),你又得大动干戈去改代码里面的域名。

所以从现实来说,玩 CDN 的第一步就是将公司域名 CNAME 到 CDN 加速域名。

那里假设公司需要加速的源域名是 www.test.com,公司利用腾讯云的 CDN,腾讯云 CDN 供给的加速域名是 www.test.com.cdn.dnsv1.com。

调度 DNS 办事器

我们同样 dig 以下看看 DNS 解析过程(从加速域名起头 dig):

# dig www.test.com.cdn.dnsv1.com +trace ...... dnsv1.com. 172800 IN NS ns3.dnsv5.com. dnsv1.com. 172800 IN NS ns4.dnsv5.com. ...... www.test.com.cdn.dnsv1.com. 600 IN CNAME www.test.com.tweb.sched.ovscdns.com. ......

发现该域名被 CNAME 到 www.test.com.tweb.sched.ovscdns.com. 了,且从名字看跟调度(sched)有关,我们继续 dig:

# dig www.test.com.tweb.sched.ovscdns.com. +trace ...... ovscdns.com. 172800 IN NS ns1.ovscdns.com. ovscdns.com. 172800 IN NS ns2.ovscdns.com. ovscdns.com. 172800 IN NS ns3.ovscdns.com. ovscdns.com. 172800 IN NS ns4.ovscdns.com. ...... www.test.com.tweb.sched.ovscdns.com. 60 IN A 43.132.83.43 www.test.com.tweb.sched.ovscdns.com. 60 IN A 101.33.27.53 www.test.com.tweb.sched.ovscdns.com. 60 IN A 43.132.83.42 www.test.com.tweb.sched.ovscdns.com. 60 IN A 43.132.83.41 www.test.com.tweb.sched.ovscdns.com. 60 IN A 101.33.27.45 ......

末于找到 IP 了,返回了良多。

那里 ns1.ovscdns.com. 等 DNS 办事器就是调度办事器,它是在传统 DNS 办事器的根底上按照来源 IP 归属信息(哪个地域、哪个主干网)选择对应比来的 CDN 节点的 IP 返回给客户端以实现比来拜候(当然我们上面是 dig 的,不是现实场景,里面返回的有日本的有新加坡的)。

核心原理就是那么简单:通过 CNAME 将原始域名解析到加速域名,而该加速域名的权势巨子 DNS 办事器具有智能调度的才能(就是说那个加速域名并非对应哪一台办事器的 IP,而是对应该办事商的整个 CDN 节点,能够被调度 DNS 办事器解析到任何一个结点)。

现实中会复杂良多,为了合作,各 CDN 办事商的调度才能把戏百出,远远不行仅通过来源 IP 调度那么简单,一般城市供给应用层调度(HttpDNS),可按照 Http 内容(如 url 参数、Header、path 内容施行调度)施行调度战略。

IPV6 和雪人方案

固然说如今全球互联网的更高监管机构是 ICANN,然而 ICANN 总部在美国(并且固然 ICANN 名义上不再受美国政府监管,但权利交接仍在停止中),13 台根办事器有 10 台在美国,别的有两台别离在英国和日本——那两家跟美国的关系你我都懂。别的如今互联网大部门尺度也是美国公司/机构造定的,在那种情况下,你敢相信美国政府对互联网完全没有监管才能?

前车缺芯之鉴记忆犹新,说好的全球化大分工彼此扬长避短呢,人家说翻脸就翻脸,不单不让本国公司跟你玩,还逼着不让外国公司跟你玩,就问你怕不怕。

若是说中国担忧美国哪天给中国来个大断网——那种担忧并不是庸人自扰。

(有人说那不妨啊,我们本身搭建个根办事器,中国所有 DNS 办事器都指向那个根不就行了吗?是能够,问题是如许的互联网只能在国内自嗨。有人可能觉得我们原来就是被墙在国内嘛,自嗨也不妨嘛——那是你我那种通俗人的觉得,实正重要的工具你我觉得不到,中国的互联网不成能跟世界其他国度断开——根办事器必需是全球性的,一个世界只能有一个互联网。)

别的 IPv4 地址行将干涸,IPv6 的推广势在必行,并且如今的根服以及 DNS 解析系统存在一些固出缺陷,那个档口给了后入局者一个时机。

中国是个大国,不只是说地大人多,而是说那几年中国的互联网财产开展得相当敏捷,大有赶超美国的势头,将来的目的是万物互联(物联网),那时候联网的就远不行电脑和手机了——如今 IP 快没了,人家不给你分配了,怎么办,都玩内网?一群 192.168 在那互通有无?

所以中国将 IPV6 的普及进步到了国度战略层面,印发了《推进互联网协议第六版(IPv6)规模摆设动作方案》,提出了明白的阶段性推广目标(所以如今你看到良多网站页脚都有”某某某撑持 IPv6“的字样,国度战略得撑持啊)。

为啥 IPv6 就不怕地址干涸啊,因为 IPv4 是 4 个字节,理论上最多能有 2^32 个地址,也便是不到 43 亿个地址。IPv6 是 16 个字节,理论上最多能有 2^128 个地址,那是个天文数字,能够给地球上每一粒沙子编址。

​4 字节的 IPv4​16 字节的 IPv6

设想中国几经斗争末于把 IPv6 普及开来了(那可不是一件简单的工作,涉及到大量根底设备的晋级革新),全民眉飞色舞,你看我们都在用 IPv6 了,多么先辈,比标致国还先辈——成果关键的解析办事还捏在人家手里,标致国一个不快乐,一发淫威,照样给你断了网,那谁能受得了?

所以光普及 IPv6 还不可,还得在域名解析权上脱节美国的控造。

所以中国于 2015 年领衔倡议了雪人方案(其他倡议人还包罗日本的 WIDE 机构——M 根服的运营机构、域名软件之父保罗·维克西等人),面向全球招募 25 个根办事器运营意愿单元,配合运营 IPv6 根办事器。

看看大咖们怎么说的:

"IPv4 MTU(更大传输单位)限造招致了现有13个根办事器的格局,“雪人方案”将在纯IPv6情况下建立,会测验考试更多的可能和DNS协议的改动。"

​—— 前欧洲收集中心IPv6主席、下一代互联网工程中心首席架构师肖恩·科尔

"互联网是由自治收集构成的,全球域名系统更需要自愿合做的精神,在全球互联网范畴推行单边主义是行欠亨的,并且持久以来人们都认为现有13个根办事器就代表了一个定名系统,其实从手艺角度更多的根办事器不会毁坏现有的定名系统。”

​—— 国际互联网名人堂入选者保罗·维克西博士 、“雪人方案”倡议人之一

“那是我国争取根办事器办理权动作的有意义的切入点!美国政府其实不会实正放弃已在全球互联网事务中确立的优势地位,操纵ICANN办理权变动和向IPv6过渡的时机,从根办事器组数量扩展动手,鞭策全球互联网办理迈向多边共治将是一个优良的初步。”

​—— 中国工程院原副院长、院士,国度物联网尺度化专家委员会组长邬贺铨

到 2016 年 25 个根办事器已经在 16 个国度架设完毕:

材料来自百度百科

那 25 台中有 3 台主根(别离在中国、美国、日本),22 台辅根。从国度散布看比旧的 13 台要分离多了,末于不再一家独大了。

中国摆设了 4 台,是所有国度中摆设数量最多的,美国部了 3 台。

(末于写完了,能看到那的老铁,手下留芳,点个赞吧!)

我是林子,欢送存眷公家号”编码胡同“订阅后续出色文章。

0
回帖 返回休闲娱乐

传闻你很懂 DNS ? 期待您的回复!

取消