面试题24解析-详谈DNS域名解析过程

简介: 题目:描述一下DNS域名解析的过程?

前面的文章我们已经说过了,网站一般都是用B/S架构,统一使用应用层协议HTTP来进行数据交互,并且HTTP是无状态的短连接。每一个请求后台都有一个业务逻辑相对应。下面,咱们来看一下B/S网络架构的设计,如图所示:


image.png


我们可以从图中发现,首先,DNS把域名解析成对应的ip地址,然后再根据ip地址找到对应的服务器并发送GET请求,最终,服务器将相应的资源返回到客服端。接下来,我们来分析一下DNS到底是怎么进行解析的(红框标注的) ?



1域名解析的那几种方式?


A记录:用来指定域名对应的IP地址,A纪录可以将多个域名解析到一个IP地址,但不能将一个域名解析到多个IP地址。


MX记录:即Mail Exchange,它可以将域名下的邮箱服务器指向自己的Mail Server。


CNAME记录:即Canonical Name(别名解析),可以为一个域名设置一个或者多个别名。


NS记录:为某个域名指定DNS解析服务器,即该域名用指定的DNS服务器去解析IP地址。


TXT记录:为域名设置说明。


2怎么用工具查看域名解析过程?


在windows和linux环境,都可以用nslookup工具来查看解析结果,如图所示:

image.png

在linux系统,也可以使用dig命令来查询DNS的解析过程,如图所示:


image.png


image.png

从上面我们可以清楚的看到整个域名是如何发起和解析的。从根域名(.)到gtld server (.com),再到Name Server(baidu.com.)的整个过程,我们可以发现baidu的dns备份服务器有好几个。


3怎么清除缓存的域名?


在windows环境,我们可以用ipconfig工具来处理,命令如下:

ipconfig  /flushdns

结果如图所示:

image.png


在linux环境,我们可以用nscd 工具来处理,命令 如下:

sudo apt-get install nscd
sudo /etc/init.d/nscd restart

结果如图所示:


image.png


4JVM中DNS缓存设置


一般像高级语言的虚拟机都会缓存DNS解析结果,因为这样可以节约DNS解析时间,同样JVM也不例外;JVM的DNS缓存一般是在InetAddress类中完成的,它有两种缓存结果,一种是正确解析结果的缓存,另一种是失败解析结果的缓存。由两个配置项来控制,配置项是在%JAVA_HOME%\lib\security\java.security文件中配置的。两个配置项分布是networkaddress.cache.ttl和networkaddress.cache.negtive.ttl,其默认值分别是-1(永不失效)和10(保留10秒钟)。


怎么进行修改呢?

  1. 直接修改java.secury文件的默认值。
  2. 在JAVA启动时加启动参数 -Dsun.NET.inetaddress.ttl=XXX来修改默认值。


5DNS域名解析详细过程


主要请求过程实例图如下所示:


image.png


下面,咱们结合图来详细聊聊它的请求流程:


首先,浏览器会检查缓存中有没有这个域名所对应的ip地址;如果有,整个解析过程就结束了;如果没有,则会查找操作系统缓存中是否有这个域名对应的DNS解析结果。操作系统也可以通过改hosts文件来改变DNS解析过程。


操作系统会把域名发送到你系统设置的LDNS(本地区域服务器)进行解析;如果没有命中,直接向Root Server域名服务器发送请求,根域名服务器直接返回本地域名服务器一个所查询域的主域名服务器(gTLD),如  .com/.cn/.org等;


本地域名服务器再向上一步返回的gTLD服务器发送请求,gTLD服务器查找并返回该域名对应的Name Server域名服务器地址,该Name Server通常是你注册的域名服务器;Name Server会查找域名和IP的映射表,并返回对应的IP和TTL;


Local DNS Server会缓存这个域名和IP的映射关系,缓存时间由TTL决定,并把解析结果返回给用户,用户的本地域名缓存时间也由TTL决定。


6造成DNS域传输漏洞原因?


DNS区域传送:指一台备用服务器使用来自主服务器的数据刷新自己的域数据库。


一般只有在真的需要备用域名DNS服务器的安全网络环境中才有必要使用DNS区域传送,但是许多DNS服务器却被错误地配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,造成这个漏洞的主要原因是:允许了不受信任的网络环境用户执行DNS区域传送(zone transfer)操作。




相关文章
|
域名解析 存储 网络协议
域名解析的终极指南:从基础到进阶,彻底搞懂 DNS 记录
域名解析是网站运行的基础,正确配置DNS记录至关重要。本文从基础到进阶全面解析DNS知识,涵盖A、AAAA、CNAME、MX、TXT、CAA等常见记录类型及其应用场景。通过学习,你将了解DNS的工作原理,掌握如何优化域名配置,确保网站与邮件服务高效运行。无论搭建个人博客还是企业官网,本文都能助你轻松搞定域名解析!
3665 0
|
域名解析 存储 缓存
深入学习 DNS 域名解析
在平时工作中相信大家都离不开 DNS 解析,因为 DNS 解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。
1914 31
|
域名解析 网络协议 网络安全
SSL证书验证全攻略:DNS/HTTP/手动解析怎么选?
SSL证书在网络安全中至关重要,1Panel提供三种验证方式:DNS验证、HTTP验证和手动解析。DNS验证便捷,适合CDN网站;HTTP验证快速,需服务器在线;手动解析灵活,但操作复杂。根据需求选择合适确认方式,定期检查证书状态。
1758 2
|
网络协议 安全 Linux
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
5836 0
|
负载均衡 网络协议 容灾
【飞天技术沙龙】云解析 DNS 上海站《多云+IDC 融合场景下的 DNS 最佳实践》圆满落幕
【飞天技术沙龙】云解析 DNS 上海站《多云+IDC 融合场景下的 DNS 最佳实践》圆满落幕
468 0
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
558 4
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
2849 2

相关产品

  • 云解析DNS
  • 推荐镜像

    更多
  • DNS