本文参考:计算机网络第六版
文章目录
1 域名产生的原因及域名分类
域名系统 DNS(名称)是互联网使用的一种命名系统,用于将易于人们记忆的机器名称(域名)转换为 IP 地址。
那么域名评级为何存在呢?
由于整个互联网不可能只使用一台域名服务器来提供服务,因此域名系统DNS采用层次树命名,采用分布式域名系统。 关于这一点,请参考第3节的域名解析流程。
2 域名分类
任何连接到互联网的主机或路由都有一个唯一的层次名称,即域名(名称)。
采用分层树结构命名方法。 域是名称空间中的可管理划分(按组织组织划分)。 一个域名可以分为子域名,子域名又可以分为顶级域名、二级域名、三级域名等。从右到左分别是顶级域名、二级域名名称、三级域名等,用点分隔。 喜欢:
它由三个标签组成,com是顶级域名,baidu是二级域名,tieba是三级域名。 并且域名不区分大小写。
PS:没有一级域名。
现在有人把两者合称为二级域名,但根据wiki的定义,二级域名就是baidu。
3 域名系统和域名解析过程 3.1 域名系统
上面只是从语法上分析了域名解析,但实际上我们应该对域名解析的真实过程有一个基本的概念。
我们可以用域名树来表示域名网络结构。 最上面的是根,但是没有对应的名字。 根以下一级的节点为最高级别的顶级域名(因为根没有名称,所以根以下一级的域名为顶级域名)。 顶级域名向下分为二级域名,再进一步分为三级域名和四级域名。 这里解释一下域名系统中root的概念。
DNS域名服务器也有类似的结构
图中,每个域名服务器都可以进行部分域名到IP地址的解析。 当DNS服务器无法进行域名到IP地址的转换时,就会到网络上的其他域名服务器进行解析。 从图中还可以看出,DNS域名服务器也是分层排列的。 每个域名服务器仅管理域名系统的一部分。
3.2 域名服务器分类
我个人认为本地域名服务器这个概念更重要,也不同于前面三类。
(1)根服务器
根域名服务器是最高级别的域名服务器。 所有根域名服务器都知道所有顶级域名服务器的域名和IP地址。 在根域名服务器的第一个版本中,要查询的域名不会直接转换为IP。 相反,它会告诉本地域名服务器接下来要查询哪个顶级域名服务器。
(2)顶级域名服务器
顶级域名服务器管理在顶级域名服务器上注册的所有二级域名,但在收到DNS查询时会做出相应的响应。 (可能是给出最终结果或者下一步应该找到的域名服务器IP)
(3)权威域名服务器
可以理解,负责二级域名下一个区域的域名服务器应该各有一个权威域名服务器。
PS:我觉得这里有一点误解。 如果您在阿里云购买域名,可以自行设置三级域名。 如果访问量少,就只有一个区。 以下应与公共域名服务器具有同等权限。
(4)本地域名服务器
本地域名服务器不属于3.1域名服务器图中的层次结构,但它对于域名系统来说非常重要。 但当主机发送DNS请求时,会发送到本地域名服务器。
每个互联网服务提供商ISP(电信、联通和移动)或大学都可以拥有本地域名服务器。 该服务器有时称为默认域名服务器。 本地域名服务器一般距离用户较近,一般不超过几路路程。 如果要查询的IP属于同一本地ISP,则可以直接返回结果地址IP。
域名服务器还有主从模式,保证服务可用
3.3 域名解析流程
在了解了3.2中几种域名服务器的区别之后,这里我们来学习一下最重要的域名是如何变成IP的。
域名服务器(DNS)实际上记录了域名和IP地址的对应关系。
从主机发起查询请求到得到结果的过程如下:
1 主机向本地域名服务器发起查询。
2 本地域名服务器向网络中各DNS域名服务器发起请求并获取结果。
3 本地域名服务器将结果告诉主机。
DNS查询过程有两种模式:
递归方式(用于上诉查询1中查询主机和本地域名服务器):
如果主机查询的本地域名服务器不知道被查询域名的IP地址,则本地域名服务器将继续作为DNS客户端向其他根域名服务器发送查询请求消息(即继续代表主机查询),而不是让主机自己执行下一个查询。 因此,递归查询返回的查询结果要么是要查询的IP地址,要么报错,提示无法查询到所需的IP地址。
迭代方式(用于本地域名服务器和各个DNS域名服务器的查询过程2):
当根域名服务器收到来自本地域名服务器的迭代查询请求消息时,它要么给出要查询的IP地址,要么告诉本地服务器:“接下来应该查询哪个域名服务器?” 然后让本地服务器进行后续的查询。 根域名服务器通常将其知道的顶级域名服务器的IP地址告诉本地域名服务器,然后本地域名服务器向顶级域名服务器进行查询。 顶级域名服务器收到本地域名服务器的查询请求后,要么给出要查询的IP地址,要么告诉本地服务器下一步应该查询哪个权威域名服务器。 最后,知道要解决的IP地址或错误,并将结果返回给发起查询的主机。
真正的DNS解析过程:主机与本地域名服务器之间的递归查询、本地域名服务器的迭代查询
真正的DNS实现一般采用缓存技术,各级域名服务器将查询结果缓存一段时间。
3.4 示例
下面用计算机网络书籍上的一个例子来说明解析过程:
假设一台有域名的主机想知道另一台主机的IP地址。 例如,主机打算发送邮件至。 这时你必须知道主机的IP地址。 以下是上图A中的几个查询步骤:
1、主机首先向本地服务器进行递归查询。
2、本地服务器采用迭代查询。 它首先查询根名称服务器。
3、根域名服务器告诉本地服务器下次要查询的顶级域名服务器的IP地址。
4、本地域名服务器查询顶级域名服务器。
5、顶级域名服务器将下一步需要查询的权威服务器的IP地址告知本地域名服务器。
6、本地域名服务器查询权威域名服务器。
7、权威域名服务器将被查询主机的IP地址告诉本地域名服务器。
8、本地域名服务器最终告诉查询结果。
整个查询过程总共使用了8个UDP消息。 经过3次迭代查询,本地域名服务器从权威域名服务器获取主机的IP地址。 最后将结果返回给发起查询的主机z。
这里还需要进行说明的是浏览器到本地域名服务器之前的操作:
1 当我们访问一个 URL,例如 y.abc.com会优先查找浏览器的 DNS 缓存,如果命中就会返回,未命中就会继续下一步,查找操作系统的缓存。
2 浏览器的 DNS 缓存没有命中,则查看操作系统中是否有域名对应的 IP,位于操作系统的 hosts 文件。
3 当 浏览器 DNS 缓存 与 系统(OS)缓存 均无映射,则请求会发送到路由器缓存中检查。(这里路由缓存已经相当于用迭代模式的本地域名服务器了)
正如上诉所说各级域名系统均具有高速缓存。而DNS对域名的解析结果会缓存在上诉所得各级域名服务器内。(这里也包括浏览器)**而缓存时长则由DNS服务设置TTL时间决定。**
3.5 域名前加www
为什么很多域名前面都有www? 由于历史遗留的原因,早期的互联网公司使用域名前缀来区分服务,例如,,,等,因此,因为这个遗留原因,www一直沿用至今。
从DNS行为来看,有www和无www的解析完全被处理成两个不同的域名,比如
做域名后台解析设置可以指向网站IP
也指向网站IP。当然,从SEO优化的角度,我们可以将301重定向到
3.6 Linux命令查看域名对应的IP
挖掘域名
挖
内容为域名对应的IP
PS:能访问真外网的就不要点击这个网址,这是知乎上的一个笑话(手动滑稽)
4 主机名
有网友提到主机名和域名的区别,立刻被问到。 当谈论主机名时,它们通常用于局域网。 例如,在局域网中搜索同事的计算机时,会使用主机名。 这里我们想起了人们谈论最多的hosts文件。 在这里我们也总结一下我们学到的东西。
主机名我个人认为需要从WAN和LAN来看。
4.1 广域网
在广域网中,域名中的主机名是指:
主机名是指二级域名(三级域名)以下的域名。 这是用户分配给自己域中的服务器的名称。 用户可以任意指定,因此称为主机名。
4.2 局域网
在网络通信中,每个IP可以唯一标识一台主机,但IP地址的可读性很差。 因此人们使用由英文字母和单词组成的主机名来代替主机IP地址。例如
我使用的内网中,主机名使用的是服务器172.28.52.200的主机名。 其实ping 172.28.52.200 的效果是一样的。
主机名是如何实现的?
1 通 4.3 中文主机模式
2 通过内网DNS解析
4.3 主机文件
Hosts的功能与dns类似。 它也是通过域名来解析IP地址,但是是在本地完成的,解析优先级比dns高。 也就是说系统会首先检查hosts文件中是否有域名解析信息。 如果没有找到,就会进行第二步,继续查询DNS服务器。
测试:
C:\\\\等
这里我在host文件中添加一个主机名,并映射到127.0.0.1
我尝试 ping
果然解析为127.0.0.1
5 参考链接: