“DNS”这个单字,想必那些经常使用计算机,尤其是经常手动配置IP和DNS服务器的人是非常熟悉的。也许其中的大部分人并没有深入了解过它的具体意义,只是对它有个简单的了解,然后习惯性地将主DNS服务器和备DNS服务器配置成 114.114.114.114 和 8.8.8.8 (因为比较好记忆~~)。
什么是DNS?
DNS 的全称是 Domain Name System(域名系统,或者常称为域名解析系统)。
我们在上网的时候,经常要通过浏览器去访问一些网站,实际上就是访问网站所在的服务器IP地址,但是让用户记住设备的IP地址是非常困难的。我们常用的方式就是在浏览器中输入要访问的网址链接(例如 www.example.com),然后浏览器就会通过解析这个域名地址,找到要访问的服务器,从而读取到需要访问的网站的数据。所以我们在因特网上,构建了域名和IP地址互相映射的分布式数据库,在IP地址和域名之间形成一种转换和查询机制。
所以,DNS工作的过程可以简单描述为:域名地址经过DNS服务器解析后,得到对应的IP地址,通过该IP地址访问到服务器获取我们要访问的内容。
DNS通信主要使用UDP,TCP为辅
,使用端口号53
。当然,端口号可以修改,但是默认是使用53端口;在某些情况下,也会采用TCP协议。DNS是网络分层里的应用层协议,事实上他是为其他应用层协议工作的。
DNS的工作过程
为了解析一个域名(www.baidu.com),应用程序会调用域名解析库函数,并将域名作为参数传入其中。
此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一个域名解析请求。
上连DNS服务器接到域名解析请求后,在本机查询此域名,找到后将其对应的IP地址返回给解析库函数。
解析库函数接收到上连DNS服务器返回的信息后,将此信息返回给应用程序。
DNS查询之递归查询
这里我们以scs.bupt.deu.cn域名为例子
1、为了解析,浏览器会调用域名解析库函数,并将域名作为参数传入其中。
2、此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一域名解析请求。
3、上连DNS服务器接到域名解析请求后,在本机查找此域名,但是若没找到对应信息。
4、这时上连的DNS服务器就会求助于根DNS服务器(root-server.net)
5、然后请求就会逐级转发,顺序是cn的DNS服务器——edu.cn的DNS服务器——bupt.edu.cn的DNS服务器。(就是逐渐缩小范围)
6、由于bupt.edu.cn一定是管理scs.bupt.edu.cn的资源记录的DNS服务器,于是,bupt.edu.cn的DNS服务器会将所查询域名对应的IP地址返回给上一级。
7、这个IP地址会按照逆序依次回传,顺序是edu.cn的DNS服务器——cn的DNS服务器——根DNS服务器。
8、最后根DNS服务器将这个信息返回给上连DNS服务器。
9、上连DNS服务器收到结果后,首先会将这个结果缓存到本机,同时,将其回传给用户浏览器。
这里有点很重要那就是上连的DNS服务器在收到结果后,不仅会把结果返回给调用者,还会自己缓存起来
。
面试会提到的相关问题
-
DNS 是基于 TCP 还是 UDP 的?端口号是多少?
DNS通信主要使用UDP,TCP为辅
,使用端口号53
。 -
打开一个URL,在网络层面都发生了哪些事情?
-
什么是DNS劫持?
DNS劫持:DNS Hijacking。就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。
DNS劫持症状:在某些地区的用户在成功连接宽带后,首次打开任何页面都指向ISP提供的“电信互联星空”、“网通黄页广告”等内容页面。还有就是曾经出现过用户访问Google域名的时候出现了百度的网站。这些都属于DNS劫持。
举个例子易于理解:说到劫持,我们可能联想到一个坏蛋劫持了DNS服务器,拿着刀架在脖子上。这时候你问DNS服务器,博主帅吗?(发出请求)。DNS服务器听到了,他心里的答案是,好帅哦(返回正确ip地址)。由于坏蛋控制了他,并且对他做了修改。所以DNS只好不情愿的说,你真丑(错误的ip地址)。这个过程中,你和DNS服务器之间,一来一回,流程上没有任何问题,唯一的问题就是,DNS服务器告诉了你错误的ip地址。DNS也不想啊,但是有人控制了他的权限,或者修改了他的记录值等等。我们称为DNS劫持。类似我们使用网络的时候,明明访问的是普通网站,却突然跳到什么电信什么宣传页面一样。