关于DNS部署与根服务器的几点论述

    本文主要对根服务器的部署情况、根服务器为什么可以有几十台物理服务器共用同一个IP地址、为什么全球只有13ipv4根服务器等进行论述,其中,对一些涉及的关键技术进行重点说明。

一、DNS部署情况:

1.1部署情况

    根域名服务器(英语:root name server)是互联网域名解析系统DNS)中最高级别的域名服务器,负责返回顶级域的权威域名服务器地址。它们是互联网基础设施中的重要部分,因为所有域名解析操作均离不开它们。由于DNS和某些协议(未分片的用户数据报协议UDP)数据包在IPv4内的最大有效大小为512字节)的共同限制,根域名服务器地址的数量被限制为13个。幸运的是,采用anycast技术架设镜像服务器可解决该问题,并使得实际运行的根域名服务器数量大大增加。根服务器分布情况:

关于DNS部署与根服务器的几点论述

    截至2018-05-31,根服务器系统由12个独立根服务器运营商运营的928个实例组成。以下为根服务器管理机构及设置地点:

字母

IPv4地址

IPv6地址

自治系统编号[2]

曾用名

运营单位

设置地点
#数量(全球/地区)[3]

软件

A

198.41.0.4

2001:503:ba3e::2:30

AS19836,[2][note 1] AS36619, AS36620, AS36622, AS36625, AS36631, AS64820[note 2][4]

ns.internic.net

威瑞信

任播技术设置于多处
5/0

NSD威瑞信ATLAS

B

199.9.14.201[note 3][5][6]

2001:500:200::b[7]

AS394353[8]

ns1.isi.edu

美国南加州大学信息学研究所

任播技术设置于多处
2/0

BIND

C

192.33.4.12

2001:500:2::c

AS2149[2][9]

c.psi.net

Cogent通信

任播技术设置于多处
8/0

BIND

D

199.7.91.13[note 4][10]

2001:500:2d::d

AS27[2][11]

terp.umd.edu

美国马里兰大学学院市分校

任播技术设置于多处
50/67

BIND

E

192.203.230.10

2001:500:a8::e

AS21556[2][12]

ns.nasa.gov

美国国家航空航天局埃姆斯研究中心

任播技术设置于多处
95/96

BINDNSD

F

192.5.5.241

2001:500:2f::f

AS3557,[2][13] AS1280, AS30132[13]

ns.isc.org

互联网系统协会

任播技术设置于多处
57/0

BIND [14]

G[note 5]

192.112.36.4[note 6]

2001:500:12::d0d[note 7]

AS5927[2][15]

ns.nic.ddn.mil

美国国防信息系统局

任播技术设置于多处
6/0

BIND

H

198.97.190.53[note 8][16]

2001:500:1::53[note 9][17]

AS1508[17][note 10][18]

aos.arl.army.mil

美国陆军研发实验室

美国马里兰州阿伯丁试验场
以及加利福尼亚州圣地牙哥
2/0

NSD

I

192.36.148.17

2001:7fe::53

AS29216[2][19]

nic.nordu.net

Netnod

任播技术设置于多处
58/0

BIND

J

192.58.128.30[note 11]

2001:503:c27::2:30

AS26415,[2][20] AS36626, AS36628, AS36632[20]

不适用

威瑞信

任播技术设置于多处
61/13

NSD威瑞信ATLAS

K

193.0.14.129

2001:7fd::1

AS25152[2][21][22]

不适用

欧洲IP资源网络协调中心

任播技术设置于多处
5/23

BINDNSDKnot DNS[23]

L

199.7.83.42[note 12][24]

2001:500:9f::42[note 13][25]

AS20144[2][26][27]

不适用

ICANN

任播技术设置于多处
161/0

NSDKnot DNS[28]

M

202.12.27.33

2001:dc3::35

AS7500[2][29][30]

不适用

日本WIDE项目

任播技术设置于多处
6/1

BIND

