DNS出现及演化
网络出现的早期 是使用IP地址通讯的,那时就几台主机通讯。但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和windows也继承保留了这个文件)。这个文件中记录这主机名称和IP地址的对应表。这样只要输入主机名称,系统就会去加载hosts文件并查找对应关系,找到对应的IP,就可以访问这个IP的主机了。
但是后来主机太多了,无法保证所有人都能拿到统一的最新的hosts文件,就出现了在文件服务器上集中存放hosts文件,以供下载使用。互联网规模进一步扩大,这种方式也不堪负重,而且把所有地址解析记录形成的文件都同步到所有的客户机似乎也不是一个好办法。这时DNS系统出现了,随着解析规模的继续扩大,DNS系统也在不断的演化,直到现今的多层架构体系。
DNS概括
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址互相映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
DNS的分布数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space),如下图所示树的最大深度不得超过127层,树中每个节点都有一个可以长达63个字符的文本标号。
DNS域名解析过程
首先,客户端检测自身缓存,如果没有,检测hosts文件,如果没有,客户端发出DNS请求翻译IP地址或者主机名。DNS服务器在收到客户机的请求后:
1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找*域,由*域查找二级域,二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,DNS服务器收到应答后先在缓存中存储,然后将解析结果发给客户机。
4)若没有找到,则返回错误信息。
DNS分类
主DNS服务器:就是一台存储着原始资料的DNS服务。
从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器。也称辅助DNS服务器。
备注:一般生产环境,主DNS服务器做管理使用,从DNS服务器提供服务。
缓存服务器:不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的记过,也叫递归服务器。
转发器:这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。
DNS中记录类型
DNS命名规范
1. 26个英文字母
2. “0,1,2,3,4,5,6,7,8,9,”十个数字
3. “-”(英文中的连词号)
4. 最多63字节长度
备注:要不按照这个规范命名,bing支不支持? 支持,不合适,不建议。 非要不按照这个,怎么办? master-view文件上配置check-name ignore;
DNS三个命令:DIG、NSLOOKUP、HOST介绍
yum install bind-utils -y
DNS原理入门 http://www.ruanyifeng.com/blog/2016/06/dns.html
DNS发展趋势
1、DNSMASQ
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那先只在本地使用的域名,这些域名是不会在全球的DNS服务器中出现的。
DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。
有一些公司在每台服务器上都起着dnsmasq,充当本地dns缓存服务,来提高dns解析性能同时减轻dnsserver的压力。
2、HTTPDNS
但凡使用域名来给用户提供服务的互联网企业,都或多或少无法避免在有中国特色的互联网环境中遭遇到各种域名被缓存、用户跨网访问缓慢等问题。
首先是域名缓存,不同运营商、不同节点的缓存时间设置的差别较大。这样在流量切换时,就会产生新、旧应用数据不一致的现象。
其次就是域名解析过了太多层的nat,这就导致dns获取客户端地址时很难准确定位,从而智能dns的准确度大打折扣。
最近几年httpdns出现了,用户明确的知道我在访问某厂的服务时,应该去找哪个ip要对应的域名,实现这个的前提是你可以左右用户的访问习惯,目前应用最合适的场景是app。
- DNS中递归查询和迭代查询的区别
1、 递归查询: 一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交客户机。
2、 迭代查询(反复查询): 一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求。
以一个DNS请求解析为例:
1)用户发起域名请求到dnsA,这时dnsA有这个记录,将结果返回给用户,这个过程是递归查询。
2)用户发起域名请求到dnsA,这时dns没有这个记录,它去向dnsB问有没有这个记录,以此类推,直到把结果返回给用户,这个过程是递归查询。
3)用户发起域名请求到dnsA,这时dnsA没有这个记录,它告诉用户,我没有这个记录,你去问dnsB吧,这个过程是迭代查询。