一起学习 DNS
什么是 DNS ?
网域名称系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
一方面,DNS能够帮助我们省去记忆和输入 IP 地址的麻烦。另一方面,对于在不同ip的主机开发部署有着很重要的意义:如果我们在访问一个ip地址为115.159.231.171的一个Web主页,假设如果公司将这个Web主页移动到了另外一个不同的ip主机上,那是不是要通知到每一个使用原ip地址访问服务的用户?这显然行不通。所以域名到网络ip地址的映射具有非常重要的意义。
从域名到IP地址的一个翻译过程,我们俗称“DNS解析”。在DNS解析之后,便拿到了ip地址,有了ip地址,应用程序便可以与目标主机建立一个TCP连接或者发送UDP数据包。
DNS 解析
我们以查找www.zhuanzhuan.com
为例子:
0.查询Local DNS服务器
我们不得不提到这个Local DNS 服务器。Local DNS包括网络服务提供商(ISP)分配给我们的DNS(一般为两个),或者是其他组织提供的公共DNS,比如谷歌的8.8.8.8,国内114DNS的114.114.114.114。因为这些DNS的地址填写在我们的本地电脑或者移动设备上,所以也称为Local DNS。有时候我们看到电脑或者移动设备上,DNS的地址是路由器的地址,而路由器本身会将DNS请求转发到ISP的DNS服务器上。这个小细节需要注意下。
1.查询DNS根服务器
DNS根服务器是一个超级大管家,掌管着所有顶级域名服务器,比如商用的.com
,非赢利组织使用的.org
,教育机构使用的.edu
,政府部门使用的.gov
等等,世界上的顶级域名大概有250多个。我们例子的顶级域名是.com
,于是DNS根服务器会将查询请求转发给.com
顶级域名服务器。
2.查询.com
顶级域名服务器
.com顶级域名服务器掌管着.com
域,我们的目标是zhuanzhuan.com
,于是下一步将请求转发给zhuanzhuan.com
域名服务器
3.查询zhuanzhuan.com域名服务器
zhuanzhuan.com域名服务器掌管着zhuanzhuan.com域下所有的子域和主机。它当然知道www.zhuanzhuan.com
的IP地址。
4.访问www.zhuanzhuan.com对应的web服务器
根据上一步返回的IP地址进行访问。这里例子中,我们描绘的场景是一个最坏的情况,发生在DNS服务器没有缓存任何有用信息时。而在实际情况中,由于DNS服务器的缓存机制,在进行DNS解析道时候,实际的查询路径可能会更短,甚至没有,直接从本地DNS服务器缓存命中返回。
DNS的查询和响应使用的传输层协议是UDP协议。DNS消息通过UDP数据包发送,如果在一个限定时间内没有收到响应的UDP数据包,那么DNS客户端则会重复查询请求,如果重复一定次数仍然失败,则会尝试域内另一台DNS服务器。
DNS 查询:递归/迭代
递归查询:服务器必需回答域名与目标IP的映射关系,对这个关系的描述必须是完整的。
迭代查询:服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其它DNS服务器的地址。
如文中图所示从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。一次域名解析可以涉及到递归和迭代两种机制。
DNS劫持
DNS劫持都谁干的好事?运营商。中国的电信运营商包括了三大运营商中国电信、中国移动、中国联通,还有一些小的运营商,包括长城宽带、歌华有线宽带等。我们可以谷歌搜索下,关于DNS劫持的问题,很多人都曾经遇到过。DNS劫持是网络运营商作恶的方式之一。电信运营商将原本网Web的IP地址故意解析为包含广告的IP地址,这样用户在访问网站时就会看到电信运营商那些无耻的广告。
之前转转的用户就遇到过这样的问题。我们发现用户所在的地方,优品服务的一个域名被电信运营商给劫持了,跳转到了联通移动网络域名纠错导航页面。当用户使用WIFI时,我们可以修改网络的高级设置中DNS,尝试修改为谷歌的8.8.8.8,114DNS的114.114.114.114, 或者阿里DNS 223.5.5.5, 223.6.6.6等来解决。
HTTPS解决的是HTTP劫持,并不能解决DNS劫持问题。更多阅读可以阅读文末的推荐文章运营商的勾当:DNS劫持和HTTP劫持有什么区别。
iOS清除DNS CACHE
iOS设备对域名访问时并不是每次访问都需要向DNS服务器发出请求,一般来说当解析工作完成一次后,该解析结果会保存在设备的DNS缓存列表中,如果这时DNS解析出现更改变动的话,由于DNS缓存列表信息没有改变,所以仍旧会按照之前缓存的结果来解析,便会出现DNS解析故障。这时候我们要清除本地的DNS缓存,一般有几个办法:
- 开启飞行模式 -> 修改DNS -> 关闭飞行模式
- 开关机
- 重置网络设置
修改HOST是什么鬼?
不知道读者有没有修改过电脑host文件的经历,我们修改有时候只是为了屏蔽不想访问的网站让破解软件注册时不向自己的服务器发送信息,比如发送到127.0.0.1本机地址上,有时候是为了测试,让线上的域名映射到开发环境的ip,有时候为了加速网站的解析速速。修改HOST给了我们很多方便的可能。
iOS非越狱设备我们是无法修改HOST文件的,越狱之后,就另当别论了。
域名解析到常用命令
域名解析中常用的命令有三个:dig、nslookup、host,关于这三个命令的一些使用,读者可以移步到阮一峰的DNS原理入门。