文章主要从以下几个方面讨论DNS
1.什么是DNS?
2.DNS如何工作以及深入运行机制
3.DNS缓存机制
3.DNS查询
主机名,域名,IP,DNS......都是个啥??
The Domain Name System(DNS),即因特网域名系统。提供域名解析服务,将主机名解析为IP地址。
简单的理解下主机名,IP地址和DNS:
因特网上的识别方式和人类的识别方式很像。每个人都是个体,类比为因特网上的主机,假设这个个体叫张三,张三就是用来标识这个个体的一种方式,类比为主机名,怎么找到张三呢,张三的手机号是xxxxxxxxxxxx,类比IP地址。而DNS做的工作就是帮你找到张三的手机号。查水表的。
例如:
使用www.google.com对应的IP地址为172.217.4.196
www是服务器的名字
http://google.com是用来定位网站的域名
www.google.com 即主机名,由服务器+域名组成
主机名最大的意义在于方面人们记忆,而路由器口味独特,喜欢定长且具有层次结构的IP地址。DNS提供把方便记忆的主机名转换为IP地址的目录服务。
拓展:
DNS是由分层的DNS服务器实现的分布式数据库,属于应用层协议,运行于UDP之上(特殊情况使用TCP),使用53号端口。
一个主机可以拥有多个别名,因为主机别名比规范主机更容易记忆。
DNS是怎么工作的
DNS通常为应用层的其他协议(http、ftp...)所使用。当我们在浏览器上访问https://github.com/页面时,为了将用户的请求发送到web服务器,必须获得其IP地址。
DNS工作步骤
1.从浏览器中的URl提取主机名http://www.github.com,将主机名通过DNS客户机传给DNS应用的客户机端。
2.DNS客户机向DNS服务器发送一个包含主机名的请求。
3.经过各种查询,DNS客户机会受到一个包含主机名IP地址的返回报文。
4.浏览器接收到这个IP地址,就可以通过该IP地址定位http服务器从而建立tcp连接。
.......
这就是DNS大致需要做的工作。DNS还提供其他服务在这就不做介绍了。
深入理解DNS运行机制
DNS是实现分布式数据库的完美范例。
DNS分布模型
DNS有三种服务器管理类域名;
根域名(Root Domain):全球共有13个根服务器管理根域名
顶级域名(Top-Level Domain):(com、org、net、edu、gov)负责顶级域名以及所有国家的域名。
二级域名(Second-level domains):由权威DNS服务器管理
........类推
例:
www. zhihu. com .
三级域 二级域 顶级域 根域
DNS缓存(DNS Caching)
非常重要的一个概念。为了减少因特网上的大量报文传输做出的性能改善。
有DNS就有DNS缓存。DNS存在于浏览器,操作系统,CDN服务器,DNS服务器.......
以下仅讨论位于本地服务器缓存这种情况。(剩余的有空补充)
DNS缓存的运行机制:
访问www.google.com,当你在浏览器中输入URl地址时,浏览器会查看保存在本地文件中的Host文件进行域名匹配,如果有,直接返回IP地址,如果没有,浏览器会向本地服务器发送DNS请求。
本地服务器接受到浏览器发送的请求,会将域名与自己的缓存内容进行匹配,找到则直接返回,未找到则本地服务器会向DNS根服务器发送请求进行查询。
根服务器接收到请求,并不会返回IP给你,它只知道域名属于.com,于是将相关信息返回给本地服务器。
本地服务器继续向二级域名服务器(.com服务器)请求,二级域服务器会告诉本地DNS服务器,这个域名是属于http://google.com这个域,并将相关信息返回。
最后本地服务器向最终的域名解析服务器发送请求,此时解析服务器会返回一个回应的IP值给本地DNS服务器,同时DNS服务器会将这个对应关系保存在缓存中,等下次用户访问时,就可以快速返回IP,减少网络时延。服务器存储的DNS缓存会定期更新,称缓存的生命时间(TTL-time to live)
DNS有两种查询方式,一种是递归查询(Recursive query),一种是迭代查询(Iterative query)
图中1为递归查询,2-7为迭代查询。
DNS记录查询:
实现DNS分布式数据库的所有DNS度武器共同存储这资源记录(Resource Record,RR),提供了主机名到IP地址的映射。
资源记录包含了以下四个字段
{Name , Value , Type , TTL}
TTL上面提到过,决定了资源记录的生命时间。
字段的Name和Value的值取决于Type
Type = A ,映射一个IPV4的地址
Type =AAAA,映射一个IPV6的地址
Type=NS,返回保存下一级域名信息的服务器地址。
Type=MX:提供邮件服务器的规范主机名。
Type=CNAME,提供一个主机名对应的规范主机名。
.......(其余自行检索)
可用nslookup或dig进行记录查询,推荐使用dig。