【网络基础】DNS协议详解:从背景到解析过程及`dig`工具的使用

2024-08-26 18:44

本文主要是介绍【网络基础】DNS协议详解:从背景到解析过程及`dig`工具的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • DNS 协议
    • ① 前言 - 背景
    • ② 域名
    • ③ DNS解析过程
    • ④ Linux下用dig工具 分析DNS过程
    • ⑤ 浏览器中输入URL后,会有哪些过程

DNS 协议

DNS(域名系统,Domain Name System)是互联网的一个核心协议,用于将域名转换为 IP 地址,使得用户可以通过易记的域名访问网站,而不需要记住数字形式的 IP 地址。DNS 协议使得用户在浏览网页、发送电子邮件等网络活动时变得更加便利。

① 前言 - 背景

  • 我们知道:TCP/IP使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆。
  • 于是人们发明了名为主机名的东西,本身是字符串,使用hosts文件来描述主机名和IP地址的关系。
    在这里插入图片描述

起初是通过互连网信息中心(SRI-NIC)管理该hosts文件

  • 当一个新计算机要接入网络,或某个计算机IP发生变更,都需要到信息中心申请变更hosts文件。
  • 其他计算机也需要定期更新新版本的hosts文件才能正确上网。

显然这种方法并不便捷,于是就有了DNS(域名系统,Domain Name System)

  • 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系.
  • 如果新计算机接入网络, 将这个信息注册到数据库中;
  • 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.

② 域名

主域名 是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。

域名是互联网上的一种地址命名系统,用于标识和定位网络上的资源,如网站、服务器等。

一个典型的域名由以下几部分组成:

www.example.com
  1. 顶级域名(Top-Level Domain, TLD):“com”:顶级域名位于最右侧,是域名层级结构的最高级别,用于指示域名的类别或国家/地区代码。

  2. 二级域名(Second-Level Domain):“example”:二级域名位于顶级域名之前,是主要的域名标识部分,通常用于表示组织、企业、品牌。

  3. 子域名(Subdomain):“www.”:子域名位于二级域名之前,用于进一步细分域名的层级结构。


③ DNS解析过程

这里简单用文字解释:

  1. 用户请求:用户在浏览器输入网址,发起 DNS 查询。
  2. 本地缓存检查:浏览器和操作系统检查本地缓存是否已有对应 IP 地址。
  3. 递归查询:如果缓存中没有,递归 DNS 服务器开始查询。它首先联系根 DNS 服务器,获取顶级域名服务器的地址。
  4. TLD 服务器查询:递归 DNS 服务器向顶级域名服务器询问,然后获得权威 DNS 服务器的地址。
  5. 权威服务器查询:递归 DNS 服务器向权威 DNS 服务器请求,最终获得域名对应的 IP 地址。
  6. 结果返回:IP 地址被返回给用户的计算机,并缓存以备后续使用。

④ Linux下用dig工具 分析DNS过程

首先通过下面的命令安装dig:

ubuntu:

sudo apt update
sudo apt install dnsutils

centos:

sudo yum install bind-utils

安装完毕就可以通过dig命令进行分析:

root@wqy-virtual-machine:/home# dig csdn.com; <<>> DiG 9.18.28-0ubuntu0.22.04.1-Ubuntu <<>> csdn.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37240
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;csdn.com.			IN	A;; ANSWER SECTION:
csdn.com.		5	IN	A	203.107.45.167;; Query time: 88 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Aug 26 11:35:09 CST 2024
;; MSG SIZE  rcvd: 53

执行结果分析:

查询信息:

  • ; <<>> DiG 9.18.28-0ubuntu0.22.04.1-Ubuntu <<>> csdn.com
    • DiG 是 DNS 查询工具的名称及其版本。
    • 查询的域名是 csdn.com

响应头部

  • ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37240

    • opcode: QUERY:查询操作。
    • status: NOERROR:表示没有错误,查询成功。
    • id: 37240:查询的唯一标识符。
  • ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

    • qr:查询响应标志,表示这是一个响应。
    • rd:递归查询标志,表示客户端要求递归解析。
    • ra:递归可用标志,表示服务器支持递归查询。
    • QUERY: 1:查询的数量。
    • ANSWER: 1:响应的答案数量。
    • AUTHORITY: 0:权威回答的数量(即提供权威解析的 DNS 服务器)。
    • ADDITIONAL: 1:附加信息的数量(如附加的记录)。

OPT PSEUDOSECTION

  • ;; OPT PSEUDOSECTION:
    • EDNS: version: 0, flags:; udp: 65494
      • EDNS: version: 0:扩展 DNS 的版本。
      • flags::扩展 DNS 选项标志(此处为空)。
      • udp: 65494:服务器支持的最大 UDP 数据包大小(以字节为单位)。

查询部分

  • ;; QUESTION SECTION:
    • ;csdn.com. IN A
      • csdn.com.:查询的域名。
      • IN:互联网类。
      • A:查询的记录类型(A 记录,用于解析域名到 IPv4 地址)。

响应部分

  • ;; ANSWER SECTION:
    • csdn.com. 5 IN A 203.107.45.167
      • csdn.com.:查询的域名。
      • 5:记录的生存时间(TTL,单位是秒),表示此记录在 DNS 缓存中有效的时间。
      • IN:互联网类。
      • A:记录类型(A 记录)。
      • 203.107.45.167:域名 csdn.com 对应的 IPv4 地址。

其他信息

  • ;; Query time: 88 msec

    • 查询的响应时间,单位是毫秒。
  • ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)

    • 使用的 DNS 服务器地址和端口号(127.0.0.53 是本地 DNS 解析器,端口号为 53)。
  • ;; WHEN: Mon Aug 26 11:35:09 CST 2024

    • 查询的时间和日期。
  • ;; MSG SIZE rcvd: 53

    • 响应消息的大小,单位是字节。

⑤ 浏览器中输入URL后,会有哪些过程

  1. DNS 解析:浏览器通过 DNS 解析获取 URL 对应的 IP 地址。
  2. 建立连接:使用 IP 地址,浏览器与目标服务器建立 TCP 连接。
  3. 发送请求:浏览器发送 HTTP/HTTPS 请求到服务器。
  4. 服务器响应:服务器处理请求并返回 HTML 文档及其他资源。
  5. 页面渲染:浏览器解析 HTML,加载 CSS、JavaScript,并渲染页面。

过程执行下来,确保了用户输入的 URL 被正确地转换成可视的网页内容。

这篇关于【网络基础】DNS协议详解:从背景到解析过程及`dig`工具的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109375

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.