本篇博文主要就DNS协议做详细解析。我们都知道DNS可以将域名转换成具体的IP地址。DNS适用于IPv4,IPv6.那么关于DNS还有什么值得深挖的吗?
目录
1.为什么要有DNS域名?
在TCP/IP网络中 每一个互连的计算机都具有唯一的IP地址,并基于这个IP地址进行通信。通过IP地址我们就可以找到某台主机。那么既然都已经有了IP地址,还为什么需要域名呢?这是因为IP地址是由一串数据序列组成的,并不好记忆。
例如:我们需要在浏览器进行搜索,我们会直接输入www.baidu.com.而这就是一个域名,我们可以使用ping命令向对端发送一个ICMP的请求,对端会返回一个Reply。其中就包括了一个IP地址。我们也可以使用这个IP在浏览器中访问百度
DNS的产生
TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不便于记忆。于是人民发明了一种叫主机名的东西,是一个字符串。并且用hosts文件来描述主机名和ip地址的关系
最初,通过互联网信息中心来管理这个hosts文件的
- 如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。
- 其他计算机也需要定期下载更新新版本的hosts文件才能上网
但是这样就太麻烦了,于是有上述的需求,产生了一个可以有效管理主机名和IP地址之间对应关系的系统,就是DNS系统(Domain Name System)。DNS系统可以维护一个用来表示组织内部主机名和IP地址之间的对应关系的数据库。
在应用的时候,当用户输入域名时,DNS会自动检索那个注册了域名和IP地址的数据库,并迅速定位对应的IP地址。而且,如果域名和IP地址需要进行变更时,也只需要在组织机构内部进行处理即可。
2.域名和域名的构成
在大致了解DNS之后,我们要再进一步了解一下域名。域名是指为了识别主机名称和组织机构名称的一种具有分层的名称。例如:百度的www.baidu.com
域名由几个英文字母(或英文字符序列)用点号连接构成。
- com:一级域名。 表示这是一个企业域名。同级的还有"net(网络提供商)","org(非盈利组织)"
- baidu:二级域名。公司名
- www:这是一种习惯用法,之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,用来表示主机支持的协议
3.域名解析过程
- 在浏览器中输入www.baidu.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts里面没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
- 如果hosts与本地DNS解析器缓存都没有响应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器。在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
- 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台跟DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该*域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的下一级DNS服务器地址(baidu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找到baidu.com域服务器,重复上面的动作进行查询,直到找到baidu.com主机
- 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机
从客户机端到主机DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭达查询
4.本机如何干预域名解析
通过修改本机host来干预域名解析。
例如:
在/etc/hosts 文件中添加一句话
192.168.188.1 www.baidu.com
保存文件后再ping一个baidu.com就会链接到192.168.188.1了
每一行为一条记录,分为两个部分,第一部分是IP,第二部分是域名
- 一个IP后面可以跟多个域名,可以是几十个甚至上百个
- 每一行只能有一个IP,也就是说一个域名不能对应多个IP
- 如果有多行中出现了相同的域名(对应的IP不同)会按最前面的记录解析
5.DNS查询服务期的基本流程是什么?
- 打开浏览器,输入一个域名,比如输入www.baidu.com。这时候,你使用的电脑会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务商提供的,比如中国移动,中国电信。
- DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询他的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
- 根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。
- 本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名与IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
- 最后本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应的关系。本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中。以备下次别的用户查询时,可以直接返回结果,加速网络访问。
6.DNS劫持
DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定的IP。其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务器的目的。DNS劫持通过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现的