1.2 Anycast技术

    任播(英语:Anycast)是一种网络定址和路由的策略,使得资料可以根据路由拓扑来决定送到“最近”或“最好”的目的地。

 关于DNS部署与根服务器的几点论述        关于DNS部署与根服务器的几点论述

        路由图                                                       geocast

    任播是与单播(unicast)、广播(broadcast)和多播(multicast)不同的方式,如下面路由图所示。

    在单播中,在网络位址和网络节点之间存在一一对应的关系。在客户端与媒体服务器之间需要建立一个单独的数据通道,从一台服务器送出的每个数据包只能传送给一个客户机,这种传送方式称为单播。指网络中从源向目的地转发单播流量的过程。单播流量地址唯一。每个用户必须分别对媒体服务器发送单独的查询,而媒体服务器必须向每个用户发送所申请的数据包拷贝。这种巨大冗余首先造成服务器沉重的负担,响应需要很长时间,甚至停止播放;管理人员也被迫购买硬件和带宽来保证一定的服务质量。文字单播方式下,只有一个发送方和一个接收方。与之比较,组播是指单个发送方对应一组选定接收方。

关于DNS部署与根服务器的几点论述

单播

    在广播多播中,在网络位址和网络节点之间存在一对多的关系:每一个目的位址对应一群接收可以复制资讯的节点。其中,多播指网络中一个节点发出的信息被多个节点收到。与此相对的有UnicastBroadcast,前者是指一个节点发出的信息只被一个节点收到,后者是指一个节点发出的信息被子网内所有节点收到。实际上,在数据链路层和网络层都有Multicast,通常所说的Multicast大多是针对IP的。这种技术用于多媒体应用、多用户交互(如聊天室)、软件分发等,相比与传统的Unicast可以大大提高效率。在子网内实现 Multicast 较为简单,跨越子网时需要路由器、网关等设备的支持。

关于DNS部署与根服务器的几点论述

    在任播中,在网络位址和网络节点之间存在一对多的关系:每一个位址对应一群接收节点,但在任何给定时间,只有其中之一可以接收到传送端来的资讯。

关于DNS部署与根服务器的几点论述

    在互联网中,通常使用边界网关协议(BGP)来实现任播。

    在过去,任播适合无连线协议(通常建立在用户数据报协议(UDP))多于连线导向协议(如会记录状态的传输控制协议(TCP))。然而,也有很多情况是传输控制协议使用任播的,包含运载网络如Prolexic使用传输控制协议任播。

    因此,任播通常用于提供高可靠性和负载平衡。

    Anycast IP协议中一个发送方同最近的一组接收方之间的通信。Anycast 的定义是: 当一个单播地址被分配到多于一个的接口上时,发到该接口的报文被网络路由到由路由协议度量的“最近”的目标接口上。 Anycast 允许源结点向一组目标结点中的一个结点发送数据报,而这个结点由路由系统选择,对源结点透明;同时,路由系统选择“最近”的结点为源结点提供服务,从而在一定程度上为源结点提供了更好的服务也减轻了网络负载。正是Anycast 这一通信模式的特点,使它在IP网络中具有了应用前景。首先,分布的服务共享相同的IP地址,同时在IP层进行透明的服务定位,这使得各种网络服务特别是应用层服务具有更强的透明性,比如DNSDomain Name System,域名系统),在IPv6网络中它可以共享一个熟知的IP地址,用户不需要特殊配置也不用关心访问的是哪一台DNS服务器;其次,路由系统选择了“最近”的服务,缩短了服务响应的时间,同时减轻了网络负载;最后,相同的服务在网络上冗余分布,路由系统可以提供机制选择负载相对轻的带宽相对高的路径来转发报文,这样就给用户带来了两个方面的好处:

    1) 减弱了分布式拒绝服务攻击(DDoS:Distributed Denial of Service)对用户带来的影响。当 Anycast 组中某一个成员或者几个成员受到攻击时,负责报文转发的路由器可以根据各个组成员的响应时间来决定报文应该转发到哪个成员上,这样受到攻击的成员由于没有响应,所以报文就不会被转发到那里,同时,由于 Anycast 提供的服务访问透明性,组成员也相对较难受到DDoS攻击。

    2) 减弱了网络拥塞给用户带来的影响。同上面的道理,当 Anycast 的某些组成员处在拥塞的网段时,它的响应时间就较长,报文可以被转发到响应较好的成员那里。

 

    举例说Anycast的应用,以DNS请求为例,假设全国人民同一时间发送1百万个DNS请求,他们都是发送给1.1.1.1Anycast  DNS服务器地址。

    宏观上来说,所有数据包都送达给了分布在全国各地的DNS服务器。处于各地的DNS服务器分别接收到了一定数量的DNS请求,并作出回复。这体现了Multicast的特性。

    微观上,某一个特定的DNS请求数据包,一定是发送给了某一台DNS主机,而不是同时又多台DNS主机接收到了此数据包。此为Unicast特性。

    在Anycast 环境下,总的来说,同时存在多个有效的数据包接收端,但是就某一个特定IP数据包而言,仅有一个接收端主机收到了此数据包。

 

