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

DNS 深度解析:从域名导航到客户端访问全流程

文章目录

  • 前言
  • 一、DNS的本质与核心作用
    • 1.1 DNS的本质
    • 1.2 DNS的作用(过程)
  • 二、正向解析与反向解析
    • 2.1 正向解析
    • 2.2 反向解析
  • 三、域名结构与管理机构
    • 3.1 域名结构
    • 3.2 管理机构
  • 四、DNS查询原理
    • 4.1 递归查询
    • 4.2 迭代查询
  • 五、DNS服务器类型
    • 5.1 主域名服务器
    • 5.2 从域名服务器
    • 5.3 缓存域名服务器
    • 5.4 转发域名服务器
  • 六、域名备案过程
  • 七、DNS服务搭建(基于BIND)
    • 7.1 BIND软件包
    • 7.2 主配置文件(named.conf)
    • 7.3 区域配置文件(named.rfc1912.zones)
    • 7.4 区域数据文件
    • 7.5 服务启动与测试
  • 八、以“访问百度”为例讲解,客户端如何访问服务端
    • 8.1 小结:OSI七层与设备的对应关系
  • 总结


前言

在互联网的世界里,我们每天通过域名访问各种网站,却很少思考背后的“导航系统”是如何运作的。DNS(域名系统)就像一位隐形的向导,默默将好记的域名转换成机器能理解的IP地址,让我们的网络访问变得简单高效。本文将深入解析DNS的本质、作用、解析过程,详解域名备案流程与DNS服务搭建方法,带您揭开这个互联网核心服务的神秘面纱。

一、DNS的本质与核心作用

1.1 DNS的本质

DNS(Domain Name System,域名系统)是互联网的一项核心服务,其本质是一个分布式数据库。这个数据库的核心功能是实现域名与IP地址的相互映射——既可以让用户通过好记的域名(如www.baidu.com)找到对应的IP地址(如180.101.50.242),也能通过IP地址反查对应的域名,从而架起人类友好的域名与机器识别的IP地址之间的桥梁。

1.2 DNS的作用(过程)

DNS的作用可以类比为“互联网的114查号台”,其核心价值是简化用户访问网络的方式。在没有DNS的时代,用户需要记住一串复杂的IP地址(如192.168.1.1)才能访问网站,而DNS让这一过程变得简单:用户输入域名后,DNS自动完成域名到IP的转换,整个过程无需用户干预。

具体来说,DNS的作用过程体现在一次完整的域名解析中:

  • 当用户在浏览器输入“www.baidu.com”时,请求首先发送到本地DNS服务器进行递归查询;
  • 本地DNS服务器若没有缓存记录,会向根服务器、顶级域服务器(.com)、二级域服务器(baidu.com)逐级查询;
  • 最终由baidu.com的权威服务器返回www.baidu.com对应的IP地址,本地DNS服务器将结果缓存并返回给用户,用户设备据此访问目标网站。

二、正向解析与反向解析

2.1 正向解析

正向解析是DNS最常用的功能,指根据域名查找对应的IP地址。其过程如下:

  1. 本地查询:客户端先检查本地缓存和hosts文件,若有记录直接使用;
  2. 递归查询:若本地无记录,客户端向本地DNS服务器发起递归查询(只需等待结果,无需自己操作);
  3. 迭代查询:本地DNS服务器若无缓存,向根服务器发起迭代查询(根服务器返回顶级域服务器地址);
  4. 逐级查询:本地DNS服务器向顶级域服务器(如.com)查询,得到二级域服务器(如baidu.com)地址;
  5. 返回结果:二级域服务器返回目标域名对应的IP地址,本地DNS服务器缓存结果并返回给客户端。

例如:查询“www.mgb.com”时,最终会得到其对应的IP地址(如192.168.10.120)。

2.2 反向解析

