DNS域名系统
前言
①DNS是一个应用层协议,用来获取域名对应的IP地址。
- 定义:域名系统DNS(Domain Name System)是一种用于TCP/IP应用程序的分布式数据库,提供域名与IP地址之间的转换服务。
- 作用:网络中的每台主机都是由IP地址来标识的,用户只有获得待访问主机的IP地址才能够成功实现访问操作。对于用户来讲,记住主机的IP地址是相当困难的,因此设计了一种字符串形式的主机命名机制,这些主机名与IP地址一一对应,这就是域名系统。域名系统解决了IP地址信息不便于记忆这一问题。用户进行访问网络主机操作时,可以直接使用便于记忆的、有意义的域名,由网络中的域名解析服务器将域名解析为正确的IP地址。
②域名:由于IP地址是一连串的数字,不容易记忆,所以就引入了域名,域名是一串字符,人们更容易记忆。人们可以通过域名代替IP地址来访问对应的主机。
③域名服务器是一个分布式层次树状结构。
域名按照从右到左的顺序来划分优先等级,最右边的是最高级的根域,根域就是所谓的”.”,其实域名www.baidu.com在配置当中应该是www.baidu.com.(最后有一个点),一般我们在浏览器里输入时会省略后面的点。接下来就是顶级域又称一级域,一级域之后还有二级三级域。如何区分当前域名是几级域,可以参考域名中有几个点来判断(除了根域外),比如baidu.com就是个一级域,而www.baidu.com就是个二级域(它是在baidu.com这个域里面有一个叫做www的主机)
每一层域都会有一堆域名(DNS)服务器,DNS服务器是能提供域名解析的服务器,记录类型可以是A(address)记录,NS(name server)记录,MX(mail),CNAME等,这些记录类型后续会一一介绍到。
从上到下分别为根DNS服务器、顶级DNS服务器(一级域名)、权威DNS服务器(二级域名),三级域名服务器等…(比如 zhidao.baidu.com 、translate.goole.cn、csdn.net、space.bilibili.com等)
1、 根DNS服务器是最根本的服务器:用来存放 一级域名 的IP地址。 .com 、.cn 、.org、.net等。 根DNS服务器在全世界总共有13台,主要存放260多个一级域名的DNS服务器的IP地址。 2、 顶级DNS服务器:存放 二级域名 的IP地址。 一个顶级服务器都对应着一个 一级域名。 比如 .com 的DNS服务器,存放了baidu、space等 二级域名的DNS服务器的IP地址。 比如.cn的DNS服务器中,存放了 google等 二级域名的DNS服务器的IP地址。 3、 权威DNS服务器:存放 三级域名 的IP地址。 一个权威DNS服务器对应着一个 二级域名。 比如.baidu的DNS服务器中,存放了zhidao等三级域名的IP地址。
④为什么需要DNS解析域名为IP地址?
首先计算机在网络上通讯时只能识别IP地址(网络通讯大部分是基于TCP/IP协议,而TCP/IP是基于IP地址的),比如我要在浏览器中访问百度的地址,我可以在地址栏直接输入14.215.177.39就能访问到百度的首页。但是我们无法记住更多的IP地址。那么域名就出现了,域名是由一串用”.”分隔的唯一名字。所以现在我们访问网站的时候,就可以在浏览器地址栏中输入域名(www.baidu.com),那么DNS就会把域名翻译成IP,然后访问IP。
⑤本地DNS:本地DNS一般是指你电脑上网时IPv4或者IPv6设置中填写的那个DNS。这个有可能是手工指定的或者是自动分配的。
如果你的电脑是直连运营商(ISP)网络,一般默认设置情况下DNS为ISP的服务器地址。
如果你的电脑和ISP之间还加了无线或者有线路由(一般的路由器本身还会内置DNS转发器),它的作用是将发往它所有的DNS请求转发到上层DNS,但最终会转发到ISP的DNS。
如果手动修改了DNS,比如改成8.8.8.8这样的公用DNS服务器,那么指的就是这个服务器。
本地DNS不是权威服务器,相当于一个代理的DNS解析服务器,他会帮你迭代权威服务器返回的回答,然后把最终查到的IP返回给你。
DNS工作原理
①DNS域名解析分为静态域名解析和动态域名解析,二者可以配合使用。
②在解析域名时,首先采用静态域名解析(查找静态域名解析表),如果静态域名解析不成功,再采用动态域名解析。由于动态域名解析可能会花费一定的时间,且需要域名服务器的配合,因而可以将一些常用的域名放入静态域名解析表中,这样可以大大提高域名解析效率。
③静态DNS:静态域名解析通过静态域名解析表进行,用户手动建立域名和IP地址之间的对应关系表,将一些常用的域名放入表中。当客户端需要域名所对应的IP地址时,首先到静态域名解析表中查找指定的域名,从而获得所对应的IP地址,提高域名解析的效率。
④动态DNS:用户程序(例如Ping、Tracert)对域名服务器(DNS Server)的访问是通过DNS客户端(DNS Client)的一个地址解析器(Resolver)完成的。用户程序、解析器和域名服务器以及解析器上的缓存区关系如下图所示。
上图详解:
DNS客户端:解析器和缓存区集成在一起构成DNS Client(DNS客户端)。作用:接收用户程序的DNS请求,并对其做出反应。
一般来说,用户程序(例如Ping、Tracert)、缓存区和解析器(DNS客户端)是在同一台主机上,域名服务器(DNS服务器)和它们在不同的主机上。
DNS工作过程
1、用户使用域名访问某些应用服务时,用户程序首先向DNS客户端中的解析器发出请求。
2、解析器收到用户程序发送的DNS请求后,首先查询本地的域名缓存。
- 本地的域名缓存中存在该域名对应的映射表项,解析器就将域名对应的IP地址返回给用户程序。
- 本地的域名缓存没有发现所要查找的映射项,解析器就向域名服务器(DNS Server)发送查询请求。
3、域名服务器收到查询报文后,首先判断请求的域名是否处于自己被授权管理的子域里,再根据不同的判断结果,向DNS Client发送相应的响应报文。
- 如果是在自己被授权管理的子域范围之内,服务器首先从自己的数据库中查找域名对应的IP地址。
- 如果判断该域名不属于本域范围之内,就将请求交给上一级的域名解析服务器处理,直到完成解析,并将解析的结果返回给DNS客户端。
4、DNS客户端收到域名服务器的响应报文后,将解析结果返回给应用程序。
- 动态域名解析支持缓存功能。每次动态解析成功的域名与IP地址的映射均存放在动态域名缓存区中,当下一次查询相同域名的时候,就可以直接从缓存区中读取,不用再向域名服务器进行请求。缓存区中的映射在一段时间后会被老化删除,以保证及时从域名服务器得到最新的内容。老化时间由域名服务器设置,DNS客户端从协议报文中获得老化时间。
5、域名后缀列表功能
- 动态域名解析支持域名后缀列表功能,用户可以预先设置一些域名后缀,在域名解析的时候,用户只需要输入域名的部分字段,系统会自动将输入的域名加上不同的后缀进行解析。
实例:DNS解析过程
1、现在我有一台电脑,在浏览器中输入www.baidu.com域名,浏览器会从浏览器的DNS缓存中检查是否有这个网址的映射关系,如果有,就返回IP,完成域名解析。
2、如果没有,操作系统会先检查自己本地的hosts文件是否有这个网址的映射关系,如果有,就返回IP,完成域名解析。看到这里大家应该都猜到了,有DNS的地方,就有缓存。浏览器、操作系统、本地DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存。
3、如果还没有,我的电脑就要向本地DNS服务器发起请求查询www.baidu.com这个域名。
4、本地DNS服务器拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话直接返回。这个时候拿到的IP地址,会被标记为非权威服务器的应答。
5、如果本地DNS服务器的缓存中没有的话,本地DNS服务器会从配置文件中读取13个根DNS服务器的地址,然后向其中一台发起请求。
6、根DNS服务器拿到请求后,知道他是com.这个顶级域名下的,所以会返回com域名中的NS记录(用来表明哪台服务器对该域名进行解析),其实就是一个IP(com对应的服务器IP)。
7、本地DNS服务器根据返回的IP(com DNS服务器)发起请求,com DNS服务器发现你这请求的是baidu.com这个域,查到这个域的NS记录,然后返回IP(baidu.com)。
8、本地DNS服务器在根据IP(baidu.com DNS服务器)访问这些权威服务器,baidu.com服务器在A记录(正向解析记录,域名到IP地址的映射)中查找到www.baidu.com的IP地址,返回IP(www.baidu.com)。
9、最终本地DNS服务器拿到用户想访问的www.baidu.com的IP,返回给客户端,并进行缓存操作,以便下次使用。
通俗理解一遍:
浏览器:@浏览器缓存,你知道www.baidu.com对应的IP么? 浏览器缓存:知道,是xxxx 浏览器:好的,我去访问啦! 浏览器缓存:不知道 浏览器:@系统缓存,你知道www.baidu.com对应的IP么? 系统缓存:我看下hosts哦,找到了,是xxxx 浏览器:好的,我去访问啦~ 系统缓存:我看下hosts哦,哎呀没有找到哎 浏览器:好的,我无能为力了,@客户机想想办法 客户机:我去问问@本地DNS服务器,你知道www.baidu.com对应的IP么? 本地DNS服务器:我去DNS服务器缓存中找找,找到了,是xxxx 客户机:@浏览器,是xxxx,你去访问吧 浏览器:好的,我去访问啦# 本地DNS服务器:我去DNS服务器缓存中找找,哎呀没有找到哎 本地DNS服务器:想个办法,先去找大哥@根DNS服务器,你知道www.baidu.com对应的IP么? 根DNS服务器:我知道com DNS服务器的IP,你叫他给你查 本地DNS服务器:好的,@com DNS服务器,你知道www.baidu.com对应的IP么? com DNS服务器:我知道baidu.com DNS服务器的IP,你叫他给你查 本地DNS服务器:怎么开始踢皮球了@baidu.com DNS服务器,你知道www.baidu.com对应IP么? baidu.com DNS服务器:我这里查到了,IP是xxxx 本地DNS服务器:太开心了@客户机IP是xxxx。这么麻烦,先记到DNS服务器缓存,免得下次又这么折腾。 客户机:@浏览器 IP是xxxx 浏览器:好的,我去访问啦
注意:
在整个DNS解析过程中会存在递归查询过程和迭代查询过程。
- 我的电脑向本地DNS服务器的查询一般都是采用递归查询。
- 本地DNS服务器向其他DNS服务器的查询是迭代查询。
DNS解析过程中解释了DNS服务器记录中的NS记录和A记录,那么接下来就看下DNS服务器中的这些记录的作用。
其实在上面DNS解析www.baidu.com域名的时候,在实际操作中就有遇到CNAME记录。
当我们向baidu.com请求www.baidu.com的时候,返回了一个别名www.a.shifen.com。
DNS劫持
①DNS决定的是我们的域名将解析到哪一个IP地址的记录,是基于UDP协议的一种应用层协议。这种攻击的前提是攻击者掌控了你的本地DNS服务器。
②攻击者劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致用户对该域名地址进行访问的时候,由原来的IP地址转入到修改后的IP地址。结果就是让正确的网址不能解析或者是被解析到另一个网址的IP,实现获取用户资料或者破坏原有网址正常服务的目的。
③原理如下图所示:
④由于域名劫持往往只能在特定的被劫持的网络范围内进行,所以在此范围外的DNS服务器能够返回正常的IP地址,或者修改DNS以及直接IP访问。
一般而言,用户上网的DNS服务器都是运营商分配的,所以在这个节点上,运营商可以做一些事情,比如,你去访问www.a.com,正常DNS应该返回10.0.0.1,而运营商劫持后,会返回一个运营商的中间服务器IP,访问该服务器会一致性的返回302(暂时重定向),让用户浏览器跳转到预处理好的带广告的网页,在该网页中再通过iframe打开用户原先访问的地址。
DNS污染
①DNS污染又称域名服务器缓存投毒(DNS cache poisoning),它和DNS劫持的不同之处,在于污染针对的是DNS缓存,是在查询信息到达目标DNS服务器前,经过的节点上做手脚,而劫持是DNS服务器中记录的是错误的内容。(总结下就是DNS劫持是修改DNS服务器,DNS污染是修改DNS缓存。)
②举例:
对于GFW来说,DNS劫持用于国内服务器,因为可以修改服务器中的DNS记录,而对于国外服务器GFW无法更改其内容,故采用DNS污染的方式篡改用户收到的信息。其中的过程是,当你向国外DNS服务器查询DNS记录时,这些流量走到国际出口带宽的时候会遇到GFW的关键字审查,如果上了黑名单,GFW会立即向你返回一个虚假的DNS记录。上面也说到DNS走的是UDP协议,加上DNS查询结果只认最快返回的,所以一定是先收到了GFW给你返回的虚假DNS记录,就算马上你收到了真正的来自国外DNS的回复,也会被你的系统无视掉。这种攻击也被称为中间人攻击。
DDNS动态域名服务
前言
①DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。
②动态域名解析(Dynamic DNS,简称DDNS)是把互联网域名指向可变IP地址的系统。DNS只是提供了域名和IP地址之间的静态对应关系,当IP地址发生变化时,DNS无法动态的更新域名和IP地址之间的对应关系,从而导致访问失败。但是DDNS系统是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络时,客户端程序通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,实现动态域名解析。
③DDNS用来动态更新DNS服务器上域名和IP地址之间的对应关系,从而保证通过域名访问到正确的IP地址。很多机构都提供了DDNS服务,在后台运行并且每隔数分钟来检查电脑的IP地址,如果IP发生变更,就会向DNS服务器发送更新IP地址的请求。
④更多查看:DDNS动态域名服务百度百科
DDNS的工作模式
1、DDNS概述
利用DNS可以将域名解析为IP地址,从而实现使用域名来访问网络中的节点(服务器)。但是,DNS仅提供了域名和IP地址之间的静态对应关系,当节点(服务器)的IP地址发生变化时,DNS服务器无法动态地更新域名和IP地址的映射关系。此时,如果仍然使用域名访问该节点(服务器),通过域名解析得到的IP地址是错误的,从而导致访问失败。动态域名系统DDNS(Dynamic Domain Name System)用来动态更新DNS服务器上域名和IP地址之间的映射关系,保证通过域名解析到正确的IP地址。
2、DDNS工作模式
DDNS采用的是客户端/服务器工作模式,提供了两种更新方式:
(1)RFC2136定义的DDNS更新方式:设备作为DDNS客户端,动态更新DNS服务器中域名和IP地址的映射关系。
(2)通过DDNS服务器实现的更新方式:设备作为DDNS客户端,将域名与IP地址的映射关系发送给指定URL地址的DDNS服务器,然后DDNS服务器通知DNS服务器动态更新域名和IP地址之间的映射关系。下图图通过DDNS服务器实现更新的DDNS典型组网图。
(3)DDNS客户端:IP地址变化时,需要在DNS服务器上动态更新其域名和IP地址映射关系的设备。Internet用户通常通过域名访问提供应用层服务的服务器,如HTTP、FTP服务器。为保证提供应用层服务的服务器IP地址变化时,其他用户仍然可以通过域名访问这些服务器,服务器将作为DDNS客户端,向DDNS服务器发送更新域名和IP地址映射关系的DDNS更新请求。
(4)DDNS服务器:负责通知DNS服务器动态更新域名和IP地址之间的映射关系。接收到DDNS客户端的更新请求后,DDNS服务器通知DNS服务器重新建立DDNS客户端的域名和IP地址之间的映射关系,从而保证即使DDNS客户端的IP地址改变,Internet用户仍然可以通过同样的域名访问DDNS客户端。
参考链接:
https://blog.csdn.net/jisuanji111111/article/details/124988776?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-124988776-blog-124366501.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-124988776-blog-124366501.pc_relevant_landingrelevant&utm_relevant_index=1
https://blog.csdn.net/qq_40276626/article/details/120327367?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-120327367-blog-126289950.pc_relevant_aa_2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-120327367-blog-126289950.pc_relevant_aa_2&utm_relevant_index=1
https://blog.csdn.net/lingshengxiyou/article/details/126289950
原文链接:https://www.cnblogs.com/hls-code/p/16837058.html