首页 > 编程知识 正文

dns查询过程,域名系统的解析过程

时间:2023-05-04 02:35:44 阅读:136051 作者:119

前言

本文来自《深入分析Java Web技术内幕》这本书。 因为本人对DNS并不熟悉,这本书关于DNS的部分也已经有详细的叙述,所以我把书里的内容原封不动地拿来了。 老规矩,不拷贝,不贴,把所有内容都摸起来,一边打一边学习,理解。

DNS域名解析

我知道互联网通过URL公开和请求资源,但是URL中的域名必须解析为IP地址才能与远程主机建立连接。 将域名解析为IP地址的方法是DNS解析的工作范畴。

我们平时在网上感觉不到DNS分析的存在,但是弄错DNS分析的话,有可能会引起非常严重的网络灾害,这么说一点也不过分。 目前全世界整个互联网都有几个DNS根域名服务器,其中一个根服务器坏了,后果非常严重。

DNS域名解析过程

如果在浏览器中输入www.abc.com,DNS分析将包含大约10个步骤。 这个过程大致可以用一张图来表示。

粗略地说,前两个步骤是在本地执行的,后八个步骤包括真正的域名服务器

1、浏览器检查缓存中是否存在与该域名对应的已解析IP地址,如果在缓存中,该解析过程结束。 浏览器的缓存域名也有限制。 不仅浏览器的缓存大小有限制,缓存的时间也有限制。 通常几分钟到几个小时。 可以在TTL属性中设置缓存域名的时间限制。 这个缓存时间太长或太短都不好。 如果域名解析后的IP发生更改,客户端上缓存的域名将无法解析为更改后的IP地址,域名将无法成功解析,在此期间某些用户将无法访问站点。 如果设置时间太短,用户每次访问网站时都会重新分析域名。

2、如果用户浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有与此域名对应的DNS解析结果。 事实上,操作系统还提供了域名解析过程。 在Windows上可以在c :windowssystem32driversetchosts文件中设置,在Linux上可以在/etc/hosts文件中设置。 用户可以将任何域名解析为其有权访问的任何域名。例如,在测试时将域名解析为测试服务器,可以在不更改代码的情况下测试各个服务器代码的业务逻辑是否正确。 由于存在这些本地DNS解析规则,黑客可能会通过修改用户的域名将特定域名解析为指定的IP地址,从而导致这些域名被劫持。

3、前两个进程无法解决时,使用我们网络结构的“DNS服务器地址”。 操作系统将此域名发送到此LDNS,即本地域名服务器。 此DNS通常提供给用户本地互联网接入的DNS解析服务。 例如,如果用户在学校访问互联网,则用户的DNS服务器一定在学校。 如果用户在小区中接入互联网,且用户的DNS是重新提供互联网接入的APP提供商,即电信或电信,或通常为SPA,则该DNS通常也位于用户所在的城市的某个地方,且不是很远在Windows环境中,可以在命令行中输入ipconfig,以便在Linux环境中查询在cat /etc/resolv.conf上配置的DNS服务器。 这个专用的名称解析服务性能很好,通常会缓存域名解析结果。 当然,缓存时间受域名过期时间的控制。 大约80%的域名解析到此结束,所以LDNS主要负责域名的解析。

4、如果LDNS仍未命中,则直接请求根服务器域名服务器解析

5 .根域名服务器返回到您查询的主域名服务器(gTLD Server )地址。 GLD是.com、 cn、 org等国际顶级域名服务器,全球只有13台左右

6、本地域名服务器LDNS进一步向返回的gTLD服务器发送请求

7 .接收请求的gTLD服务器搜索并返回与此域名对应的Name Server域名服务器地址。 此Name Server通常是用户注册的域名服务器。 例如,用户在某个域名服务提供商处申请的域名将由该域名提供商的服务器解析

8、Name Server域名服务器查询保存的域名与IP的映射关系表,通常基于域名获取目标IP地址,与TTL值一起返回给DNS Server域名服务器

9、返回与域名相对应的IP和TTL值,LDNS缓存域名与IP的对应关系,并且缓存时间由TTL值控制

10、将解析结果返回用户,用户基于TTL值缓存到本地系统缓存中,域名解析过程结束

在实际的DNS分析过程中,可能不仅仅是这10个步骤。 例如,Name Server可能有多个级别,或者可能有用于负载平衡控制的GTM,这可能会影响域名分析过程。

清除缓存的域名

已知在解析DNS域名后,将缓存解析结果。 其中主要在两个地方缓存。

1、localDNS服务器

2、用户的本地计算机

虽然这两种缓存都由TTL值和本机缓存大小控制,但最大缓存时间为TTL值,而本地DNS服务器缓存时间基本上由TTL控制,难以手动干预,但我们的本机缓存

1、Windows环境

下可以再命令行执行ipconfig /flushdns命令来刷新缓存,如图

2、Linux环境下可以通过/etc/init.d/nscd restart来清除缓存,因为我家里电脑装的虚拟机比较卡,就不截图了

重启依然是解决很多问题的第一选择。

在Java应用中JVM也会缓存DNS的解析结果,这个缓存是在InetAddress类中完成的,而且这个缓存时间还比较特殊,它有两种缓存策略:

1、正确解析结果缓存

2、失败解析结果缓存

这两个缓存时间有两个配置项控制,配置项在%JAVA_HOME%libsecurityjava.security文件中配置的,这两个配置项分别是networkaddress.cache.ttl和networkaddress.cache.negative.ttl,它们的默认值分别是-1(永不失效)和10(缓存10秒),直接修改这两个值就可以了,也可以通过在Java启动参数中增加-Dsun.net.inetaddr.ttl=xxx来修改默认值,也可以通过InetAddress类动态修改。

几种域名解析方式

域名解析记录主要分为A记录、MX记录、CNAME记录、NS记录和TXT记录:

1、A记录

A代表Address,用来指定域名对应的IP地址,如将item.taobao.com指定到115.238.23.xxx,将switch.taobao.com指定到121.14.24.xxx。A记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址

2、MX记录

Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server,如taobao.com域名的A记录IP地址是115.238.25.xxx,如果将MX记录设置为115.238.25.xxx,即xxx@taobao.com的邮件路由,DNS会将邮件发送到115.238.25.xxx所在的服务器,而正常通过Web请求的话仍然解析到A记录的IP地址

3、CNAME记录

Canonical Name,即别名解析。所谓别名解析就是可以为一个域名设置一个或者多个别名,如将aaa.com解析到bbb.net、将ccc.com也解析到bbb.net,其中bbb.net分别是aaa.com和ccc.com的别名

4、NS记录

为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器取解析

5、TXT记录

为某个主机名或域名设置说明,如可以为ddd.net设置TXT记录为"这是XXX的博客"这样的说明

出处:五月的仓颉 https://www.cnblogs.com/xrq730/p/4931418.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。