二、多台服务器共用IP原理

2.1概述

    DNS领域的多点部署大多采用IP AnycastBGP方式,采用这种方式不需要额外采购设备,部署灵活多样。

    IP AnycastBGP的部署必须使用能够运行BGP的设备与其他自治域进行路由交换,通常使用的设备是路由器或三层交换机。然后将目标主机直接接入

    路由器或通过负载均衡设备将多台主机接入路由器,当然此时也可以采用subnet Anycast接入目标主机。而路由器向上联自治域广播目标主机共享的单播地址; 路由器可以从上联自治域接收全路由表,也可以将默认路由的下一跳指向上联自治域的路由器接口。

    这种路由器加目标主机的组合形成了单一节点,将单一节点进行复制,分别上联到不同地理位置的不同自治域中,且路由器广播地址相同,就形成了Anycast。当然,每个单一节点内部结构可以不同,只要BGP广播地址相同,目标主机提供相同服务即可。各单一节点可以使用相同的自治域号,也可以使用不同自治域号。

    Anycast名为任播,实际上也可以翻译为无处不在的单播。在如图所示的Anycast DNS架构中,Anycast节点分别吸引就近的用户访问,一旦其中的一个节点失效,通过路由的收敛,用户会自动选择另一个次优Anycast节点路径。而在形成这种分布式服务器架构后,网络中特定的某一点不复存在,取而代之的是无处不足的服务站点。

    Anycast通过以下实施方案来实现DNS根服务器的多服务器同一IP

    一部分是路由上的Anycast,这是动态路由的先天优势,在IGP范围内可利用域内路由优于外部路由的IGP特性,也可以利用设置特定的IGP Metric实现路由的优选。当IGP路由失效的情况下,通过BGP路由来选路即可获得远端统一服务,即对于多台服务器使用同一IP

    而在实际访问中,由于服务IP地被Anycast,通过服务IP地址已完全无法唯一确定一台服务器,而任何网络存在的主机必须至少有一个唯一的IP地址与其对应,目的是首先使其被管理成为可能,其次是为保证它所提供的服务能够正常运行。解决方法比较简单,即为这些服务器再配置一个可唯一标识的IP地址,服务器使用这个IP地址来完成以下工作:

    a. 对于第一类DNS,即根DNS来说,它们仅仅提供非递归查询服务,用户请求的目的地址和回应用户的源地址应该是DNS的服务IP地址,即Anycast IP地址。同时,由于第一类DNS属于全球授权树,除被管理外,它们和域内其它服务器的域数据传输也需要一个unicast的固定IP地址;

    b. 对于第二类DNS来说,它们提供递归查询服务。和第一类DNS一样,用户请求的目的地址和响应用户请求的源地址是Anycast统一服务IP地址。不同的是,它们是Cache服务器,不会存在域数据传输的需求,但恰恰由于它们所提供的递归查询服务,它们还是需要一个可唯一标识它的固定IP地址与DNS全球授权服务器进行通信。

关于DNS部署与根服务器的几点论述

    举个例子来说:

    当我们在浏览器的地址栏中输入www.someplace.com并按下回车键时,该网站将在我们的浏览器中显示(希望)几秒钟。在幕后发生了许多事情,将请求发送到该网站,以便我们可以查看内容。边界网关协议BGP)确保请求通过互联网的最佳路由到达该网站的服务器。使用UnicastDNS客户端解析程序可以配置多个DNS名称服务器目标。如果解析程序没有收到列表中第一个服务器的任何响应,它通常会在切换到解析程序列表中的第二个服务器(和后续服务器)之前等待超时值。下一次解析器必须执行查找时,它不会记住列表中的服务器无响应,并且它将开始查询列表中的第一台服务器,即使它仍然不可用。根据客户端的操作系统,每次在解析器列表中轮换时尝试失败的服务器可能需要一到五秒钟的时间。

    使用AnycastDNS客户端解析程序实际上消除了此延迟,因为解析由路由协议处理。在下图中,显示了配置了任播DNS IP地址123.10.10.10的单个DNS客户端工作站对使用同一个任播IP地址部署的最近的三个DNS名称服务器执行DNS解析。 

