计算机网络:应用层 - 域名系统 DNS

计算机网络:应用层 - 域名系统 DNS


互联网中的每台设备都有一个唯一的IP地址,但这些地址通常是复杂的数字组合,例如 172.217.160.142,难以记忆和识别。域名系统将这些复杂的IP地址与易于记忆的文字名称(域名)对应起来,例如 google.com。这样,用户只需要记住域名,就可以访问相应的网站或服务,大大降低了记忆负担。

DNS就是用域将域名转化为IP地址

域名结构

任何一个连接在互联网上的主机,都有一个唯一的层次结构的名字,即域名

互联网采用层次树状结构的命名方法。

域名由若干标号序列组成,各标号之间用点.隔开,分别为不同级别的域名。

域名遵循如下规则:

  • 域名中的标号都由英文字母和数字组成,每一个标号不超过 63 个字符,不区分大小写
  • 标号中除连字符-外不能使用其他的标点符号
  • 级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边
  • 由多个标号组成的完整域名总共不超过 255 个字符

域名是多层次的,如图:

域名中的每一个层次叫做域 (domain) 。最高层次的域可以划分子域,每一个子域还可继续划分子域,这样就形成了顶级域、二级域、三级域,等等。

域名树的叶子节点就是一台计算机的名称了。此处区分一下名称与域名,比如mail.cctv.com是一个域名,而mail这是这个域名对应主机的名称。

顶级域名 TLD又分为三类:

  • 国家顶级域名 nTLD:如cn表示中国,us表示美国,uk表示英国
  • 通用顶级域名 gTLD:最常见的有七个:
    • com:公司企业
    • net:网络服务机构
    • org:非盈利性组织
    • int:国际组织
    • edu:美国教育机构
    • gov:美国政府部门
    • mil:美国军事部门
  • 反向域 arpa:用于反向域名解析,即把IP地址反向解析为域名

在国家顶级域名下注册的二级域名,由国家自行确定,我国划分为如下两类:

  • 行政区域名:共34个,用于我国各个省份和自治区,直辖市等
  • 类别域名:常见的有七个:
    • ac:科研机构
    • com:工,商,金融等企业
    • edu:教育机构
    • gov:政府部门
    • net:提高网络服务的机构
    • mil:军事机构
    • org:非盈利性组织

你会发现,gov在一级域名中表示美国政府,在cn下的二级域名中,表示中国政府。还有comorg等等。也就是说,名称相同的域,等级未必相同。


域名服务器

域名系统由分布在世界各地的域名服务器来实现。

域名系统不是以为管理单位,而是以 (zone)为管理单位。每个根据自己的情况来划分,每个区有自己的权限域名服务器,来保存该中所有IP地址域名的映射。

如图所示:

对于图a,域abc.com只设置一个区abc.com,此时都是abc.com

对于图b,域abc.com划分了两个,分别是abc.comy.abc,com

域名服务器也是分层次的:

最顶端有一个根域名服务器,随后是顶级域名服务器权限域名服务器。而刚刚案例中abc.comy.abc.com都有自己的权限域名服务器。因为一个权限域名服务器管辖一个,一个内可以有多个权限域名服务器,也可以有多个

  • 根域名服务器:最高层次的域名服务器,也是最重要的。根域名服务器知道所有顶级域名服务器的地址。
  • 顶级域名服务器:管理在该顶级域名下注册的二级域名。
  • 权限域名服务器:在一个内部负责一个分区,知道自己分区中所有域名IP地址映射关系。
  • 本地域名服务器:其不属于域名层次结构中,用户查询域名时,一般会(不全是)先通过本地域名服务器,然后本地域名服务器发起请求查询域名,被查询到的域名会被缓存在本地域名服务器中,如果下次查询时,有对应条目的缓存,就不会继续查询,而是直接返回结果了。

域名解析

域名解析分为两种:迭代查询递归查询

迭代查询

某主机想要查询y.abc.com的地址:

首先查询本地域名服务器,如果该服务器缓存了对应条目,则直接返回结果。否则查询根域名服务器

根域名服务器知道所有顶级域名服务器的地址,y.abc.com的顶级域名是com,于是把com顶级域名服务器的地址给本地域名服务器本地域名服务器再去顶级域名服务器中查询。

顶级域名服务器知道所有在自己下面注册的域名的地址,这一步有可能直接就得到域名对应的地址了,也有可能会得到该域名的权限域名服务器的地址。本地域名服务器再去权限域名服务器中查询。

权限域名服务器知道所有在自己下面注册的域名的地址,此时y.abc.com的地址就可以被解析出来了,返回IP地址本地域名服务器。但是也有可能这个地址归属于同一个的另外一个权限域名服务器,此时返回目的权限域名服务器的地址给本地域名服务器。随后本地域名服务器再去对应的权限域名服务器查询。

本地域名服务器查询到结果后,缓存一份在自己的数据库中,然后将其交给查询该域名的主机。


递归查询

与刚刚同样的查询:

同样的,首先查询本地域名服务器,如果该服务器缓存了对应条目,则直接返回结果。否则查询根域名服务器

根域名服务器知道所有顶级域名服务器的地址,y.abc.com的顶级域名是com,于是根域名服务器自己到com顶级域名服务器中查询。

顶级域名服务器知道所有在自己下面注册的域名的地址,这一步有可能直接就得到域名对应的地址了,也有可能会得到该域名的权限域名服务器的地址。于是顶级域名服务器自己到权限域名服务器中查询。

权限域名服务器知道所有在自己下面注册的域名的地址,此时y.abc.com的地址就可以被解析出来了,返回IP地址顶级域名服务器

但是也有可能这个地址归属于同一个的另外一个权限域名服务器,于是权限域名服务器自己到另外一个权限域名服务器中查询。

当最后一个权限域名服务器查询完毕,此时返回给顶级域名服务器,再返回给根域名服务器,再返回给本地域名服务器

本地域名服务器查询到结果后,缓存一份在自己的数据库中,然后将其交给查询该域名的主机。


相关推荐
存储服务专家StorageExpert11 分钟前
DELL SC compellent存储的四种访问方式
运维·服务器·存储维护·emc存储
zqx_715 分钟前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己31 分钟前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称1 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色1 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
醉颜凉1 小时前
银河麒麟桌面操作系统修改默认Shell为Bash
运维·服务器·开发语言·bash·kylin·国产化·银河麒麟操作系统
NiNg_1_2341 小时前
npm、yarn、pnpm之间的区别
前端·npm·node.js
秋殇与星河2 小时前
CSS总结
前端·css
BigYe程普2 小时前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
前端张三2 小时前
Mac 电脑pink 后端ip地址进行本地联调
服务器·tcp/ip·macos