当前位置: 首页 > news >正文

谈谈你对域名缓存的了解?

为了提高 DNS 查询效率,并减轻服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如:每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。
不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。

域名解析过程

1.域名系统

img

img

2.域名服务器

img

  1. 在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

  4. 4如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

  5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,

  • 如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。

  • 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。

  • 不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

相关文章:

  • 进程间通信方式
  • 什么是递归查询,迭代查询?
  • Java中的4种代码块
  • 什么是沾包?如何处理?
  • 继续測试,一如既往的稳定
  • 【< TCP专题之三次握手四次挥手>】
  • SQL 设置空值(NULL)
  • 【<TCP专题>】
  • 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化...
  • 【<TCP 流量控制和拥塞控制专题>】
  • bluetooth-蓝牙事件监听
  • Service详解
  • 【<HTTP专题>】
  • Thinkpad机器BIOS下清除安全芯片和指纹数据的方法
  • 【<常见加密算法及实现>】
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 「面试题」如何实现一个圣杯布局?
  • docker容器内的网络抓包
  • HashMap ConcurrentHashMap
  • java中具有继承关系的类及其对象初始化顺序
  • mysql常用命令汇总
  • TCP拥塞控制
  • ucore操作系统实验笔记 - 重新理解中断
  • vue-cli3搭建项目
  • webgl (原生)基础入门指南【一】
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 解决iview多表头动态更改列元素发生的错误
  • 聊聊hikari连接池的leakDetectionThreshold
  • 七牛云假注销小指南
  • 深入浅出Node.js
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 译有关态射的一切
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • scrapy中间件源码分析及常用中间件大全
  • Spring Batch JSON 支持
  • ​如何在iOS手机上查看应用日志
  • ​业务双活的数据切换思路设计(下)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)基于IDEA的JAVA基础10
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net下简单快捷的数值高低位切换
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @Validated和@Valid校验参数区别
  • [ Linux ] Linux信号概述 信号的产生
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)