目录
前言
本博客是博主用于复习计算机网络的博客,如果疏忽出现错误,还望各位指正。
这篇博客是在B站掌芝士zzs这个UP主的视频的总结,讲的非常好。
可以先去看一篇视频,再来参考这篇笔记(或者说直接偷走)。
一条视频讲清楚什么是DNS协议-域名是怎么转换为IP地址的_哔哩哔哩_bilibili
前篇
- 计算机网络——MAC地址和IP地址-CSDN博客
- 计算机网络——交换机和路由器-CSDN博客
- 计算机网络——网络地址转换(NAT)技术-CSDN博客
- 计算机网络——TCP和UDP协议-CSDN博客
- 计算机网络——DHCP协议-CSDN博客
- 计算机网络——ARP协议-CSDN博客
引言
大家每天都在使用浏览器浏览网页,访问一个网站最重要的一部分就是输入这个网站的域名,或者发送邮件时跟在@和后面的域名。域名到底是什么?它与IP地址到底是什么关系?今天我们就一起来了解一下DNS协议以及其工作原理。
IP地址与域名
我们都知道在TCP/IP协议中,IP地址才是每台计算机或者服务器的唯一标识。
那为什么我们访问网站不直接使用IP地址来访问,而是使用域名来访问呢?
其实直接使用IP地址也是可以的。比如我们知道百度的IP地址是180.101.50.242,把这个IP输入到浏览器的地址栏,照样可以成功访问百度。
这样看起来貌似域名IP地址都是可以工作的那域名和IP地址到底是什么关系呢?
举一个例子,我们平时用手机进行通信,每台手机都拥有一个11位的号码,作为手机的唯一标识,移动公司也是通过手机号码进行关联通信的。
同时我们的手机中保存了很多联系人的电话号码,但当我们拨打电话时,不会每次都输入11位号码再拨打电话,而是会为其起一个名称被关联起来。
对于用户来说,记住名称比较容易,而记住电话号码就比较困难了。
但是对于移动公司来说,数字更容易识别与处理。
在网络世界中也是这样的,IP地址就好比电话号码,域名就好比电话号码对应的名称。
用户不需要记住网站的IP地址,而只需要记住其域名就可以正常访问。方便记忆访问。
在网络世界中仍然是以IP地址作为主机的唯一标识。
用户输入域名需要先查询到其对应的IP地址,这个查询的协议就是DNS协议。
DNS协议的工作流程
当你在浏览器中输入一串网址并按下回车键。
首先浏览器会去解析这段网址,从中取出域名,然后组建一包DNS查询报文,并发送到主机的上一级DNS服务器。
在开启DHCP的情况下,DNS服务器是会通过DHCP协议自动获取的,用户也可以手动配置。
这里大家只需要知道这一帧DNS查询报文会发送到其上一级的DNS服务器。
DNS服务器收到这一帧查询报文后会在自己缓存的DNS池中查找这个域名的记录,试图找到其对应的IP地址。
如果找不到会再向其更上一级的DS服务器进行查找。
上级有可能会再向更上一级查找。
总之最终DNS服务器会返回一个结果,要不就是查询成功,返回的是其对应的IP地址。要不就是查询失败。
浏览器拿到查询到的IP地址后会使用此IP地址构建HTTP协议。
数据包通过HTTP协议最终获取到需要显示的网页。
为了提高效率,浏览器并不是每次都需要查询域名对应的IP地址的。
浏览器会缓存查询到的域名IP并在一定时间内直接使用,其结果只有超过一定的时间后才会再次进行查询。
DNS服务器节点之间是如何维护上下级关系的
在全球的互联网中拥有数以亿计的域名,并且他们维护在大量的域名服务器中,并且每天都在新增大量的域名。
比如原在美国上线了一个网站,在中国的一台计算机能在很短的时间内就成功解析到其域名,并成功访问到其内容。
可想而知这些域名如何有序的维护也是一个难题。
我们下面来看一下这个问题。
首先是域名本身的结构,比如www.mail.zhangzhishi.com这个域名,我们可以按照点的位置来给它划分一定的等级。
比如com是最顶级的域,表示的是公司。
zhangzhishi是com的子域,表示的是公司名。
mail是涨知识的子域,表示的是邮箱。
www是没有的子域是大家常用的前缀,表示的是万维网。
按照这个规则,我们可以扩展出来几个zhangzhishi的子域。比如work game。
同理com底下也有很多子域,比如baidu、QQ等。
有了这个层次结构,我们就可以来关联其所在的服务器了。
比如com域是一台DNS服务器,zhangzhishi也可以是一台DNS服务器。
为了便于表达,我们先认为每个子域都是一台DNS服务器。
实际上有可能多个域都位于同一台DNS服务器中。
那么顶层的域就只需要知道自己子域的IP地址就可以了。
比如说到一个mail.zhangzhishi.com域名的查询请求,首先导航到它的最顶层的com域服务器。
com域服务器中没有这个域名,它只需要把请求转到下一级子域服务器,也就是zhangzhishi服务器。
zhangzhishi域服务器把查询请求转到mail子域服务器,就可以顺利的查询到这个域名的IP地址了。
同理,所有com子域为baidu查询请求,只需要导航到baidu子域服务器就可以了。
当然com域也不是最顶层域,它属于根域的一个子域。
直属根域的子域还有edu、org、net、cn等等很多。
而我们的计算机想要查询到所有的域名,只需要通过上一级DS服务器直接连接到根域就OK了。
目前全球有13个根域服务器,一个为主根服务器在美国,其余12个为辅根服务器,其中9台在美国。欧洲有两台,分别位于英国和瑞典,亚洲有一台位于日本。