关于DNS部署与根服务器的几点论述

    客户端的DNS解析器可以解析上述三个DNS服务器中的任何一个。由于路由拓扑的原因,第3层路由会通过路由器R1发送我们的DNS客户端数据包。如果路由器R1或服务器A发生故障,我们的DNS客户端数据包将自动通过路由器R2R3重新路由到下一个最近的DNS服务器。此外,我们的服务器A的路由将从路由表中删除,从而阻止进一步使用该名称服务器。服务器A将不会被使用,直到其被恢复并且IP任播地址路由重新注入网络。

2.2 IGP

    IGP(内部网关协议)是在一个自治网络网关主机路由器)间交换路由信息的协议路由信息能用于网间协议IP)或者其它网络协议来说明路由传送是如何进行的。IGP协议包括RIPOSPFIS-ISIGRPEIGRP

2.3 BGP

    边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓朴图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。

    自治系统:autonomous system。在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。

    ——SPTN 自治系统号10(传统域)  自治系统号20SDN域)

    一个自治系统就是处于一个管理机构控制之下的路由器和网络群组。它可以是一个路由器直接连接到一个LAN上,同时也连到Internet上;它可以是一个由企业骨干网互连的多个局域网。在一个自治系统中的所有路由器必须相互连接,运行相同的路由协议,同时分配同一个自治系统编号。自治系统之间的链接使用外部路由协议,例如BGP.

    多出口的自治系统

    多出口的自治系统(Multihomed AS)是指与其它的自治系统具有多于一个连接的自治系统。一旦那些连接中的某一个完全失效,这个多出口的自治系统也仍然能保持和互联网络的联系。但是,这类自治系统不允许与自己所连接的其它任一个自治系统穿过自己来访问另一个自治系统。

    如图所示,AS1AS2AS3AS4AS5是五个自治系统,如果自治系统AS2AS3的连接发生了故障,其他的自治系统之间的连接不受影响。而且如果自治系统AS4想通过AS2来连接AS1,这是不可能实现的。

关于DNS部署与根服务器的几点论述

                        末端自治系统

    末端自治系统(stub AS)是指仅与一个其它自治系统相连的自治系统,如图2中的自治系统AS1它仅仅与自治系统AS2相连接。如果该AS的路由策略与其上游的AS完全相同,这说明该AS其实浪费了一个ASN。这种情况更常发生在互联网路由环境中:表面上的末端自治系统可能实际上与其它未被公共路由显示服务器反映出来的AS之间存在着对等互联关系。具体的例子如(美国)财政和交通部门的专用互联网络。

关于DNS部署与根服务器的几点论述

                        中转自治系统

    中转自治系统是指一个自治系统通过自己来为几个隔离开的网络提供连通服务。即,网络A可通过作为中转AS的网络B来连接到网络C。比如图1中的自治系统AS1可以通过自治系统AS2连接到自治系统AS4。所有的ISP都是这类的中转自治系统,因为这原本是它们的根本业务目的。因为我们认为ISP是在向客户网络贩售中转服务,所以使用中转自治系统这个术语来表示。

    BGP的结构和功能

    BGP用于在不同的自治系统(AS)之间交换路由信息。当两个AS需要交换路由信息时,每个AS都必须指定一个运行BGP的节点,来代表AS与其他的AS交换路由信息。这个节点可以是一个主机。但通常是路由器来执行BGP。两个AS中利用BGP交换信息的路由器也被称为边界网关(Border Gateway)或边界路由器(Border Router[1] 

    由于可能与不同的AS相连,在一个AS内部可能存在多个运行BGP的边界路由器。同一个自治系统(AS)中的两个或多个对等实体之间运行的BGP 被称为 IBGPInternal/Interior BGP)。归属不同的AS的对等实体之间运行的BGP称为EBGP External/Exterior BGP)。在AS边界上与其他AS交换信息的路由器被称作边界路由器(border/edge router)。在互联网操作系统(Cisco IOS)中,IBGP通告的路由的距离为200,优先级比EBGP和任何内部网关协议(IGP)通告的路由都低。其他的路由器实现中,优先级顺序也是EBGP高于IGP,而IGP又高于IBGP

    BGP属于外部网关路由协议,可以实现自治系统间无环路的域间路由。BGP是沟通Internet广域网的主用路由协议,例如不同省份、不同国家之间的路由大多要依靠BGP协议。BGP可分为IBGPInternal BGP)和EBGPExternal BGP)。BGP的邻居关系(或称通信对端/对等实体)是通过人工配置实现的,对等实体之间通过TCP(端口179)会话交互数据。BGP路由器会周期地发送19字节的保持存活keep-alive消息来维护连接(默认周期为30秒)。在路由协议中,只有BGP使用TCP作为传输层协议。

 