反向解析与正向解析相反,指根据IP地址查找对应的域名。其使用场景相对有限,主要用于特殊需求:

  • 反垃圾邮件验证(确认发送邮件的IP对应的域名是否合法);
  • 网络安全审计(追踪IP地址对应的主机身份)。

反向解析的过程类似正向解析,但查询对象是IP地址。例如:查询IP“192.168.10.120”时,会得到对应的域名(如www.mgb.com)。

三、域名结构与管理机构

3.1 域名结构

域名采用层次化结构,由多个部分组成,以“.”分隔,最完整的形式为FQDN(全限定域名),格式为:主机名.子域.二级域.顶级域.根域(根域“.”通常省略)。

  • 根域:最顶层,以“.”表示;
  • 顶级域:如.com(工商企业)、.cn(中国国家域名)、.edu(教育机构);
  • 二级域:顶级域下的子域,如.com.cn(中国商业组织)、.edu.cn(中国教育机构);
  • 子域/主机名:二级域下的具体主机,如www.baidu.com中的“www”。

例如:“www.sina.com.cn”的结构为:主机名(www).子域(sina).二级域(com).顶级域(cn)。

3.2 管理机构

  • IANA(互联网数字分配机构):全球域名系统的最高权威机构,主管根服务器、国际化域名等资源;
  • CNNIC(中国互联网络信息中心):管理中国国家顶级域“.cn”及相关资源;
  • 域名注册服务商:如新浪网(xinnet.com)、万网(net.cn)等,提供域名注册、购买服务。

四、DNS查询原理

4.1 递归查询

递归查询是客户端与本地DNS服务器之间的查询方式。客户端发送请求后,只需等待最终结果(成功或失败),中间的查询过程由本地DNS服务器全程代理。

例如:用户查询“www.google.com”时,本地DNS服务器会自行向各级服务器查询,最终将IP地址返回给用户。

4.2 迭代查询

迭代查询是本地DNS服务器与其他各级DNS服务器之间的查询方式。上级服务器不会直接返回结果,而是返回下一个应查询的服务器地址,由本地DNS服务器继续查询。

例如:本地DNS服务器向根服务器查询时,根服务器会返回“.com”顶级域服务器的地址,而非直接返回“www.google.com”的IP。

五、DNS服务器类型

5.1 主域名服务器

  • 作用:维护特定区域的所有域名信息,是该区域的权威信息源;
  • 特点:数据可修改,需自行建立区域数据文件;
  • 配置标识type master;

5.2 从域名服务器

  • 作用:作为主服务器的备份,在主服务器故障或负载过重时提供解析服务;
  • 特点:数据来自主服务器,无法自行修改,需指定主服务器地址以同步数据;
  • 配置标识type slave;

5.3 缓存域名服务器

  • 作用:仅缓存查询结果,提高解析速度和效率;
  • 特点:无自己的域名数据库,需指定根域或其他DNS服务器作为解析来源;
  • 适用场景:减轻其他服务器负载,加速频繁访问的域名解析。

5.4 转发域名服务器

  • 作用:处理所有非本地域名的查询,若本地无缓存则转发至指定服务器;
  • 特点:依次转发请求直到得到结果,或返回失败;
  • 配置标识:需设置forwarders { 服务器地址; };

六、域名备案过程

域名备案是针对使用国内服务器的域名的强制流程(使用境外服务器可无需备案),目的是规范互联网信息服务。流程如下:

  1. 备案前准备
    • 在域名商平台进行注册账号并实名认证;
    • 准备好有公网IP的服务器(可直接购买云服务器);
  2. 准备资料
    • 个人备案:身份证正反面、手机号、邮箱、备案照片(幕布照);
    • 企业备案:营业执照、法人身份证、经办人身份证、公章;
  3. 通过服务商提交:通过域名注册商(如阿里云、腾讯云)的备案系统填写信息并上传资料;
  4. 初审:服务商审核资料完整性,若有问题需补充修改;
  5. 工信部审核:初审通过后提交至工信部,通常需20个工作日左右;
  6. 备案成功:审核通过后会收到备案号,需在网站底部悬挂备案号并链接至工信部备案页面。
  7. 公安联网备案:在开通网站起30日内,需要办理公安联网备案。

