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

简述DNS域名服务器

DNS简述

在互联网中,识别一个主机通常有两种方式——主机名和IP地址。从人类角度来看,人类肯定更喜欢这些便于记忆的主机名标识方式,而对于路由器来说,路由器则更喜欢定长的,有结构层次的IP地址。所以DNS域名服务器就充当了中间的桥梁,作为从主机名到IP地址转换的目录服务。

DNS是一个由分层的DNS服务器实现的分布式数据库,是一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行在BIND的UNIX机器,DNS协议通常运行在UDP上,使用53号端口。 

DNS通常是搭配着其他应用层协议所使用的。比如当你访问一个百度网站:www.baidu.com/index.html,你的主机上运行着DNS应用的客户端,浏览器从URL中提取出主机名,并且提交到DNS应用的客户端,DNS客户端会向DNS服务器发起一个带有主机名的请求,然后DNS服务器返回一个带有位于该主机名的IP地址,一旦浏览器接受到这份响应报文,它就向该IP地址的80号端口的HTTP服务器进程发起一个TCP连接请求。

解析器是 客户端或网络设备中负责发起 DNS 查询并处理响应的软件组件,通常集成在操作系统、应用程序或网络栈中,通常流程:

应用调用解析器—解析器发送查询报文—域名服务器返回响应报文

解析器是客户端发起 DNS 操作的 “执行者”,而DNS 服务器是提供解析服务的 “响应者”

DNS有一个核心操作:负载均衡与流量调度。其通过将一个域名对应多个 IP 地址,并采用一定的算法(如轮询、加权轮询、基于地理位置等),DNS 可以将用户的访问请求分配到不同的服务器上,实现负载均衡,提高系统的整体性能和可靠性。此外,DNS 还可以根据网络流量状况和服务器负载情况,动态地调整流量分配,优化网络资源的利用。

DNS工作机理概述

分布式、层次数据库

DNS是由分布于全球大量的DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。

DNS是一个在因特网上实现分布式数据库的典范。如果采用单一的DNS服务器,则会受到单点故障,通信容量,维护,传输距离等等一系列问题,所以它采用的是分布式,层次数据库。所以说没有一台DNS服务器是有所有的主机映射的,这是分布在所有DNS服务器上面的。

大致来说,有三种类型的DNS服务器:根DNS服务器,顶级域DNS服务器(TLD)和权威DNS服务器。

假设客户访问的是www.baidu.com这一个域名,首先客户先会与根DNS服务器联系,其返回提供顶级域名com服务器的IP地址,然后客户又与这个提供顶级域名com服务器联系,其又返回提供baidu.com的权威DNS服务器的IP地址,然后客户与权威DNS服务器IP地址相联系,为客户返回www.baidu.com其IP地址。

根、TLD和权威服务器都处在该DNS服务器的层次结构中,还有一类重要的DNS服务器称为本地DNS服务器。严格来说一个本地DNS服务器是不属于这个层次结构范畴的,但是它对这个体系的影响是至关重要的。每个ISP都有一台本地DNS服务器,它相当于起到了一个代理作用,把客户请求转发到DNS服务器的层次结构中。

递归查询和迭代查询是DNS中两种不同的查询方式。递归查询由客户端发起,以本地DNS服务器为中心,向外递归查询,直到获取到IP地址或者无法解析为止。整个过程客户端只需要等待结果,无需参与中间查询。而迭代查询以DNS客户端为中心,向本地DNS到根服务器依次查询,如此重复客户端自己完成整个解析过程。

DNS缓存

为了改善时延性能以及减少在因特网上到处传输DNS报文数量,DNS广泛使用了缓存技术。因为有了缓存,本地DNS服务器就可以立即返回IP地址,而无需查询其他DNS服务器。事实上,因为缓存,除了少数DNS查询外,根服务器都被绕过了。

DNS记录和报文

DNS记录

DNS 记录(RR)是存储在 DNS 服务器中的数据单元,用于描述域名与 IP 地址或其他网络资源之间的映射关系。每种记录类型对应不同的功能。

根据 DNS 协议(RFC 1035),完整的资源记录格式包括以下六元组

