前言
生活中常常看到别人配置网络的时候提到了一个叫做dns的东西,自己搭建网站的时候又要配置一个叫做dns的东西,之前我真的对这些系统之间的原理,联系与区别一窍不通,索性趁着马上要上大学,先提前自己研究一下,研究完了做成博客总结一些
什么是DNS
DNS系统,全名Domain Name System,是互联网上的一项服务,这个服务对于整个互联网非常的重要。在网络上,假如计算机之间要进行通信操作,计算机得知道要通信的对方的地址是什么,这个地址就是ip地址,IP地址分为ipv4和ipv6两种,在此不加以赘述。(一个简单的小例子 192.168.1.1便是一个ip地址,这是一个内网ip地址)。但是假如人们要上网,让人一个个的输入ip地址来访问网站,这样子十分不方便,又难记,又容易出现问题。于是 保罗·莫卡派乔斯(Paul V. Mockapetris)便发明了域名系统
域名系统是将一串网址(一些有意义的字符上 如www.baidu.com)映射到一个ip的服务,通过这个服务,帮助人们免于记忆繁杂的ip地址,并且这样做还有很多其他的好处。。。。
DNS工作原理
要解释清除这个原理,我们从日常上网的过程来进行分析。
假如我们现在要访问百度这个网址,我们的设备会进行如下的操作
1 首先,我们输入https://www.baidu.com
2 系统向DNS服务器发送查询请求(大部分情况这个DNS服务器由ISP,即你的网络服务提供商,比如说移动,电信等等,假如你用的移动的宽带,在你接入WIFI的时候,路由器便会将该网络dns解析服务器的ip地址传送给你的系统,这个一般不需要人为干预,大部分的操作系统允许用户自己决定使用哪个dns服务器)
3 该dns服务器收到请求之后,先会检查自己的缓存,检查请求的域名在缓存中是否存在,假如有的话,便会直接返回缓存中的结果,假如没有的话,该dns便会查询其上游的dns
4上游查询上游,这样子一直递归查询。知道有一台服务器(在这我暂且称之为A)查询到根域名服务器,根域名服务器不会进行查询,但是他会返回负责各顶级域名的服务器的地址,比如baidu.com,则会返回负责解析.com域名的服务器的地址,接下来A便会询问负责解析.com域名的服务器(简称.com 的权威域名服务器),这个服务器便会回答负责解析baidu.com这个域名的服务器的地址,这个地址在租用域名的时候会进行设置。
5,A继续查询,向负责解析baidu.com这个域名解析的服务器询问,返回得到百度的ip地址,接下来A将这个ip地址(或者是什么其他的,这个在下文说)返回给你的系统,你的系统根据这个IP地址来创建连接,开始与远程服务器进行通信。
——————————————————
假如你要访问一个子域名,比如666.ziyuan.baidu.com,在第5步的过程中就有那么一些不一样了。
在第五部中,有两种情况
情况1:负责解析baidu.com这个域名解析的服务器直接将666.ziyuan.baidu.com的ip地址返回回来,
情况2:负责解析baidu.com这个域名解析的服务器将负责ziyuan.baidu.com解析的服务器的地址返回给A
A再次发送请求给负责ziyuan.baidu.com域名解析的服务器,查询666.ziyuan.baidu.com的地址。负责ziyuan.baidu.com域名解析的服务器将这个ip地址返回给A,A将这个地址给到你的系统。
(经过我实际操作总结出上述两种结果)
以上便是你要上网的一个步骤——域名解析,其他的过程再此不加赘述,接下来便讲各个过程中每个服务器的作用
权威域名服务器
权威域名服务器,便是负责解析其负责的网段的服务器。其实一个域名可以分为根域名,一级域名,二级域名。。。。。无限套娃下去。比如说666.ziyuan.baidu.com其实可以写作666.ziyuan.baidu.com. 这个点代表根(根域名,就是那根域名解析服务器)。
接下来便是.com,这个.com叫做一级域名,.com是由ICANN【(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构】分配给一个公司 ,叫做 VeriSign 来管理,假如你要注册个点.com域名,那么你先给负责你域名注册的公司、组织(如godaddy,百度,阿里,腾讯)付钱,负责你域名注册的公司、组织会向负责.com的这个公司(其他域名可能是个组织)和ICANN付钱,剩下的钱就由你的注册机构收下了。
接下来就是baidu,这个是二级域名,这个二级域名可以由公司、个人购买、获得,在购买、获得时,负责你域名注册的公司、组织,便会在交完钱之后向负责.com的这个公司发出申请,注册,将NS记录写入到负责.com解析的服务器中,这个NS记录一般指向负责你域名注册的公司、组织的dns权威域名服务器(域名所有者可以更改)。然后域名所有者便可以在负责你域名注册的公司、组织的控制台来进行编辑解析记录(假如更改了ns记录,在ns记录指向的权威域名服务器所在的公司或者组织进行更改),比如将baidu.com指向哪里。。。。
然后就是一层一层的解析了。
权威域名服务器可以设置如下的记录用来应答(以下界面为阿里云解析的截图)(可能不全)
A记录:将域名指向一个ipv4地址
AAAA记录 将域名指向ipv6地址
CNAME:设置某个域名是另一个域名的别称(指向另一个域名)
NS:设定该子域名的权威域名服务器
MX:邮箱服务器指向
TXT:返回文本,常用于校验域名所有权
SRV:记录特定服务的服务器。其相较普通服务器多了个端口
CAA:部分证书签发用的记录
根域名服务器
按照上文的解析过程,根域名服务器不负责解析请求,但是其负责指向顶级域名的权威域名服务器。
递归域名解析服务器递归到的最后一个里头会内置根域名服务器的地址
根域名服务器分文IPv4和ipv6的
ipv4的根域名服务器总共共有13台(虽然说这个数字不吉利,但是由于互联网底层包的字节限制,最多只能有13台,不可能有14台)。
ipv4的根域名服务器分为1台主根服务器和12台辅根服务器。其实通过ip任播(anycast协议)等技术克隆了某些根服务器,有几个根服务器其实由非常多台服务器负责,所以实际的数量(加上克隆)远远大于13台,但本体(IP地址)只有13台,下面附上几个根域名服务器的地址。
具体详情可以前往如下页面查看:https://root-servers.org/
服务器名 |号|记录类型|ip地址(v4/v6)
a.root-servers.net. 518400 IN A 198.41.0.4
b.root-servers.net. 518400 IN A 199.9.14.201
c.root-servers.net. 518400 IN A 192.33.4.12
d.root-servers.net. 518400 IN A 199.7.91.13
e.root-servers.net. 518400 IN A 192.203.230.10
f.root-servers.net. 518400 IN A 192.5.5.241
g.root-servers.net. 518400 IN A 192.112.36.4
h.root-servers.net. 518400 IN A 198.97.190.53
i.root-servers.net. 518400 IN A 192.36.148.17
j.root-servers.net. 518400 IN A 192.58.128.30
k.root-servers.net. 518400 IN A 193.0.14.129
l.root-servers.net. 518400 IN A 199.7.83.42
m.root-servers.net. 518400 IN A 202.12.27.33
a.root-servers.net. 518400 IN AAAA 2001:503:ba3e::2:30
b.root-servers.net. 518400 IN AAAA 2001:500:200::b
c.root-servers.net. 518400 IN AAAA 2001:500:2::c
d.root-servers.net. 518400 IN AAAA 2001:500:2d::d
e.root-servers.net. 518400 IN AAAA 2001:500:a8::e
f.root-servers.net. 518400 IN AAAA 2001:500:2f::f
g.root-servers.net. 518400 IN AAAA 2001:500:12::d0d
h.root-servers.net. 518400 IN AAAA 2001:500:1::53
i.root-servers.net. 518400 IN AAAA 2001:7fe::53
j.root-servers.net. 518400 IN AAAA 2001:503:c27::2:30
k.root-servers.net. 518400 IN AAAA 2001:7fd::1
l.root-servers.net. 518400 IN AAAA 2001:500:9f::42
m.root-servers.net. 518400 IN AAAA 2001:dc3::35
当然,经过ipv6的改进,ipv6的根域名服务器就没有那么少了。
递归解析服务器
这个也就是我们在自己设备上填写dns地址,用来跟我们的设备提供dns解析服务。这个服务器一般是由你的网络提供商提供。以下是递归解析服务器会返回来的几种应答(可能不全)
提示:假如要在网上搜相关资料,请搜索 DNS-RCODE
以下是几种DNS-RCODE
NOERROR :域名解析是成功的!
FORMERR:请求的格式是错误的,人家没法理解你的请求。(我没见过这种错误)
SERVFAIL:解析失败(一般失败)(大概率是服务器自身的问题)
NXDOMAIN:哎呀,这个域名没找到。
NOTIMP:名称服务器不支持指定的操作码(我没见过这种错误)
REFUSE:我拒绝了你,却一笑而过(服务器拒绝了你)
YXDOMAIN:确实存在一些不应该存在的名称。(我没见过这种错误,也找不到相关资料)
NOTAUTH:服务器对“区域”部分中命名的区域没有权威性(我没见过这种错误)
注意一下,因为标准的dns是通过udp协议的(通过53端口)。而udp协议是不管消息是否到达了目标的,所以,在dns传输的过程中数据可能会错误或者损坏,异常。各个dns解析之间的通信也可能出现错误异常导致问题发生,返回错误的结果导致无法访问某网站。当然在你的系统与递归域名解析服务器中间也有很多种方法防止这样的事情发生,比如说DOH(DNS OVER HTTPS)等等,还有通过DNSSEC来验证域名解析等等方法
dns记录返回过来会带上一个ttl值,这个值代表的时间是缓存时间,即这个数据在递归dns解析服务器上面存在多少时间。
DNS与CDN(EDNS,ECS)
CDN全称内容分发网络,是一种让用户就近获得网站数据的技术(本博客的图片使用了CDN)。CDN 指的是一组分布在各个地区的服务器这些服务器存储着数据的副本,服务器可以根据哪些服务器与用户距离最近,来满足数据的请求,加快用户打开网站的速度。而服务器如歌判断用户的位置,这就跟DNS有关了
这个技术叫做EDNS
在请求时候,递归域名服务器将会将请求的用户的ip发给上游的dns(假如上游支持的话),这样一层层的到了权威域名服务器,接下来权威域名服务器通过这个ip地址区分地区,网络提供商来返回不同的结果,比如说阿里的云解析dns就支持这个功能,如下图(因为本人穷,没开企业版,只能按线路解析{哭晕})
这样子便可以按照用户地域来就近分配服务器了
DNS与DDOS
在上文的解析过程中,要上某个网站,第一步就是要通过dns来解析这个网站的ip地址,假如通过大量的请求(DDOS)来吧负责解析这个网站的dns给累垮掉,这个网站无论后面什么流量清洗,什么举世无双的防御方法,统统没有效果了,根本找不到你的网站。
而且因为udp的特性,还可一通过DNS放大攻击来更快的累垮目标的dns,所以选一个好的权威域名解析服务器是重中之重,或者将ttl设大一些(太大也不好,具体看使用场景吧),不然网站直接没了。
感谢读完,假如文章中内容有错误或者纰漏,请在评论区留言或发送邮件到admin@q2019.org