首页 > 其他分享 >DNS域名解析过程详解

DNS域名解析过程详解

时间:2024-03-13 22:11:06浏览次数:21  
标签:本地 域名解析 查询 域名 详解 DNS IP地址 服务器

一、DNS系统

域名系统(Domain Name System),是因特网使用的命名系统,用来把人们方便记忆的主机名转换为机器方便处理的IP地址。

DNS协议属于应用层协议,一般是运行在UDP协议之上,使用53端口。

二、域名

因特网采用层次树状结构的命名方法。采用这种命名方法,任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称,就是域名(Domain Name)。

在域名系统中,每个域分别由不同的组织进行管理。每个组织都可以将它的域再分成一定数目的子域,并将这些子域委托给其他组织去管理。

域名空间的树状图:

 域名组成图:

 顶级域名(TOP Level Domain)大体分为三类:

1.国家顶级域名(nTLD)。国家和某些地区的域名,如“.cn”表示中国,“.us”表示美国,.uk”表示英国。

2.通用顶级域名(gTLD)。 常见的有“.com” (公司)、“.net" (网络服务机构)、“.org”(非营利性组织)和“.gov" (国家或政府部门)等。

3.新通用顶级域名(New Generic Top-level Domain,简写New GTLD)也叫新顶级域名、新顶域等。新顶级域名后缀是在传统域名后缀资源日趋枯竭的情况下开放注册的,首批新顶级域由ICANN于2012年批准并集中于2014开始面向全球开放注册。例如“.xin/.top/.xyz/.vip”等。

国家顶级域名下注册的二级域名由国家自己决定。

三、域名服务器

域名到IP地址的解析是由运行在域名服务器上的程序完成的,一个服务器所负责管辖的(或有权限的)范围称为区(不以“域”为单位),各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有结点必须是能够连通的,每个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。

每个域名服务器不但能够进行一些域名到IP地址的解析,而且还必须具有连向其他域名服务器的信息。当自己不能进行域名到IP地址的转换时,能够知道到什么地方去找其他域名服务器。

DNS使用了大量的域名服务器,它们以层次方式组织。没有一台域名服务器具有因特网上所有主机的映射,相反,该映射分布在所有的DNS上。

采用分布式设计的DNS,是一个在因特网上实现分布式数据库的精彩范例。主要有4种类型的域名服务器。

1)根域名服务器
1.根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的IP地址。

2.根域名服务器也是最重要的域名服务器,不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。

3.因特网上有13个根域名服务器,尽管将这13个根域名服务器中的每个都视为单个服务器,但每个“服务器”实际上是冗余服务器的集群,以提供安全性和可靠性。

4.需要注意的是,根域名服务器用来管辖顶级域(如.com), 通常它并不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应当找哪个顶级域名服务器进行查询。

2)顶级域名服务器
1.这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。

2.收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当查找的域名服务器的IP地址)。

3)授权域名服务器
1.每台主机都必须在授权域名服务器处登记。为了更加可靠的工作,一台主机最好至少有两个授权域名服务器。

2.实际上,许多域名服务器都同时充当本地域名服务器和授权域名服务器。

3.授权域名服务器总能将其管辖的主机名转换为该主机的IP地址。

4)本地域名服务器
1.本地域名服务器对域名系统非常重要。

2.每个因特网服务提供者(ISP)或一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器。

3.当一台主机发出DNS查询请求时,这个查询请求报文就发送给该主机的本地域名服务器。

4.事实上,在Windows系统中配置“本地连接”时,就需要填写DNS地址,这个地址就是本地DNS (域名服务器)的地址。

四、域名解析过程

1.当客户端需要域名解析时,通过本机的DNS客户端构造一个DNS请求报文,以UDP数据报的形式发往本地域名服务器。

2.域名解析有两种方式:递归查询和迭代查询相结合的查询。

递归查询

由于递归查询给根域名服务器的负载过大,所以一般不使用。

递归查询如图:

递归查询与迭代查询结合

递归与迭代相结合查询如图:

 

 

主机向本地域名服务器的查询是递归查询

1.也就是说,如果本地主机所询问的本地域名服务器不知道被查询域名的IP 地址,那么本地域名服务器就以DNS客户的身份,向根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。

2.在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的[见图6.6(a)中的步骤③~⑥]。

3.在步骤⑦中,本地域名服务器从根域名服务器得到了所需的IP地址,最后在步骤⑧中,本地域名服务器把查询结果告诉主机m.xyz.com.

本地域名服务器向根域名服务器的查询是迭代查询

1.当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪个顶级域名服务器进行查询”。

2.然后让本地域名服务器向这个顶级域名服务器进行后续的查询。

3.同样,顶级域名服务器收到查询报文后,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应向哪个权限域名服务器查询。

4.最后,知道所要解析的域名的IP地址后,把这个结果返回给发起查询的主机。

一次完整的DNS域名解析过程

假定某客户机想获知域名为y.abc.com主机的IP地址,域名解析的过程(共使用8个UDP报文)如下:

