一 DNS协议
众所周知,互联网是众多电脑和各种网络设备的汇聚,我们要想访问特定的网站,就需要知道这个网站的地址,就像我们要寄封信就要知道寄信的目的地址一样,在网络中我们用IP来标识每台网络设备,而IP一般是形如“192.168.0.1”,这种ipv4地址,还有ipv6地址更长些,128位,显然记住众多网址是不可能的,对于数字来说,人类更擅长记住有意义的单词,所以就有了域名,类似"www.baidu.com",初期域名和ip的对应关系保存在hosts文件中,现在有些域名,我们基于特定的目的,比如科学上网,将固定的ip和域名的对应的关系配置在操作系统中一个叫hosts的文件中,格式如下:
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
随着网站的增多,都配置在这个文件中显然不合适,而且由于网站对应的服务器的ip可能是变动的,比如增加一台服务器,我们每次都去修改hosts配置文件也不现实,所以就有了DNS(Domain Name system)系统,看英文名字是域名系统,主要是实现IP和域名的转换。DNS系统采用的是DNS协议,DNS协议是完成域名和IP转换的应用层协议。
注意,ip和域名并不是一一对应的关系,是多对多的关系,多个域名可以指向同一个ip,一个域名也可以对应多个ip,这就是负载均衡的实现方式之一,用户请求时候,随机找一个对应此域名的ip或根据所在网络找个访问最快的ip返回给用户,提升用户上网体验。
二 DNS解析过程
2.1 DNS系统采用多层结构
世界上的网址很多,如果都在一个服务器上保存,肯定性能很差,为此DN系统是采用分层设计思想,解析的时候是通过逐层解析,整个层次结构如下图:
DNS结构图,图来自互联网
- 最上层的. 标识根域名服务器,由世界上13个DNS系统组成,统称 DNS根服务器,名字从“A”到“M”,这里面说13个DNS系统,是说有13个IP地址代表的系统,并不是说物理机器有13个,有些ip是虚拟ip,做的是负载均衡,截止到2020年3月2日,现有根服务器对应的物理实例有1091个,中国有35个。
为什么只有13个DNS系统,是因为UDP协议原因,由于DNS协议主要交互是采用UDP协议,报文在物理网络中传输,各个设备支持的最大传输长度是不同的,以太网的传输帧最大长度为1500个字节,超过这个字节,在IP层就需要分包和重组;再加上包在传输过程中经过不同的网络,所以MTU有的达不到1500字节,为保证UDP协议不被分包,最大不要超过576个字节,实际使用中很多设置最大为512个字节,加上DNS协议的限制,所以最大不能超过13个DNS系统,超出将存不下,详情看最后参考。
-
顶级域名 根域名服务器本身并不做解析工作,工作委派给com,edn,gov等顶级域名,顶级域名用来指示地区或组织,比如com是商业公司,edu为教育结构,net为网络网络公司等,也不一定是严格遵照,只是大概的划分。
-
二级域名 为个人或组织的域名,顶级域名的解析工作委托给二级域名来做解析。二级域名服务器可以进一步委派,也可以直接存储域名的各个主机记录,比如:
www.163.com
在163.com
这个域名中保存着www
对应的ip,这个不是一个ip,是多个ip,这种IP和域名的直接对应在DNS里面叫A记录。
注意这里面的www
这个主机存在163.com
这个域中,顶级域名服务器会把查询www.163.com
的请求委托给163.com
这个二级域名服务器,由它负责处理。 -
三级或其他更低级域名 一般标识具体的ip主机了,如果超过三级,也同样可以委托二级域名管理,一般购买个域名后,下面级别的域名都是你的,你可以申请无限级别个,理论上太长了难记,不会被搜索引擎收录。
2.2 DNS中记录说明
DNS记录包含多种类型,说明如下:
类型 | 全名 | 介绍 |
---|---|---|
A | Host | 保存的是域名和IP的对应 |
AAAA | IPV6 host | 保存的是IPv6的地址 |
CNAME | Canonical Name | 保存的是主机的别名 |
MX | Mail Exchanger | 对应是域名邮件服务器地址 |
SOA | Start of Authority | 授权机构记录,记录ns中哪个是主服务器 |
RTP | PTR Record | 根据记录反查域名 |
TXT | Text Record | 一般用于备注说明联系电话等 |
NS | NS Record | 记录那个域名服务器可以解析该域名的子域名 |
2.3 DNS请求过程
域名和ip映射有两种,刚才说的在hosts里面的叫静态域名解析,通过DNS解析获得IP的叫动态解析域名。
一般主机的解析过程都是先进行静态解析,解析不成功再进行动态解析,显然静态解析更快速,有些破解软件,是通过在hosts中更改域名和ip的映射方法来进行破解的。
整个解析过程如下图:
解析DNS 图来自互联网
步骤说明:
- 用户在浏览器中输入网址:
www.example.com
按确定继续。 - 在本地hosts找不到后,发起DNS查询请求,请求的是本地配置的,一般为ISP供应商提供的DNS服务器地址,此DNS查询缓存和本地域,如果找不到,则DNS服务器查询根服务器。
- 根域名根据后缀使用引荐来回复ISP的DNS服务器。
- ISP的DNS服务器将查询发送到.COM DNS服务器, .COM DNS服务器使用引荐来回复ISP DNS的请求,地址为example.com服务器。
- ISP服务器 请求example.com这个域名服务器,一般是53端口提供服务.
-
example.com
根据www.example.com
进行查询,查询到A记录,对应的地址是192.0.2.44返回给ISP DNS服务器。 - ISP DNS 返回地址给浏览器。
- 浏览器通过地址和端口请求Web服务器。
- web服务器将请求网页返回给浏览器。
在linx通过dig命令,方便查看访问过程:
部分截图:
dig 请求根域名 .com 顶级域名 二级域名
三 DNS 常用命令
- 在linux中dns服务器配置在/etc/resolve.conf中的,可以通过:
# cat /etc/resolv.conf
options timeout:2 attempts:3 rotate single-request-reopen
; generated by /usr/sbin/dhclient-script
nameserver 100.100.2.138
nameserver 100.100.2.136
- 查询特定dns解析域名过程
dig @8.8.8.8 www.163.com +trace
- 查询域名对应ip:
#1.ping
ping www.163.com
#2. host
host www.163.com
#3.nslookup
nslookup www.163.com
#4. dig
dig www.163.com
- 查找各种类型的记录:
#查询邮件服务器
dig 163.com MX
#查询TXT类型记录
dig 163.com TXT
网友评论