二、只有13台根服务器原因

    实际上,13DNS根服务器这一说法并不准确,应该是13DNS根服务器IP,因为所谓的a-mDNS根服务器实际上是指服务器集群,且这个集群是分布式的。至于为何是13个,首先我们从RFC中指定数据包大小为512字节出发进行分析。

    我们知道,启动查询是名称服务器启动时获取的根名称服务器IP地址列表执行的查询。这样做是为了验证(并可能更新)它所具有的内置地址列表。 DNS初期,RFC 791.中指定最大数据包大小被设置为512字节,因此该列表需要适合512字节。

    返回的消息看起来像这样。在这里,只列出{ab} .root-servers.net并删除一些现代功能AAAAOPT记录。

;; QUESTION SECTION:;.              IN  NS

;; ANSWER SECTION:

.           518400  IN  NS  a.root-servers.net.

.           518400  IN  NS  b.root-servers.net.

;; ADDITIONAL SECTION:

a.root-servers.net. 3600000 IN  A   198.41.0.4

b.root-servers.net. 3600000 IN  A   192.228.79.201

    那么这条消息有多大?DNS数据包标题是12个字节。问题部分的大小是:

    root-label001个字节;

    class2个字节;

    的qtype2个字节。

    总共5个字节。现在答案部分中的一个资源记录的大小是:

    root-label1个字节;

    ttl4字节;

    class2个字节;

    type2个字节;

    rdlength2个字节

    nameserver name<1>a<12>root-servers<3>net<0>20个字节。

    总计:31个字节。其他记录可以采用DNS压缩,所以随后的记录具有root-labelttlclasstyperdlength和然后<1><letter><compression pointer>,这是4个字节,因此这涉及到:15个字节。

    附加部分中的A记录涉及:

    nameserver name<1>a<12>root-servers<3>net<0>20个字节;

    ttl4字节;

    class2个字节;

    type2个字节;

    rdlength2个字节;

    address4字节。

    但是这里的名字可以完全压缩,所以我们可以使用2个字节作为压缩指针,而不是20个字节。所以这总计16个字节。同样的数据包,但只有大小:

12       ;; ->>HEADER<<-

 5       ;; QUESTION SECTION:31 + 15n ;; ANSWER SECTION:

     16m ;; ADDITIONAL SECTION:

    通常m = n,所以方程变成:

48 + 31n = 512

       n = 464 / 31 = 14.96

    根据Jaap Akkerhuis说法,比尔曼宁表示他们希望保守,为未来的扩展留下一些空间。

    原始列表不使用root-servers.net后缀,但小于512字节。当列表被扩展时,root-servers.net后缀被创建以节省空间(压缩)并且使得有可能具有14个根服务器,其中13个已经被分配。根据Bill Maning的说法,这个选择早于选播,所以需要大量的服务器:

    这在播之前,因此需要慎重选择所有剩余的运营商。事实证明,重组并没有按计划进行,VSGN有两个,而ICANN有一个。最初的想法是在亚洲和南美洲的第二个运营商......

    此外,从一个混合名称到另一个具有共同后缀和512字节计算的步骤一步完成。


    总结一下,互联网域名系统 在层次结构的根部使用13DNS服务器集群有几个原因:13号被选为网络可靠性和性能之间的折中,13是基于互联网协议(IP的约束,版本4IPv4)。

    尽管IPv4中只存在13个指定的DNS根服务器名称,但实际上,这些名称中的每一个都不代表单个计算机,而是代表由多台计算机组成的服务器群集。这种使用集群可提高DNS的可靠性,而不会对其性能产生任何负面影响。

    由于新出现的IP版本6标准对单个数据报的大小没有如此低的限制,我们可以预计,随着时间的推移,未来的DNS将包含更多的根服务器来支持IPv6

 

四、参考资料

    中文RFC文档目录:http://man.chinaunix.net/develop/rfc/default.htm

    根服务器操作协会root-servers.org

    Why 13 DNS root servers:

    https://miek.nl/2013/november/10/why-13-dns-root-servers/

    RFC791:http://www.ietf.org/rfc/rfc791.txt

            为什么DNS根服务器只有13台:https://www.zhihu.com/question/22587247

    BGP、IBGP、EBGP、IGP、EGP:

    https://blog.****.net/zhaomax/article/details/52399403