学习路线-后端-互联网-DNS及其运行机制
简介
DNS(Domain Name System)域名系统,他是一个将域名和IP地址相互映射的一个分布式数据库,把容易记忆的主机名解析为主机的IP地址。
DNS使用TCP和UDP端口53
每一级域名长度限制63个字符,域名总长度不能超过253个字符
DNS防护与根DNS服务器
为了防止DNS服务器发生服务中断和网络攻击,全球共部署13台DNS根服务器,主要用来管理互联网的主目录。
这13台根服务器命令由A-M,其中10台在美国,英国、瑞典、日本各1个。
其中一台主根服务器在美国,其余12台为辅助根服务器,所有根服务器均由美国*授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。
由此可见,世界对美国互联网的依赖性还是很大的,毕竟根服务器在人家那里。
从理论上说,任何形式的标准域名要想被实现解析,按照技术流程,都必须经过全球“层级式”域名解析体系的工作,才能完成。
“层级式”域名解析体系第一层就是根服务器,负责管理世界各国的域名信息,在根服务器下面是*域名服务器,即相关国家域名管理机构的数据库,如中国的CNNIC,然后是在下一级的域名数据库和ISP的缓存服务器。
一个域名必须首先经过根数据库的解析后,才能转到*域名服务器进行解析。
DNS解析流程
以www.baidu.com为例,当用户在地址栏输入www.baidu.com时,DNS解析流程如下:
1、浏览器先检查缓存中有没有被解析过的这个域名对应的IP地址,如果有,解析结束。
2、如果浏览器缓存中没有解析过该域名的记录,浏览器会检查操作系统缓存中有没有对应的已解析过的结果。操作系统也有一个域名解析的过程。在Windows中一个文件夹中保存着hosts的文件,如果你在这里制定了一个域名对应的IP地址,那浏览器会首先使用这个ip地址。
很多DNS域名劫持就是偷偷篡改这个文件
3、如果在这里还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这个太服务器一般在所在城市的某个角落,这个服务器的性能很好,毕竟支撑着这个城市的域名解析,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
4、如果LDNS仍然没有命中,就直接跳到Root Server根域名服务器请求解析。
5、根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org)。
6、此时LDNS在请求给上一步返回的gTLD。
7、接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器。
8、Name Server根据映射关系表找到目标IP,返回给LDNS。
9、LDNS缓存这个域名和对应IP。
10、LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程到此结束。
资源解析类型
- A记录
- MX记录
- CNAME记录
- NS记录
- TXT记录
- TTL值
A记录
用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP地址,就需要添加A记录。
又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器。指向的目标地址类型只能是IP地址。在添加时需要输入主机名及目标地址,而最终访问的地址是“主机名+子/域名”,例如,我的域名是“caokunpeng.xyz”,在前面增加一个“resume”的主机名,那么最终访问的就是“resume.caokunpeng.xyz”。
MX记录
MX记录是专用于邮件交换的域名解析记录,在操作方式上与A记录结构一致,但它指向的IP地址应该是对应的邮件服务器的地址。这方面需要说一下,腾讯企业邮之类的服务现在还在提供免费企业邮箱托管服务,也就是说你只要有一个独立域名,申请这一服务后,再在你的域名解析记录中添加一条指向腾讯企业邮服务器的MX记录,就可以拥有以自己域名为后缀的邮箱地址了,然后你的邮箱地址,就可以怎么个性就怎么来。
CNAME记录
也称作是域名指向,相当于是给原先已经添加解析的域名设置一个别名。例如我们创建一个名为“resume.caokunpeng.xyz”的域名,转向至“www.zjnu.edu.cn”,那么添加解析后只需要输入前者就可以访问后者了。
与A记录不同的是,CNAME的目标主机地址,只允许添加主机名,不允许添加IP地址。并且在主机名前不需要加“http://”等前缀。
NS记录
是域名DNS服务器记录,全称Name Server记录,用来指定该域名由哪个DNS服务器来对您的域名进行解析。您注册域名时,总有默认的DNS服务器,每个注册的域名都是由一组DNS域名服务器来解析的。
TXT记录
一种文本记录,仅用于对主机名或者域名的记录信息,对解析无实质影响。
TTL记录
全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。默认即可。
泛解析
使用“*”建立二级域名解析到同一独立IP。在域名前添加任何子域名,均可解析到指定的服务器IP地址。
DNS劫持
DNS 劫持又称「域名劫持」,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的 IP 地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址。其实本质就是对 DNS 解析服务器做手脚,或者是使用伪造的 DNS 解析服务器可以做到。
解决办法
不使用运营商的 NDS 解析,使用自己的或者著名的 DNS,如:114.114.114.114
和 8.8.8.8
内容劫持
其实内容劫持一开始的出发点是好的,是运营商为了加快用户的访问速度同时减少自己的流量损耗而做的一个缓存机制。
用户在像服务器请求数据的时候运营商会把用户的请求转移到这个缓存池中,如果缓存中有就直接返回,没有的话再去向服务器请求。然后运营商拦截并缓存服务端给用户的回调数据,这样一来可以极大的降低运营商像服务器请求的次数,也能加快用户的访问,所以出发点是好的。
但是一些非法的商家对缓存池内部做一些处理就是直接对返回的内容进行修改,这样一来我们就会接受到错误的数据。
常用命令
nslookup <域名>