七、DNS服务搭建(基于BIND)

7.1 BIND软件包

BIND是最常用的DNS服务软件,主要包包括:

  • bind:核心服务程序;
  • bind-utils:测试工具(如nslookup、dig);
  • bind-libs:依赖库文件;
  • bind-chroot:安全增强工具(将服务锁定在/var/named/chroot/目录)。

安装命令:yum install bind bind-chroot -y

7.2 主配置文件(named.conf)

路径:/etc/named.conf,核心配置如下:

options {listen-on port 53 { 192.168.10.120; }; // 监听地址(可用any表示所有)directory "/var/named"; // 区域数据文件存放路径allow-query { 192.168.10.0/24; }; // 允许查询的网段
};
zone "." IN { // 根域配置type hint;file "named.ca"; // 根服务器信息文件
};
include "/etc/named.rfc1912.zones"; // 包含区域配置文件

7.3 区域配置文件(named.rfc1912.zones)

路径:/etc/named.rfc1912.zones,用于定义负责的区域。例如正向区域配置:

zone "mgb.com" IN {type master;file "mgb.com.zone";allow-update { none; };
};

在这里插入图片描述

7.4 区域数据文件

路径:/var/named/,存储域名与IP的映射记录。以正向区域文件mgb.com.zone为例:

$TTL 1D // 记录生存周期
@ IN SOA mgb.com. admin.benet.com. ( // SOA记录(区域权威信息)0 ; serial // 更新序列号1D ; refresh // 刷新间隔1H ; retry // 重试间隔1W ; expire // 失效时间3H ) ; minimum // 无效记录生存周期NS mgb.com. // DNS服务器记录A 192.168.10.120 // 服务器IP
IN MX 10 mail.mgb.com // 邮件交换记录(优先级10)
www IN A 192.168.10.120 // www.mgb.com对应的IP
mail IN A 192.168.10.124 // mail.mgb.com对应的IP
ftp IN CNAME www // ftp是www的别名
* IN A 192.168.10.100 // 泛域名解析(所有子域指向该IP)

在这里插入图片描述

7.5 服务启动与测试

  1. 启动服务systemctl start named
  2. 关闭防火墙systemctl stop firewalld; setenforce 0
  3. 客户端配置:在/etc/resolv.conf中添加nameserver 192.168.10.120
  4. 测试:使用nslookup www.mgb.comhost mail.mgb.com验证解析结果。
    在这里插入图片描述

八、以“访问百度”为例讲解,客户端如何访问服务端

在此前的几篇文章总已经介绍了OSI七层模型(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)的层级功能、对应设备及原理,为了更好地理解客户端(如你的电脑)如何访问服务器,以客户端访问百度为例,按“数据封装→传输→解封装”的完整流程拆解。以下是具体步骤:
访问百度网站的流程涉及OSI七层模型各层的操作以及数据帧的封装与解封,具体过程如下:

  1. 应用层
    • 用户在浏览器中输入“www.baidu.com”,浏览器首先检查自身缓存,若未找到对应域名的IP地址,则查找操作系统缓存(hosts文件)。若仍未找到,浏览器会向DNS服务器发送请求,DNS协议将“www.baidu.com”解析为百度服务器的IP地址,如202.108.22.5。
    • 浏览器生成HTTP请求报文,包含请求方法(如GET)、请求的URL(http://www.baidu.com/)和HTTP版本等信息,该报文即为应用层的数据。
  2. 传输层
    • 由于HTTP协议通常基于TCP协议传输,传输层将应用层的HTTP请求报文分段,添加TCP头部。TCP头部包含源端口和目的端口,服务器的HTTP服务默认使用80端口,客户端则由系统随机选择一个端口,如5000。同时,TCP头部还包含序列号、确认号、窗口大小等字段,用于保证数据的可靠传输,封装后的结果称为TCP报文段。
  3. 网络层
    • 网络层将TCP报文段作为数据部分,添加IP头部,形成IP数据包。IP头部包含源IP地址(客户端IP)和目的IP地址(百度服务器IP),以及协议号(标识上层协议为TCP)、生存时间(TTL)等字段。
    • 若源IP和目的IP不在同一网段,主机生成一个具有目的IP地址(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址(如FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,以获取网关的MAC地址。网关路由器收到后回复ARP回答,主机接收后抽取网关路由器的MAC地址,用于后续数据帧封装。
    • 网络层根据路由表确定数据传输路径,若IP数据包大小超过网络的最大传输单元(MTU),则可能对其进行分片处理。
  4. 数据链路层
    • 数据链路层将IP数据包封装成数据帧,添加以太网帧头和帧尾。帧头包含源MAC地址(客户端MAC)和目的MAC地址(网关MAC或下一跳设备MAC),以及上层协议类型(标识为IP协议)。帧尾包含循环冗余校验(CRC)码,用于数据完整性校验。
    • 数据链路层将封装好的数据帧发送到物理层,同时交换机根据数据帧中的MAC地址学习并更新其MAC地址表,以便后续数据转发。
  5. 物理层
    • 物理层将数据帧转换为比特流,通过物理介质(如网线、光纤)发送出去。比特流在传输过程中可能会受到噪声等干扰,物理层会进行信号的放大、整形等处理。
  6. 数据在网络中的传输
    • 比特流到达路由器后,路由器在物理层接收并转换为数据帧,数据链路层根据帧头中的目的MAC地址判断是否为自己,若是则进行解封装,移除帧头帧尾,将IP数据包交给网络层。
    • 网络层检查IP数据包的目的IP地址,若不是自己的IP地址,则根据路由表查找下一跳地址,并重新封装数据链路层帧头,更新源MAC地址为路由器出接口MAC地址,目的MAC地址为下一跳设备的MAC地址,然后将数据帧交给物理层继续传输。
    • 数据帧经过多个路由器的转发,最终到达百度服务器所在网络。
  7. 百度服务器端的解封装过程
    • 物理层接收到比特流,将其还原为数据帧,交给数据链路层。
    • 数据链路层检查帧头中的目的MAC地址是否为服务器MAC地址,若是则通过CRC校验检查数据完整性,若完整则移除帧头帧尾,将IP数据包交给网络层。
    • 网络层检查IP数据包的目的IP地址是否为自己,若是则检查头部校验和,确认无误后根据协议号将TCP报文段交给传输层。
    • 传输层检查TCP头部的目的端口号,若为80,则移除TCP头部,将HTTP请求报文交给应用层。
    • 应用层解析HTTP请求报文,处理请求,如查找百度首页相关数据。
  8. 百度服务器响应过程
    • 应用层生成HTTP响应报文,包含百度首页的HTML数据等,然后按照上述封装过程,从应用层开始,依次经过传输层、网络层、数据链路层和物理层,将响应数据封装并发送回客户端。
  9. 客户端接收响应并显示
    • 客户端收到响应数据后,按照服务器端解封装的逆过程,从物理层开始,依次经过数据链路层、网络层、传输层和应用层,逐层解封装,最终得到HTTP响应报文。
    • 浏览器解析HTML数据,将百度首页显示给用户。
  10. 连接释放
    • 浏览器接受完毕后,发送TCP断开报文,与百度服务器进行四次挥手,释放TCP连接,完成此次访问过程。

8.1 小结:OSI七层与设备的对应关系

OSI层级核心功能涉及协议/技术关键设备角色(以访问百度为例)
7.应用层应用程序通信规则HTTP、DNS浏览器、服务器应用发起请求、解析域名、处理响应数据
6.表示层数据格式转换(如编码)ASCII、UTF-8操作系统转换HTML数据编码(如UTF-8)便于浏览器解析
5.会话层建立/维护/终止会话SSL(部分功能)操作系统管理浏览器与百度服务器的会话(如保持连接状态)
4.传输层端到端可靠传输TCP、UDP操作系统内核TCP三次握手建立连接,确保数据不丢失、有序
3.网络层跨网络路由(IP寻址)IP、ARP、路由协议路由器通过IP和路由表转发数据到百度服务器所在网络
2.数据链路层局域网内帧传输(MAC寻址)Ethernet、ARP交换机、网卡用MAC地址在局域网内转发帧,交换机查MAC表转发
1.物理层物理信号传输电信号、无线电信号网卡、交换机、无线AP将数据转换为物理信号,通过网线/WiFi传输

简言之,“访问百度”的本质是:数据在OSI七层间“自上而下封装→跨设备传输→自下而上解封装”的循环,每层通过专属协议和设备协作,最终实现客户端与服务端的通信

总结

DNS作为互联网的“导航系统”,其本质是通过分布式数据库实现域名与IP的映射,让网络访问变得简单高效。正向解析让我们通过域名找到网站,反向解析则在特定场景中保障网络安全;域名备案是国内网络服务的必要流程,而基于BIND的DNS服务搭建则能满足自定义解析需求,无论是主从架构还是分离解析,都能灵活应对不同场景。

理解DNS的工作原理与搭建方法,不仅能帮助我们更好地排查网络问题,还能为构建稳定、高效的网络环境奠定基础。随着IPv6的发展,DNS根服务器格局可能迎来变化,这也让DNS的未来充满更多可能性。

最后,希望大家多多实践,夯实基础,聚沙成塔,与君共勉之!

http://www.dtcms.com/a/341314.html

相关文章:

  • AI 与加密监管思维的转变:从美联储谈到开发者视角
  • Cobbler 自动化部署服务介绍与部署指南
  • SpringBoot集成WebService
  • BioScientist Agent:用于药物重定位和作用机制解析的知识图谱增强型 LLM 生物医学代理技术报告
  • docker CI操作演示分享(第四期)
  • Fastdata极数:中国外卖行业趋势报告2025
  • 网络流量分析——基础知识
  • [特殊字符] 从文件到视频:日常数据修复全攻略
  • 奇怪的“bug”--数据库的“隐式转换”行为
  • Kafka如何保证消费确认与顺序消费?
  • Torch -- 卷积学习day4 -- 完整项目流程
  • python numpy.random的基础教程(附opencv 图片转数组、数组转图片)
  • 3D max制作蝴蝶结详细步骤(新手可跟)♥️
  • 制造业原料仓储混乱?WMS 系统实现物料精准溯源,生产更顺畅_
  • 深度剖析Lua Table的运作方式
  • 透传 Attributes(详细解析)1
  • 服务器内存使用buff/cache的原理
  • Linux-----《Linux系统管理速通:界面切换、远程连接、目录权限与用户管理一网打尽》
  • 以AI技术为核心的变电设备声纹监测装置及方案特色解析
  • AI时代下阿里云基础设施的稳定性架构揭秘
  • 初试Docker Desktop工具
  • 服务器硬件电路设计之 SPI 问答(二):SPI 与 I2C 的特性博弈及多从机设计之道
  • Java ReentrantLock 核心用法
  • 算法提升树形数据结构-(线段树)
  • RAG拓展、变体、增强版(二)
  • Django管理后台结合剪映实现课件视频生成应用
  • SpringBoot+Vue打造动漫活动预约系统----后端
  • BM25 系列检索算法
  • Python Day32 JavaScript 数组与对象核心知识点整理
  • 用 Go 库 urfave/cli 轻松构建命令行程序