前几天被其他同事的一个问题给问到了,域名的问题,问本人现在的域名很长,当时随口一说是这是一个二级域名,但后面一想有点不对,这种基础的东西搞不清楚是显得又low又蠢,得学习记录一波。今天晚上有空转身就把绿壳计算机网络摸出来了,果然说错了……
本文参考:计算机网络第六版
文章目录
1 域名及域名分级的原因
域名系统DNS(domain name system)是因特网使用的命名系统,用于把便于人们记忆的机器名字(域名)转换成ip地址。
那么为什么存在域名分级呢?
因为整个因特网不可能只使用一个域名服务器提供服务,所以,域名系统DNS使用成层次树状结命名,并使用分布式的域名系统。这一点可以参考第三节中域名解析过程。
任何连接到因特网上的主机或路由都有唯一层次结构的名字即域名(domain name)。
因特网采用层次树状结构命名方法。域是名字空间中一个可被管理的划分(按机构组织划分),域可被划分为子域,子域可再被划分,即形成了顶级域名、二级域名、三级域名等。从右向左为顶级域名、二级域名、三级域名等,用点隔开。如:
tieba.baidu.com
它由三个标号组成, com即为顶级域名,baidu为二级域名,tieba即为三级域名。且域名不分区大小写。
PS:没有一级域名的说法。
现在也有人把baidu.com连在一起称为二级域名,但从wiki定义上来说二级域名只是baidu而已。
上面只是从语法上对域名解析进行了分析,但实际上对域名解析真实流程应该有一个基础的概念。
我们可以用一个域名树来表示一个来表示域名网络结构,最上面的是根,但没有对应的名字。根下面一级的节点就是最高一级的顶级域名(因为根没名字,所以根下面一级域名就是顶级域名)。顶级域名往下划分就是二级域名,再往下划分就是三级四级域名。这里就解释了域名系统中根的概念。
DNS域名服务器同样具有类似的结构
在图中每一个域名服务器都能进行部分域名到IP地址的解析,当某个DNS服务器不能进行域名到IP地址的转换时,它就会到网络上其他域名服务器进行解析。从图中也可看出,DNS域名服务器也是按照层次安排。每一个域名服务器都只对域名体系中的一部分进行管辖。
3.2 域名服务器分类个人认为本地域名服务器的概念比较重要 和前面三类是不一样的。
(1) 根服务器
根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有顶级域名服务器的域名和ip。根域名服务器一版情况下不会把待查询的域名直接转换IP,而是告诉本地域名服务器下一步应该找哪一个顶级域名服务器进行查询。
(2)顶级域名服务器
顶级域名服务器管理在该顶级域名服务器注册的所有二级域名,但受到DNS查询就会有相应应答。(可能是给出最后的结果或下一步一应当找的域名服务器ip)
(3)权限域名服务器
可以理解为二级域名下 负责一个区的域名服务器、如abc.com和y.abc.com应各设有一个权限域名服务器。
PS: 这里感觉有理解有点误差,在阿里云上买了某个域名abc.com 后面的三级域名都是可以自己设置的,如果访问量较小,整个abc.com仅一个区。下面的y.abc.com和 a.abc.com应该是公用的同一个权限域名服务器。
(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地址。
迭代模式(用于上诉查询过程2 本地域名服务器与各DNS域名服务器的查):
当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的 IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。
真实DNS解析流程:主机与本地域名服务器递归查询,本地域名服务器迭代查询
这里通过一个计算机网络书上的一个举例来说明解析流程:
假定域名为m.xyz.com的主机想知道另一个主机y.abc.com的IP地址。例如,主机m.xyz.com打算发送邮件给y.abc.com。这时就必须知道主机y.abc.com的IP地址。下面是上图a的几个查询步骤:
1、主机m.abc.com先向本地服务器dns.xyz.com进行递归查询。
2、本地服务器采用迭代查询。它先向一个根域名服务器查询。
3、根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
4、本地域名服务器向顶级域名服务器dns.com进行查询。
5、顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。
6、本地域名服务器向权限域名服务器dns.abc.com进行查询。
7、权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
8、本地域名服务器最后把查询结果告诉m.xyz.com。
整个查询过程共用到了8个UDP报文。本地域名服务器经过3次迭代查询后,从权限域名服务器dns.abc.com得到主机y.abc.com的IP地址。最后将结果返回给发起查询的主机m.xy.comz
为什么很多域名前面都有www,因为历史遗留原因,早期互联网公司以域名前缀来区分服务,如,mail.xxx.com,ftp.xxx.com等,所以因为这个遗留原因导致了www延用至今。
在DNS行为上对www和不带www的的解析完全是处理成两个不同域名,如
xxx.com
做域名后台解析设置可以将指向网站ip
xxx.com也同样指向网站ip。当然从SEO优化上考虑,我们可以将xxx.com做301重定向到
dig 域名
dig
有网友提到主机名和域名区别的问题,一下又被问住了。谈起主机名一般都是局域网里面用的多。比如局域网里搜索同事的电脑就是用的主机名。这里进而联想到谈的比较多的hosts文件。 这里也整理一下学习到内容。
主机名,个人认为需要从广域网和局域网来看。
4.1 广域网在广域网,域名里面的主机名是指:
主机名是指二级域名下一级域名(三级域名)这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的,所以被称为主机名。
在网络通信中,每个IP可唯一标识一台主机,但IP地址的可读性非常差。于是人们使用英文字母和单词组成的主机名来替换该主机IP地址。比如
在我所使用内网内,就是用cdoa08的主机名作为172.28.52.200这台服务器的主机名。实际上ping cdoa08 和ping 172.28.52.200 效果是一样。
hosts的作用和dns类似,也是通过域名解析出IP地址,只不过是在我们本地进行,而且解析优先级比dns还要高。也就是说系统会首先查找hosts文件里是否有域名的解析信息,如果没有查询到,才会走第二步,继续在dns服务器中查询。
测试:
C:\Windows\System32\drivers\etc
https://www.zhihu.com/question/29998374
https://blog.csdn.net/qq_15936309/article/details/76896562
https://zhuanlan.zhihu.com/p/117964719