一. DNS概念
通常我们对一个主机的标识是域名的形式,这中形式更易于记忆,如www.baidu.com等,而路由器并不知道www.baidu.com对应的是哪一台服务器,在他们眼里只有IP地址才是有效地址,这种定长的结构化表示也更易于解析和通信。为了解决域名和IP地址之间的映射关系,DNS站了出来。DNS(domain name system)是域名系统的缩写,他负责将我们看到的域名解析为ip地址。
顶级域名、二级域名
顶级域名(一级域名)如:.com、.net、.edu、.gov、.cn等。N级域名就是在N-1级域名前追加一级。比如.baidu.com就是一个二级域名,.siba.com.cn是一个三级域名。这里又一个误点,有很多人吧www也当作一个域名,这种理解其实是不恰当的,www其实是表示该主机所提供的服务为www服务,即万维网服务。具体大家可以参考顶级域名 一级域名 二级域名 三级域名什么区别?中的高赞回答。
DNS层次关系
如图,DNS层次关系通常是树状结构的,从上往下分别为根DNS服务器、顶级DNS服务器、权威DNS服务器。
- 1.根DNS服务器:负责提供顶级域名服务器的IP地址,也就是根DNS服务器负责维护一张顶级DNS的映射表,一个顶级域名对应一个顶级DNS服务器的IP。
- 2.顶级DNS服务器:对于每个顶级域(如com、org、net、edu等)和国家顶级域都有顶级域服务器(TLD服务器),TLD服务器负责提供权威DNS服务器的IP地址。
- 3.权威DNS服务器:在因特网上具有公共可访问的主机的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。
除此之外还有一个本地DNS服务器,这个服务器通常与主机再同一个局域网当中。当主机发出DNS请求时,该请求被发往本地的DNS服务器,他起着代理的作用,并将该请求转发到DNS服务器层次结构中。他可以起到一个DNS缓存的作用,第一次DNS服务器在接收到返回的域名映射的IP地址,会将主机名和IP地址进行缓存,之后的一定时间内,如果客户端再次访问相同的主机时,本地DNS服务器会立刻返回对应的IP地址,减少其他DNS服务器的压力。
二. DNS解析
当我们在浏览器输入一个URL的时候,通常第一步就是进行DNS解析,如www.baidu.com,会有很多步骤需要做。
查找浏览器缓存:因为浏览器一般会缓存DNS记录一段时间,不同浏览器的时间可能不一样,一般2-30分钟不等,浏览器去查找这些缓存,如果有缓存,直接返回IP,否则下一步。如chrome采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度。
查找系统缓存:浏览器缓存中找不到IP之后,浏览器会查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 。
查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到顶级DNS服务器上去继续查询,并给出相应的顶级DNS服务器的地址。这种过程是迭代的过程。
本地DNS服务器继续向顶级DNS服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的权威DNS服务器的地址。
最后,本地DNS服务器向域名的权威DNS服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
查询方式
DNS进行解析的方式有两种,一种是迭代的方法,也就是我们上面用到的,一种是递归的方法。
递归解析
本地DNS服务器自己负责向其他DNS服务器进行查询,一般是先向根DNS服务器查询,再由根DNS服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。
迭代解析
当本地DNS服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析,如图所示。本地DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。
实际使用中,主机向本地dns服务器的查询是一种递归查询方式,本地dns服务器向其他dns服务器查询使用的迭代方式。
DNS劫持
DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的。
DNS劫持症状:在某些地区的用户在成功连接宽带后,首次打开任何页面都指向ISP提供的“电信互联星空”、“网通黄页广告”等内容页面。还有就是曾经出现过用户访问Google域名的时候出现了百度的网站。这些都属于DNS劫持。
解决方法:
1.加强本地计算机病毒检查,开启防火墙等,防止恶意软件,木马病毒感染计算机
2.改变路由器默认密码,防止攻击者修改路由器的DNS配置指向恶意的DNS服务器
3.企业的话可以准备两个以上的域名,一旦一个域名挂掉,还可以使用另一个
4.用HTTP DNS 代替 Local DNS