2

浅谈DNS原理

Posted by 撒得一地 on 2016年9月3日 in 杂谈

在介绍 DNS 前,先提供几个纯净无劫持,支持科学上网的 DNS:几个纯净的 DNS

DNS是什么?

DNS是"Domain Name System"的简称,翻译过来就是"域名系统"。

DNS作用?

网友们应该都知道,每天我们访问的各类网站都是通过其对应的域名进行访问,比如你现在访问我的博客,也是通过:http://coderschool.cn进行访问。但是对于互联网本身来说,其底层基石是ip。ip是 "Internet Protocol" 的缩写,中文是 "互联网协议" 的意思。包括我们日常访问的各类软件,QQ、微信、浏览器等,都是靠 ip 地址进行网络数据传输的。

ip地址是一长串字符(如10.1.1.1),对机器来说,很容易识别它。但是如果让我们去记住这一长串地址,估计头要炸了。于是后来又发明了 DNS。有了 DNS,人类就不需要记住长长的一串 IP 地址,而只需记住“域名”(域名通常更短,也更具有可读性,比如weibo.com)。

有了域名后,比如你要访问某个网站,那么你只要输入相应的域名即可。然后电脑会根据你电脑本地的 DNS 缓存或者访问电脑事先设置好的 DNS 服务器来把域名 "翻译" 成 "ip地址"。这个过程叫做 "域名解析/DNS解析"。

域名结构

一个完整的域名由2个或2个以上的部分组成,各部分之间用英文的句号“.”来分隔,最后一个“.”的右边部分称为顶级域名(TOP-Level Domain 简称 TLD,也称为一级域名),最后一个“.”的左边部分称为二级域名(SLD),二级域名的左边部分称为三级域名,以此类推。[摘自百科]。

域名是按照“树形结构”组织的。域名的结构和目录结构很类似,目录结构是用“斜杠”作分隔符,而域名是用小数点作分隔符。两者的主要区别在于:目录结构名称的形式是从左到右(上级在左,下级在右),而域名是从右到左(上级在右,下级在左)。

因为DNS解析域名时是根据树状结构来解析,查询的时候根据域名从右到左查询,域名每一级有独立的一个或多个服务器。而访问所有域名理论上都是由根域名开始解析的。为了方便起见,我们在域名最后面加个".",对于实际访问,这个"."是可以省略的。

以 www.linuxcast.net. (末尾的‘.’代表根服务器)为例:

域名结构

www.linuxcast.net的上级域名是linuxcast.net
linuxcast.net的上级域名是.net
.net就被称为顶级域名。

域名如何解析?

每当电脑需要翻译某个域名,就找这个域名服务器查询,然后域名服务器会告诉你的电脑,要查询的域名对应的IP地址是什么。下面以http://www.coderschool.cn/这个为例:

1.首先根据你输入的网址,提取出域名,本例也就是www.coderschool.cn

2.如果你在系统中配置了 Hosts 文件,那么电脑会先查询 Hosts 文件,看这个 codershcool.cn 是否已经在 Hosts 里面有了对应的记录。如果有,直接就可以拿到该记录中的 IP地址,过程就结束了。

3.如果 Hosts 里面没有这个别名,那么电脑会看你有没有设置域名服务器(DNS 服务器)。如果你的系统没有设置域名服务器,那浏览器直接会报错,说网站的域名无法解析。过程就结束了。

4.如果你设置过“域名服务器”(比如你本地设置的是 8.8.8.8),那么电脑会向这个域名服务器发送一个域名查询(DNS query)的请求,然后等候域名服务器的回应。

5.如果域名服务器始终没有回应(比如域名服务器挂了,或域名服务器的IP填错了,或请求被 GFW 拦截了),那么电脑还是没辙(浏览器会报错)。

6. 如果域名服务器回应了,那么你的电脑就可以根据域名服务器的应答信息,得到该域名的 IP地址。之后浏览器就会向这个 IP地址 对应的 Web 端口发送 HTTP 请求。

上面的4、5、6步骤概要的说明了解析过程,其实解析过程是比较复杂的,如果你电脑设置的 DNS 域名服务器查不到相应的记录,那么就会该 DNS 就会进行域名同步过程,首先就会去查询根(".")域名服务器,然后:

1.根服务器返回 cn 服务器的地址

2.然后本地 DNS 服务器再去查询 cn 服务器

3.cn 服务器返回 coderschool.cn 的服务器地址

4.然后本地 DNS 再向 coderschool.cn 发送请求

5.coderschool.cn 返回 www 主机给本地 DNS

6.本地 DNS 返回 www.coderschool.cn 的地址给客户端。然后本地 DNS 会对这个查询记录进行缓存,这样下次你再查询这条记录的时候就可以直接返回结果给客户端,这样可以节省查询效率。但是缓存是有时间限制的。

域名的缓存

我们平时使用的域名服务器,技术术语叫"递归服务器"。上面介绍的本地电脑设置的 DNS 服务器地址就是 "递归服务器"。

“递归服务器”的内部通常会有一个 DNS记录 的缓存——这个缓存是为了提高查询效率的。当某台电脑向递归服务器发起域名查询时,递归服务器首先看自己的缓存中有没有该域名的记录,如果有,直接就回复该记录给查询的电脑。

缓存的周期

因为互联网上的域名信息是有可能发生变化的。比如增加了某个新域名,注销了某个旧域名,或者某个域名对应的 IP地址 变了。所以,“递归服务器”上保留的缓存中,每一条域名记录都有一个生命周期(可能是几分钟,也可能是几小时)。如果某条记录的生命周期过了,就会被删除,然后重新同步。

上一篇:

下一篇:

相关推荐

2 Comments

Comments are closed. Would you like to contact the author directly?
网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.