DNS是什么?
DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器。
简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址
DNS 协议可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。但大多数情况下 DNS 都使用 UDP 进行传输。
为什么将域名翻译成IP?直接使用IP不行吗?
由于P 地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名;通过域名解析协议(DNS)来将域名和 IP 地址相互映射。使人更方便地访问互联网,而不用去记住能够被机器直接读取的 IP 地址数串。将域名映射成 IP 地址称为正向解析,将 IP 地址映射成域名称为反向解析。
DNS 查询方式
现在我们手握URL(含有域名)发送请求,DNS是如何知道URL的域名在哪呢?也就是说,本地域名服务器是如何向上级域名服务器转发查询请求的呢?
DNS 查询的方式有两种:一般来说,域名服务器之间的查询使用迭代查询方式,以免根域名服务器的压力过大。
-
递归查询:如果 A 请求 B,那么 B 作为请求的接收者一定要给 A 想要的答案
比如:
假设我访问某网站(本地服务器=>根域名服务器)
根域名服务器发现该数据在顶级域名服务器(根域名服务器=>顶级域名服务器)
顶级域名服务器发现该数据在权限域名服务器(顶级域名服务器=>权限域名服务器)
在权限域名服务器找到该数据(权限域名服务器=>顶级域名服务器=>根域名服务器=>本地服务器)
递归查询的过程:是由接收者一次次递归发起请求,最终拿到数据。
-
迭代查询:如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,去哪获得这个内容,但是自己并不去发出请求
比如:
假设我访问某网站(本地服务器=>根域名服务器)
根域名服务器发现该数据在顶级域名服务器,并告诉我去找顶级域名服务器(根域名服务器=>本地服务器=>顶级域名服务器)
顶级域名服务器发现数据在权限域名服务器,并告诉我去找权限域名服务器(顶级域名服务器=>本地服务器=>权限域名服务器)
在权限域名服务器找到该数据(权限域名服务器=>本地服务器)
迭代查询的过程:如果接收者没有目标数据,则告诉发送者数据具体位置,由发送者请求,如此往复,最终拿到数据。
实际上,每个时刻都有无数网民要上网,那每次都去访问本地域名服务器去获取 IP 地址显然是不实际的。解决方法就是域名缓存。
域名缓存
也就是在域名服务器解析的时候,使用缓存保存域名和
IP地址的映射
计算机中DNS的记录也分成了两种缓存方式:
- 浏览器缓存
浏览器在获取网站域名的实际 IP 地址后会对其进行缓存,减少网络请求的损耗。
每种浏览器都有一个固定的 DNS 缓存时间,如 Chrome 的过期时间是 1 分钟,在这个期限内不会重新请求 DNS
- 操作系统缓存
操作系统的缓存其实是用户自己配置的
hosts文件
在浏览器中进行访问的时候,会优先查询浏览器缓存,如果未命中则继续查询操作系统缓存,最后再查询本地域名服务器,然后本地域名服务器会递归的查找域名记录,最后返回结果。主机和本地域名服务器之间的查询方式是递归查询,也就是说主机请求本地域名服务器,那么本地域名服务器作为请求的接收者一定要给主机想要的答案。
DNS 查询过程
其实将域名服务器之间的 DNS 查询请求过程和域名缓存结合起来,就是一个完整的 DNS 协议进行域名解析的过程
这里我们以正向解析为例(域名解析成 IP 地址):
解析域名的过程如下:
- 首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表
- 若没有命中,则继续搜索操作系统的 DNS 缓存
- 若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果
- 若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询
- 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器
- 本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名服务器的地址
- 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
- 本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
- 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起
- 至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起
知识支撑
IP
一长串能够唯一地标记网络上的计算机的数字。IP 地址是一个唯一地址,用于标识互联网或本地网络上的设备。
IP地址可视为给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信。我们可以把“个人计算机”比作“一台电话”,那么“IP地址”就相当于“电话号码”;
举个栗子:当我们用电脑(个人计算机)搜索"什么是DNS?",就需要打开百度网址(电话号码)访问百度网页(服务器)输入搜索内容,如此才能获取结果。
域名
又称网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)比如
www.baidu.com
为了不混淆域名和网址的概念,可以理解为,网址里面含有域名。举个栗子::www.gitee.com/veal98 就是一个网址,而 www.gitee.com 就是域名
域名结构
域名是一个具有层次的结构,从上到下一次为根域名、顶级域名、二级域名、三级域名...
例如
www.xxx.com,www为三级域名、xxx为二级域名、com为顶级域名,系统为用户做了兼容,域名末尾的根域名.一般不需要输入
域名服务器
在域名的每一层都会有一个域名服务器,除此之外,还有电脑默认的本地域名服务器
-
根域名服务器
根域名服务器保存所有的顶级域名服务器的地址,理论上所有域名的查询都必须先查询根域名,所以一般来说所有的域名服务器都会注册一份根域名服务器的 IP 地址的缓存,用于在必要的时候向其发送请求。
-
顶级域名服务器
顶级域名服务器显然就是用来管理注册在该顶级域名下的所有二级域名的,记录这些二级域名的 IP 地址。
-
权限域名服务器
权限域名服务器就是负责管理一个“区”的域名服务器。
按照上面的逻辑,权限域名服务器应该是管理注册在二级域名下的所有三/四级域名的,但其实不是这样,如果一个二级域名或者一个三/四级域名对应一个域名服务器,则域名服务器数量会很多,我们需要使用划分区的办法来解决这个问题。
-
本地域名服务器
除了上面三种 DNS 服务器,还有一种不在 DNS 层次结构之中,就是本地域名服务器。本地域名服务器是电脑解析时的默认域名服务器,即电脑中设置的首选 DNS 服务器和备选 DNS 服务器。
最后一句
学习心得!若有不正,还望斧正。希望掘友们不要吝啬对我的建议。