1.为什么需要DNS解析?
DNS(Domain Name System,域名系统),最初,由于IP地址长且难记,通过IP地址访问网站不方便。后来通过发明了DNS服务器,这个时候我们访问网站可以通过输入网站域名
www.baidu.com
,DNS服务器会将我们的域名解析为IP地址。这样我们实际访问的就是对应的IP地址。DNS是应用层协议,使用UDP传输数据
抽象点来说DNS就是 一个记录ip地址的超级分布式数据库。
先说一下DNS的几个基本概念:
- 根域
就是所谓的”.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点(因为所有的域名后面都有,所以可以省略),而这也已经成为了习惯。
根域服务器我们知道有13台,但是这是错误的观点。
根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机。具体的镜像分布可以参考维基百科。这些主机的内容都是一样的
- 域的划分
根域下来就是顶级域或者叫一级域,
列举两种划分方式,一种是互联网刚兴起时的按照行业性质划分的com.,net.等,另一种是按国家划分的如cn.,jp.,us.,uk.等。
每个域都会有域名服务器,也叫权威域名服务器。
例如:
baidu.com
就是一个顶级域名,.com是顶级域,而www.baidu.com
却不是顶级域名,他是在baidu.com 这个域里的一叫做www的主机。一级域之后还有二级域,三级域,假设我买了一个顶级域,并且我搭建了自己BIND服务器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的)。
比如
xzp.www.baidu.com
,在这个网址中,www.baidu.com
变成了一个三级域而不是一台主机,主机名是xzp。
3.域名服务器
复制代码
能提供域名解析的服务器,上面的记录类型可以是A(address)记录,NS记录(name server),MX(mail),CNAME等。
A记录是什么意思呢,就是记录一个IP地址和一个主机名字,假设一个域名服务器所在的域为
test.baidu.com
,我们知道这是一个二级的域名,然后里面有一条A记录,记录了主机为a的IP,查到了就返回给你。如果我现在要想baidu.com这个域名服务器查询a.test.baidu.com,那么这个顶级域名服务器就会发现你请求的这个网址在 test.baidu.com这个域中,这里记录了这个二级域的域名服务器
test.baidu.com
的NS的IP。返回给你这个IP地址你再去这个二级域名服务器查找主机名为a的IP地址。
4.解析过程
复制代码
当一个用户在地址栏输入www.163.com时,DNS解析有大致十一个过程,如下:
浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。
搜索操作系统自身的DNS缓存:如果浏览器没有找到缓存或者缓存过期失效,浏览器就会搜索操作系统自身的缓存,没有找到或者失效,解析结束(操作系统的缓存:window系统是一天,mac系统严格根据DNS协议中的TTL)。
读取本地的hosts文件:若操作系统的缓存也没有找到或失效,浏览器就会去读取本地的hosts文件(Hosts文件也可以建立域名到IP地址的绑定关系,可以通过编辑Hosts文件来达到名称解析的目的。 例如,我们需要屏蔽某个域名时,就可以将其地址指向一个不存在IP地址,以达到屏蔽的效果)。
如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
如果LDNS仍然没有命中,就直接跳到根域名服务器请求解析
根域名服务器返回给LDNS一个
.com
顶级域名服务器IP此时LDNS再发送请求给
.com
接受请求的
.com
域名服务器查找并返回163.com
对应的Name Server的IP地址,这个Name Server就是网站注册的域名服务器LDNS再发送请求给
taobao.com
域名服务器,该服务器根据映射关系表找到目标ip,返回给LDNSLDNS缓存这个域名和对应的ip
LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束