南方雪松 發表於 2021-3-18 09:55:00

详解DNS域名解析系统(域名、域名服务器[根、顶级、授权/权限、本地]、域名解析过程[递归与迭代])

<p>文章转自:https://blog.csdn.net/weixin_43914604/article/details/105583806</p>
<p>学习课程:《2019王道考研计算机网络》</p>
<p>学习目的:利用最省时间的方法学习考研面试中的计算机网络。</p>
<hr>
<h1 id="1dns系统">1、DNS系统</h1>
<ul>
<li><code>域名系统(Domain Name System, DNS)</code>是因特网使用的命名系统,用来<code>把便于人们记忆的具有特定含义的主机名(如www.BitHachi.cn)转换为便于机器处理的IP地址</code>。</li>
<li>相对于IP地址,人们更喜欢使用具有特定含义的字符串来标识因特网上的计算机。</li>
<li>DNS系统采用客户/服务器模型,其协议运行在<code>UDP</code>之上,使用<code>53</code>号端口。</li>
<li>从概念上可将DNS分为3部分:<code>层次域名空间、域名服务器和解析器</code>。<br>
<img src="https://img-blog.csdnimg.cn/20200417164821448.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" loading="lazy"></li>
<li>某台主机访问网站www.bithachi.cn网站为例,DNS的大致流程<br>
<img src="https://img-blog.csdnimg.cn/20200417165610249.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" loading="lazy"></li>
</ul>
<h1 id="2域名">2、域名</h1>
<ul>
<li><code>因特网采用层次树状结构的命名方法</code>。采用这种命名方法,任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称,即<code>域名(Domain Name)</code>。</li>
<li><code>域(Domain)</code>是名字空间中一个可被管理的划分。</li>
<li>域还可以划分为子域,而子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。</li>
</ul>
<p><strong>在域名系统中,每个域分别由不同的组织进行管理。每个组织都可以将它的域再分成一定数目的子域,并将这些子域委托给其他组织去管理。</strong></p>
<ul>
<li>例如,管理CN域的中国将EDU.CN子域授权给中国教育和科研计算机网(CERNET)来管理。</li>
<li>比如我的域名bithachi.cn是一个二级域名,我可以任意分配三级域名,比如1001.bithachi.cn和1002.bithachi.cn,这两个网址是可以访问的,小项目。</li>
</ul>
<p><strong>域名空间的树状结构:</strong><br>
<img src="https://img-blog.csdnimg.cn/20200417174147868.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" loading="lazy"><br>
每个域名都由<code>标号</code>序列组成,而各标号之间用点<code>(“.”)</code>隔开。</p>
<p><img src="https://img-blog.csdnimg.cn/20200417172638686.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" loading="lazy"></p>
<p><strong>关于域名中的标号有以下几点需要注意:</strong></p>
<ul>
<li>1)标号中的英文<code>不区分大小写</code>。</li>
<li>2)标号中除连字符(-) 外不能使用其他的标点符号。</li>
<li>3)每个标号不超过63个字符,多标号组成的完整域名最长不超过255个字符。</li>
<li>4)级别最低的域名写在最左边,级别最高的顶级域名写在最右边。</li>
</ul>
<p><code>顶级域名(Top Level Domain, TLD)</code>分为如下三大类:</p>
<ul>
<li>1)国家顶级域名(nTLD)。国家和某些地区的域名,如“.cn”表示中国,“.us”表示美国,.uk”表示英国。</li>
<li>2)通用顶级域名(gTLD)。 常见的有“.com” (公司)、“.net" (网络服务机构)、“.org”(非营利性组织)和“.gov" (国家或政府部门)等。</li>
<li>3)基础结构域名。<code>这种顶级域名只有一个,即arpa,用于反向域名解析</code>,因此又称反向域名。<code>反向域名解析与通常的正向域名解析相反,提供IP地址到域名的对应</code>,反向域名格式如:X.X.X.in-addr.arpa。很多网络服务提供商要求访问的IP地址具有反向域名解析的结果,否则不提供服务。</li>
</ul>
<blockquote>
<p>国家顶级域名下注册的二级域名均由该国家自行确定。</p>
</blockquote>
<h1 id="3域名服务器">3、域名服务器</h1>
<ul>
<li><code>因特网的域名系统被设计成一个联机分布式的数据库系统,并采用客户/服务器模型</code>。</li>
<li>域名到IP地址的解析是由运行在域名服务器上的程序完成的,<code>一个服务器所负责管辖的(或有权限的)范围称为区(不以“域”为单位)</code>,各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有结点必须是能够连通的,每个区设置相应的<code>权限域名服务器</code>,用来保存该区中的所有主机的域名到IP地址的映射。</li>
<li>每个域名服务器不但能够进行一些域名到IP地址的解析,而且还必须具有连向其他域名服务器的信息。当自己不能进行域名到IP地址的转换时,能够知道到什么地方去找其他域名服务器。</li>
<li>DNS使用了大量的域名服务器,它们以层次方式组织。没有一台域名服务器具有因特网上所有主机的映射,相反,该映射分布在所有的DNS上。</li>
<li>采用分布式设计的DNS,是一个在因特网上实现分布式数据库的精彩范例。主要有4种类型的域名服务器。</li>
</ul>
<p><img src="https://img-blog.csdnimg.cn/2020041718590979.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" loading="lazy"></p>
<h2 id="1根域名服务器">(1)根域名服务器</h2>
<ul>
<li><code>根域名服务器</code>是<code>最高层次</code>的域名服务器,所有的<code>根域名服务器</code>都知道<code>所有</code>的<code>顶级域名服务器的IP地址</code>。</li>
<li>根域名服务器也是最重要的域名服务器,不管是哪个<code>本地域名服务器</code>,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于<code>根域名服务器</code>。</li>
<li>因特网上有<code>13个根域名服务器</code>,尽管我们将这13个根域名服务器中的每个都视为单个服务器,但<code>每个“服务器”实际上是冗余服务器的集群</code>,以提供安全性和可靠性。</li>
<li>需要注意的是,<code>根域名服务器</code>用来<code>管辖顶级域(如.com)</code>, 通常它并不直接把待查询的域名直接转换成IP地址,而是<code>告诉本地域名服务器</code>下一步应当找哪个<code>顶级域名服务器</code>进行查询。</li>
</ul>
<h2 id="2顶级域名服务器">(2)顶级域名服务器</h2>
<ul>
<li>这些域名服务器负责<code>管理在该顶级域名服务器注册的所有二级域名</code>。</li>
<li>收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当查找的域名服务器的IP地址)。</li>
</ul>
<h2 id="3授权域名服务器权限域名服务器">(3)授权域名服务器(权限域名服务器)</h2>
<ul>
<li><code>每台主机</code>都必须在<code>授权域名服务器</code>处登记。为了更加可靠地工作,一台主机最好至少有两个授权域名服务器。</li>
<li>实际上,许多<code>域名服务器</code>都<code>同时</code>充当<code>本地域名服务器</code>和<code>授权域名服务器</code>。</li>
<li><code>授权域名服务器</code>总能将其管辖的<code>主机名</code>转换为该主机的<code>IP地址</code>。</li>
</ul>
<h2 id="4本地域名服务器">(4)本地域名服务器</h2>
<ul>
<li>本地域名服务器对域名系统非常重要。</li>
<li>每个因特网服务提供者(ISP), 或一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器。</li>
<li><code>当一台主机发出DNS查询请求时,这个查询请求报文就发送给该主机的本地域名服务器</code>。</li>
<li>事实上,我们在Windows系统中配置<code>“本地连接”</code>时,就需要填写DNS地址,这个地址就是<code>本地DNS (域名服务器)的地址</code>。</li>
</ul>
<h1 id="4域名解析过程">4、域名解析过程</h1>
<ul>
<li><code>域名解析是指把域名映射成为IP地址或把IP地址映射成域名的过程。前者称为正向解析,后者称为反向解析。</code></li>
<li>当客户端需要域名解析时,通过本机的DNS客户端构造一个<code>DNS请求报文</code>,以<code>UDP数据报</code>方式发往<code>本地域名服务器</code>。</li>
<li>域名解析有两种方式:<code>递归查询</code>和<code>递归与迭代</code>相结合的查询。</li>
</ul>
<h2 id="1递归查询方式">(1)递归查询方式</h2>
<ul>
<li><strong>递归查询的过程如下图所示</strong>, 由于该方法给根域名服务造成的负载过大,所以在实际中几乎不使用。<br>
<img src="https://img-blog.csdnimg.cn/20200417212323192.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" loading="lazy"></li>
</ul>
<h2 id="2-常用递归与迭代相结合的查询方式">(2) 常用递归与迭代相结合的查询方式</h2>
<p><strong>常用递归与迭代相结合的查询方式如下图所示,该方式分为两个部分。</strong></p>
<p><img src="https://img-blog.csdnimg.cn/20200417212650924.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" loading="lazy"><br>
<strong>①<code>主机</code>向<code>本地域名服务器</code>的查询采用的是<code>递归</code>查询</strong></p>
<ul>
<li>也就是说,如果<code>本地主机</code>所询问的<code>本地域名服务器</code>不知道被查询域名的IP 地址,那么<code>本地域名服务器</code>就以<code>DNS客户</code>的身份,向<code>根域名服务器</code>继续发出<code>查询请求报文</code>(即替该主机继续查询),而不是让该主机自己进行下一步的查询。</li>
<li>在这种情况下,<code>本地域名服务器</code>只需向<code>根域名服务器查询</code>一次,后面的几次查询都是递归地在其他几个域名服务器之间进行的[见图(a)中的步骤③~⑥]。</li>
<li>在步骤⑦中,<code>本地域名服务器</code>从<code>根域名服务器</code>得到了所需的<code>IP地址</code>,最后在步骤⑧中,<code>本地域名服务器</code>把查询结果告诉<code>主机</code>m.xyz.com</li>
</ul>
<p><strong>②<code>本地域名服务器</code>向<code>根域名服务器</code>的查询采用<code>迭代</code>查询</strong></p>
<ul>
<li>当<code>根域名服务器</code>收到<code>本地域名服务器</code>发出的<code>迭代查询请求报文</code>时,要么给出所要查询的IP地址,要么告诉<code>本地域名服务器</code>:“你下一步应当向哪个<code>顶级域名服务器</code>进行查询”。</li>
<li>然后让<code>本地域名服务器</code>向这个<code>顶级域名服务器</code>进行后续的查询,如图(b)所示。</li>
<li>同样,<code>顶级域名服务器</code>收到查询报文后,要么给出所要查询的IP地址,要么告诉<code>本地域名服务器</code>下一步应向哪个<code>权限域名服务器</code>查询。</li>
<li>最后,知道所要<code>解析的域名的IP地址</code>后,把这个<code>结果返回</code>给发起查询的<code>主机</code>。</li>
</ul>
<p><strong><code>下面举例说明域名解析的过程:</code></strong><br>
<strong>假定某客户机想获知域名为y.abc.com主机的IP地址,域名解析的过程(共使用8个UDP报文)如下:</strong></p>
<ul>
<li>1️⃣<code>客户机</code>向其<code>本地域名服务器</code>发出<code>DNS请求报文</code>。</li>
<li>2️⃣<code>本地域名服务器</code>收到请求后,查询<code>本地缓存</code>,若没有该记录,则以DNS客户的身份向<code>根域名服务器</code>发出解析请求。</li>
<li>3️⃣<code>根域名服务器</code>收到请求后,判断该域名属于.com域,将对应的<code>顶级域名服务器</code>dns.com的IP地址返回给<code>本地域名服务器</code>。</li>
<li>4️⃣<code>本地域名服务器</code>向<code>顶级域名服务器dns.com</code>发出解析<code>请求报文</code>。</li>
<li>5️⃣<code>顶级域名服务器dns.com</code>收到请求后,<code>判断</code>该域名<code>属于abc.com域</code>,因此将对应的<code>授权域名服务器dns.abc.com</code>的IP地址返回给<code>本地域名服务器</code>。</li>
<li>6️⃣<code>本地域名服务器</code>向<code>授权域名服务器dns.abc.com</code>发起解析<code>请求报文</code>。</li>
<li>7️⃣<code>授权域名服务器dns.abc.com</code>收到请求后,将查询<code>结果</code>返回给<code>本地域名服务器</code>。</li>
<li>8️⃣<code>本地域名服务器</code>将查询结果保存到<code>本地缓存</code>,同时返回给<code>客户机</code>。</li>
</ul>
<p><img src="https://img-blog.csdnimg.cn/20200417212650924.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkxNDYwNA==,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" loading="lazy"></p>
<blockquote>
<ul>
<li>为了提高DNS的查询效率,并减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了<code>高速缓存</code>。</li>
<li>当一个DNS服务器接收到DNS查询结果时,它能将该DNS信息缓存在高速缓存中。这样,当另一个相同的域名查询到达该DNS服务器时,该服务器就能够直接提供所要求的IP地址,而不需要再去向其他DNS服务器询问。</li>
<li>因为<code>主机名和IP地址之间的映射不是永久的,所以DNS服务器将在一段时间后丢弃高速缓存中的信息</code>。</li>
</ul>
</blockquote><br><br>
来源:https://www.cnblogs.com/wangzheming35/p/14553816.html
頁: [1]
查看完整版本: 详解DNS域名解析系统(域名、域名服务器[根、顶级、授权/权限、本地]、域名解析过程[递归与迭代])