# DNS域名

* [DNS介绍和DNS查询方式](#DNS介绍和DNS查询方式)
* [如何设计一个DNS](#如何设计一个DNS)
* [HTTPDNS原理](#HTTPDNS原理)
* [域名防劫持](#域名防劫持)

***

## DNS介绍和DNS查询方式

域名系统（英文：Domain Name System，缩写：DNS）是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库，能够使人更方便地访问互联网。DNS使用TCP和UDP端口53\[1]。当前，对于每一级域名长度的限制是63个字符，域名总长度则不能超过253个字符。

开始时，域名的字符仅限于ASCII字符的一个子集。2008年，ICANN通过一项决议，允许使用其它语言作为互联网顶级域名的字符。使用基于Punycode码的IDNA系统，可以将Unicode字符串映射为有效的DNS字符集。因此，诸如“XXX.香港”、“XXX.台湾”的域名可以在地址栏直接输入并访问，而不需要安装插件。但是，由于英语的广泛使用，使用其他语言字符作为域名会产生多种问题，例如难以输入，难以在国际推广等。

域名必须以英文句号“.”结尾，DNS服务器已经可以自动补上结尾的句号 早期的域名必须以英文句号“.”结尾，例如，当用户访问 [www.wikipedia.org](http://www.wikipedia.org) 的HTTP服务时必须在地址栏中输入：<http://www.wikipedia.org.，这样DNS才能够进行域名解析。如今DNS服务器已经可以自动补上结尾的句号。>

域名由一或多个部分组成，这些部分通常连接在一起，并由点分隔，例如zh.wikipedia.org。最右边的一个标签是顶级域名，例如zh.wikipedia.org的顶级域名是org。 域名层次结构中，顶级域名下面是二级域名，它位于顶级域名的左侧。二级域名下面是三级域名，它位于二级域名的左侧。 例如，在zh.wikipedia.org中，顶级域名是org，wikipedia是二级域名，zh是三级域名

DNS通过允许一个名称服务器把他的一部分名称服务（众所周知的zone）“委托”给子服务器而实现了一种层次结构的名称空间。此外，DNS还提供了一些额外的信息，例如系统别名、联系信息以及哪一个主机正在充当系统组或域的邮件枢纽。

任何一个使用IP的计算机网络可以使用DNS来实现他自己的私有名称系统。尽管如此，当提到在公共的Internet DNS系统上实现的域名时，术语“域名”是最常使用的。

这是基于504个全球范围的“根域名服务器”（分成13组，分别编号为A至M）\[2]。从这504个根服务器开始，余下的Internet DNS名字空间被委托给其他的DNS服务器，这些服务器提供DNS名称空间中的特定部分。

DNS查询有两种方式：递归和迭代。DNS客户端设置使用的DNS服务器一般都是递归服务器，它负责全权处理客户端的DNS查询请求，直到返回最终结果。而DNS服务器之间一般采用迭代查询方式。

以查询 zh.wikipedia.org 为例： 1、客户端发送查询报文"query zh.wikipedia.org"至DNS服务器，DNS服务器首先检查自身缓存，如果存在记录则直接返回结果。 2、如果记录老化或不存在，则： 1、DNS服务器向根域名服务器发送查询报文"query zh.wikipedia.org"，根域名服务器返回顶级域 .org 的权威域名服务器地址。 2、DNS服务器向 .org 域的权威域名服务器发送查询报文"query zh.wikipedia.org"，得到二级域 .wikipedia.org 的权威域名服务器地址。 3、DNS服务器向 .wikipedia.org 域的权威域名服务器发送查询报文"query zh.wikipedia.org"，得到主机 zh 的A记录，存入自身缓存并返回给客户端。

根DNS的名字和IP都是什么？

在这个网址： <https://www.internic.net/domain/named.root>

打开可以看到，里面有13个根的名字和IP，其名字从A.root-servers.net到M.root-servers.net。 A开头那个简称A根，是主根，其他12个（B、C、D、E、F、G、H、I、J、K、L、M）是辅根。

参考\
<https://cloud.tencent.com/developer/article/1683972>

***

## 如何设计一个DNS

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

2、EGP 外部网关协议（Exterior Gateway Protocol）是AS之间使用的路由协议，最初于1982年由BBN技术公司的EricC.Rosen及DavidL.Mills提出。其最早在RFC827中描述，并于1984年在RFC904中被正式规范。EGP是一种简单的（网络）可达性协议，其与现代的距离-矢量协议和路径-矢量协议不同，它仅限适用于树状拓扑的网络。 由于EGP存在很多的局限性，IETF边界网关协议工作组制定了标准的边界网关协议（BGP），当前被广泛使用。

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

<https://www.infoq.cn/article/how-to-design-dns/>

参考 <https://www.infoq.cn/article/how-to-design-dns/> <https://github.blog/2017-05-31-dns-infrastructure-at-github/>

***

## HTTPDNS原理

[HTTPDNS原理](https://zhuanlan.zhihu.com/p/270596378)\
[DNS与HTTPDNS](https://www.cnblogs.com/jimmyhe/p/11279762.html)\
[HTTPDNS](https://help.aliyun.com/document_detail/30103.html)

***

## 域名防劫持

域名劫持是互联网攻击的一种方式，通过攻击域名解析服务器（DNS），或伪造域名解析服务器（DNS）的方法，把目标网站域名解析到错误的IP地址从而实现用户无法访问目标网站的目的或者蓄意或恶意要求用户访问指定IP地址（网站）的目的。

[常见的DNS域名劫持方式及解决方法](https://cloud.tencent.com/developer/article/1768189)\
[域名劫持原理与几种方法](https://cloud.tencent.com/developer/article/1197032)\
[域名劫持](https://baike.baidu.com/item/%E5%9F%9F%E5%90%8D%E5%8A%AB%E6%8C%81/7657893)