(Name, Type, Class, TTL, RDLENGTH, RDATA)  
  • Name:域名。
  • Type:记录类型。
  • Class:协议类别。
  • TTL:缓存有效期(秒)。
  • RDLENGTH:记录值(RDATA)的字节长度。
  • RDATA:记录的具体值(如 IP 地址、别名、邮件服务器优先级等)。

在实际应用和通俗描述中,Class 通常默认是 IN,而 RDLENGTH 是技术细节(由 RDATA 自动推导),因此常被省略为:(Name, Type, Value, TTL)。

这种格式直观表达了 “为谁(域名)配置什么类型(记录类型)对应什么值(记录值)缓存多久(TTL)” 的逻辑。

DNS报文

DNS 报文是 DNS 客户端与服务器、服务器与服务器之间通信时使用的数据封装格式,分为查询报文(客户端请求)和响应报文(服务器回复),格式统一,由 头部(Header) 和 四个可选部分(问题、回答、权威、附加)组成。

头部构成:ID,标识符,问题数,回答RR数,权威RR数,附加RR数,总计12个字节。

每个查询报文必须包含 问题部分,描述客户端想查询的内容。回答 、权威 、 附加部分这三个部分仅在 响应报文 中存在,格式为 资源记录(RR)列表。

以下是一个简单的例子:

查询报文(请求 www.baidu.com 的 A 记录):

Header: ID=0x5678, QR=0, OPCODE=0, RD=1(要求递归),其余标志默认
Question: QNAME=www.baidu.com, QTYPE=A(1), QCLASS=IN(1)

响应报文(假设返回 IP 14.215.177.39):

Header: QR=1(响应), RA=1(支持递归), RCODE=0(无错), ANCOUNT=1
Answer RR: NAME=www.baidu.com, TYPE=A, TTL=3600, RDATA=14.215.177.39

DNS注册 

当你注册一个域名(如 example.com)并配置 DNS 记录时,这些记录首先被添加到该域名的 权威 DNS 服务器 中。

权威服务器是该域名记录的官方存储处,拥有最终决定权。例如,你在云平台(如阿里云、腾讯云)管理域名解析时,实际上就是在修改该域名的权威服务器记录。

根服务器、顶级域名服务器它们不存储具体域名的解析记录(如 example.com 的 A 记录),而是存储 “如何找到下一级服务器” 的信息(如 example.com 的权威服务器地址)。最终通过一层层递归迭代查询,获取IP记录并缓存。

🌋🌋🌋.

相关文章:

  • 前端面试每日三题 - Day 32
  • Browserless 快速上手
  • 全栈工程师实战手册:LuatOS日志系统开发指南!
  • C 语言_可变参数宏详解
  • temu自养号采购如何解决多账号防关联问题
  • (done) 补充:xv6 的一个用户程序 init 是怎么启动的 ?它如何启动第一个 bash ?
  • ARM64内核内存空间布局
  • The 2024 Sichuan Provincial Collegiate Programming Contest部分题解(L,H,E,B,I)
  • Ethereum Pectra 的升级
  • TWASandGWAS中GBS filtering and GWAS(1)
  • 《Flutter社交应用暗黑奥秘:模式适配与色彩的艺术》
  • 使用PhpStudy搭建Web测试服务器
  • 每日一题洛谷P8662 [蓝桥杯 2018 省 AB] 全球变暖c++
  • Ubuntu20.04 搭建Kubernetes 1.28版本集群
  • WSL 安装 Debian 12 后,Linux 如何安装 redis ?
  • C#WPF里不能出现滚动条的原因
  • SysAid On-Prem XML注入漏洞复现(CVE-2025-2776)
  • 栈和队列复习(C语言版)
  • Java笔记4
  • Go语言即时通讯系统 开发日志day1
  • 学者的“好运气”:读本尼迪克特·安德森《椰壳碗外的人生》
  • 回望乡土:对媒介化社会的反思
  • 线下哪些商家支持无理由退货?查询方法公布
  • 高适配算力、行业大模型与智能体平台重塑工业城市
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点