①客户机向其本地域名服务器发出DNS请求报文。

②本地域名服务器收到请求后,查询本地缓存,若没有该记录,则以DNS客户的身份向根域名服务器发出解析请求。

③根域名服务器收到请求后,判断该域名属于.com域,将对应的顶级域名服务器dns.com的IP地址返回给本地域名服务器。
④本地域名服务器向顶级域名服务器dns.com发出解析请求报文。

⑤顶级域名服务器dns.com收到请求后,判断该域名属于abc.com域,因此将对应的授权域名服务器dns.abc.com的IP地址返回给本地域名服务器。

⑥本地域名服务器向授权域名服务器dns.abc.com发起解析请求报文。

⑦授权域名服务器dns.abc.com收到请求后,将查询结果返回给本地域名服务器。

⑧本地域名服务器将查询结果保存到本地缓存,同时返回给客户机。

标签:本地,域名解析,查询,域名,详解,DNS,IP地址,服务器
From: https://www.cnblogs.com/beatle-go/p/18070415

相关文章

  • 【Python从入门到精通】函数详解
     【上图来源于网络图片】WhydoPythonprogrammerspreferdarkmode? Becauselightattractsbugs.Python的简洁性和易读性,认为这是吸引Python程序员的原因。【Python从入门到精通】专栏课程:1、【Python从入门到精通】认识Python2、【Python从入门到精通】变量&......
  • Redis 八种常用数据类型详解
    夯实基础,这篇文章带着大家回顾一下Redis中的8种常用数据类型:5种基础数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。3种特殊数据类型:HyperLogLog(基数统计)、Bitmap(位图)、Geospatial(地理位置)。Redis5种基本数据类型Redis共有5种基本数据类......
  • 详解c++多态中的析构与构造函数
    首先简单介绍一下多态。多态是面向对象编程中的概念,它允许我们使用基类类型的指针或引用来调用派生类对象的方法。C++中实现多态主要依靠虚函数和动态绑定。那怎么使用多态呢?基类指针或引用指向派生类对象。在我学习过程中,这些概念耳熟能详,但是为什么要有多态呢,先看下面这......
  • Java 异常处理与正则表达式详解,实例演练及最佳实践
    Java异常-Try...Catch在Java代码执行期间,可能会发生各种错误,包括程序员编码错误、用户输入错误以及其他不可预料的状况。当错误发生时,Java通常会停止并生成错误消息,这个过程称为抛出异常。try...catch语句try语句允许您定义一段代码块,并在其中测试是否发生错误。catc......
  • c++:类和对象中:拷贝构造和赋值运算符重载详解
    c++:类和对象构造函数和析构函数详解`文章目录c++:类和对象构造函数和析构函数详解前言一、拷贝构造怎么写拷贝构造1.拷贝构造也是构造函数的一种,构造函数没有值.所以拷贝构造也没有返回值**2.拷贝构造只有一个形参,正常这个形参是自定义类型对象的引用.3.如果我们......
  • Oracle REDO Log详解
    Redo日志文件是Oracle数据库中的非常重要的文件,它记录了对数据库所做的所有更改操作,当事务对数据库进行修改时,Oracle首先将更改写入到REDO日志文件,然后再修改应用到数据文件中。这样可以确保在发生故障时,Oracle可以使用REDO日志来恢复已提交的事务。REDO日志和Archive日志区别......
  • react中JSX的详解
    目录JSX的本质及其与JavaScript的关系探究一、JSX的本质二、JSX与JavaScript的关系三、为什么要使用JSX四、不使用JSX的后果五、JSX背后的功能模块JSX的本质及其与JavaScript的关系探究在React开发中,JSX是一个不可或缺的部分。那么,JSX的本质是什么?它与JavaScript之......
  • Linux虚拟机复制带图详解
    需求场景:“电脑A”虚拟机复制到“电脑B”,包括虚拟机里已安装的软件原封不动带过去。1.找到电脑A的虚拟机存放地址,在VMwareWorkstation中可查看,我自己创建的文件夹叫qilin2.把整个文件夹压缩,压缩后qilin.zip(网上有单独选.vmx几个文件,我的建议是直接把整个文件夹压缩,这......
  • 数据结构:详解【顺序表】的实现
    1.顺序表的定义顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。动态顺序表与数组的本质区别是——根据需要动态的开辟空间大小。2.顺序表的功能动态顺序表的功能一般有如下几个:初始化顺序表打印顺序表中的数据检查顺序表的......
  • 多重背包详解,二进制优化、单调队列优化
    文章目录零、前言一、多重背包初步1.1问题描述1.2朴素算法二、朴素算法的优化策略2.1二进制优化2.1.1算法思想2.2二进制优化的正确性证明2.3代码实现2.2单调队列优化2.2.1算法思想2.2.2代码实现2.3、总结三、OJ练习3.1P1776宝物筛选3.1.1原题链接3.1.2思路分析3.1.3......