通过Wireshark抓包分析谈谈DNS域名解析的那些事儿

news2024/11/19 3:38:34

 

原创/朱季谦

本文主要想通过动手实际分析一下是如何通过DNS服务器来解析域名获取对应IP地址的,毕竟,纸上得来终觉浅,绝知此事要躬行。

一、域名与IP地址

当在浏览器上敲下“www.baidu.com”时,一键回车,很快,浏览器上就会刷新出熟悉的百度搜索页面。以前刚接触网络时,总以为这个过程是通过域名www.baidu.com来访问远程服务器,其实不然,本质上,还是通过IP去远程访问服务器获取资源。

这时,聪明的小伙伴就会出现一个疑问,为啥不直接通过域名去寻找到相应的服务器主机呢?

其实,若要实现通过域名的方式去寻找服务器主机,也不是不行,但没这个必要。

先来对比一下域名方式与IP地址方式两者的最关键差异在哪里,就知道为啥没这个必要了。

我们日常工作接触的IPv4地址一般都是以十进制的方式表示,例如,192.168.200.111,但在计算机当中,它其实是以二进制形式存在,192.168.200.111的二进制为1100 0000 1010 1000 1100 1000 0110 1111,总共32位,也就是32比特。众所周知,1个字节占了8比特,那么就意味着,一个32比特的IP地址长度也就4个字节。

在网络传输过程中,4个字节的长度,可以说,微不足道,但,若换成域名呢?

目前,域名最大长度可达:63个字符,每个char字符就占了2字节,63字符占了126字节,可见,若要用域名当成传输的地址,是多么耗性能,但若用IP地址就不一样了,32位也就只占4字节。

事实上,在浏览器上通过IP同样可以访问到对应域名的网址,但IP地址是一长串数字,难以记住,更难以理解这一堆数字代表了啥,但域名就不一样了,像百度的域名www.baidu.com,很直观就知道,这是访问百度的网址。

按照百度百科的说法,设计域名的作用,就是为了让用户更好理解。

当在浏览器上敲下“www.baidu.com”,在这个过程当中,会做一步域名解析成IP地址的操作,这里就涉及到一个叫做DNS的概念。DNS,全称Domain Name System,即域名系统,它提供的作用是将域名和IP地址相互映射。最通俗的理解,它就像是Java里key-value形式的Map,key是域名,value是对应映射的IP地址,通过map.get(域名),可得到域名对应的IP地址。

这里值得多提一点是,与DNS相反的另一个相似概念,是ARP(Address Resolution Protocol,地址解析协议),它是根据已知的IP地址,可获得MAC地址,当然,MAC这块已是数据链路层的知识,DNS则是应用层的东西了。

二、域名解析IP的步骤

域名解析出其映射的IP地址,主要有以下几个步骤:

首先,会根据域名从浏览器缓存当中获取,若能获取到,直接返回对应的IP地址;若获取失败,会尝试获取操作系统本地的域名解析系统,即在hosts文件检查是否有对应的域名映射,若能找到,直接获取其映射的IP地址返回。其中,关于这一步,作为程序员,可能多少都做过相关操作。例如,网上有一些关于Windows系统如何加快访问Github网站的教程,其中有一个方式,就是将Github的域名与对应的IP地址,添加到Windows的C:\Windows\System32\drivers\etc\hosts文件当中,随后再浏览Github,发现速度确实快了不少。这是因为,直接本地DNS解析出IP地址,可以减少远程网络方式去DNS服务器上获取域名对应的IP地址操作,也就意味着,域名解析IP速度将更快。

image

在hosts文件里存储的域名与IP地址映射,一般都是针对IP比较稳定且经常用的,例如工作当中的一些线上开发环境或者测试环境等域名,如果是IP变化比较频繁或者是根本就不知道IP是啥的,这类情况就无法通过hosts文件进行配置获取,只能通过网络访问DNS服务器去获取。

首先,会先去本地区域的DNS服务器找,我们可以在系统的网络配置上查看,究竟哪个是属于所在网络的本地区域DNS服务器,在命令行提示窗口输入,ipconfig /all,然后按回车键,可以找到“DNS服务器”一栏——

image

例如,我所在网络的DNS服务器IP是192.168.31.1,当浏览器访问某个域名时,就会向这个DNS服务器发送查询消息。

可以使用Wireshark抓包软件验证一下,还是以www.baidu.com域名来做实验,我们先看一下该域名对应的IP是啥,直接在命令窗口ping一下,就可以知道了,其IPv4地址是14.215.177.38

image

三、通过Wireshark分析域名解析网络传输

这时,先打开Wireshark抓包软件。

接着,在谷歌浏览器上输入www.baidu.com,回车,可以看到,本机IP会向本区域DNS服务器192.168.31.1发送了一个DNS协议的消息,该消息包含了域名www.baidu.com,A,还有一个0x1515这几个数据,然后,DNS服务器response返回了 以下信息:response 0x1515 A www.baidu.com CNAME www.a.shifen.com A 14.215.177.38 A 14.215.177.39 ......
 

image


这些信息当中,正好包含了域名www.baidu.com映射的IP地址(不止一个),其中就有一个是前面ping返回的14.215.177.38。

理论上,若在最近的DNS服务器上,无法解析到域名对应的IP地址时,那么最近的DNS服务器就会类似充当一个中介角色,帮助客户端去其他DNS服务器寻找,看看哪台DNS服务器上可以找到该域名对应的IP。同时,需要理解一个知识点是,任何一台DNS服务器,都存储了根域名的IP地址。在www.baidu.com域名这个案例当中,加入无法从192.168.31.1这条最近的DNS服务器上解析到对应IP地址时,该DNS服务器就会将客户端的查询请求发送给根域名服务器去询问www.baidu.com域名在哪里可以解析。根域名服务器不做解析,更像是一位指路人,告知去com域对应的DNS服务器查询。com域所在的DNS服务器同样无法解析,继续充当一位指路人,告知把请求转发去baidu.com所在的DNS服务器,层层转发下去,最后找的目标DNS服务器,解析出域名对应的IP地址,然后返回给客户端,这时,客户端就可以通过IP地址获取到相应的服务器资源了。

在《网络是怎样连接的》一书当中,有一个关于DNS服务器解析流程的插图,觉得比较直观地表达出从最近DNS域名如何转发到目标DNS域名的流程,这里直接引用了——

image

当然,这只是理论,实际情况其实还是存在一些区别的。

再回到刚刚Wireshark抓包获取的截图上分析,可以看到一点是,客户端发送给DNS服务器的消息,不止域名这一个信息,还包括了A等书,那么,问题就来了,DNS协议的查询请求当中,都包含了哪些参数呢?

在《网络是怎样连接的》一书当中,有相关一些介绍,客户端发送给DNS服务器的查询消息包含了3种信息:

  • 域名:服务器的域名名称,例如本文中提到的www.baidu.com这样的域名;
  • Class:Class是用来识别网络的信息,但目前除了互联网已经没有其他网络了,因此,Class只有一个IN值;
  • type类型:表示该域名映射对应的类型,当类型为A,表示DNS服务器上域名映射的是IP地址;当类似是MX时,则表示映射的是邮件服务地址;

针对以上说明,我们可以具体通过Wireshark被选中数据包详细信息栏来分析,通过DNS服务器解析www.baidu.com过程当中,客户端都发送了哪些查询信息。

image

可见,该DNS查询信息的域名为www.baidu.com,Class为IN,type类型为A,即代表映射的是IP地址。

通过本文,主要是分享一些自己对DNS解析的学习与理解,同时,通过实际Wireshark抓包方式,来深入分析下本机如何发送DNS协议去DNS服务器上获取访问域名对应的IP地址,希望也能让您有一些收获。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1384713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

财务管理软件,用表格导出账目明细

不论是工资收入,还是日常花销,每一笔钱都需要我们认真对待。然而,许多人在财务管理上仍然采用传统的纸质记账方式,这不仅容易丢失数据,还难以实现财务的统一管理。为此,我为大家推荐一款简单好用的记账软件…

基于深度学习的多类别电表读数识别方案详解

基于深度学习的多类别电表读数识别方案详解 多类别电表读数识别方案详解项目背景项目难点最终项目方案系列项目全集: 安装说明环境要求 数据集简介数据标注模型选型明确目标,开始下一步的操作 检测模型训练模型评估与推理番外篇:基于目标检测…

linux Tcp总结

Tcp连接建立时的影响因素 在Client发出SYN后,如果过了1秒 ,还没有收到Server的响应,那么就会进行第一次重传;如果经过2s的时间还没有收到Server的响应,就会进行第二次重传;一直重传tcp_syn_retries次。 对…

无公网ip如何随时随地远程查看本地群晖NAS存储的文件资源

文章目录 前言本教程解决的问题是:按照本教程方法操作后,达到的效果是前排提醒: 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机:1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

python -- pyQt5中 样式设置

一、父控件设置样式表后对子控件产生影响,控制styleSheet的作用范围 https://blog.csdn.net/qq_31073871/article/details/90288625 QFrame 作为容器,放入其他多种部件,里面的边框都生效 在类名后面用 #号串接变量名,子控件不…

浅学Linux之旅 day1 学习路线及计算机入门知识介绍

我不要做静等被掀起的轻波,我要生起翠绿的斑驳 偶尔过季的遭遭人事化长风拂过 思绪撕碎点燃了火 ——24.1.14 一、Linux学习路线 ①计算机入门知识介绍 ②Linux系统概述 ③Linux系统的安装和体验 ④Linux的网络配置和连接工具 ⑤Linux的目录结构 ⑥Linux的常用命令 …

Qt/QML编程学习之心得:小键盘keyboard(36)

小键盘对于qml应用是经常用到的,在qml里面,就如一个fileDialog也要自己画一样,小键盘keyboard也是要自己画的,对于相应的每个按键的clicked都要一一实现的。 这里有一个示例: 代码如下: import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.Window 2.0 im…

五种嵌入式经典通信总线协议

一.先前知识 1.并行与串行 并行通信和串行通信是两种不同的数据传输方式: 并行通信:并行通信是指在同一时间使用多条并行传输的线路传输多个比特的数据。每个比特使用独立的线路进行传输,同时进行。这样可以在一个时钟周期内传输多个比特&…

Kafka消费全流程

Kafka消费全流程 1.Kafka一条消息发送和消费的流程图(非集群) 2.三种发送方式 准备工作 创建maven工程&#xff0c;引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.3.1&l…

阿里云服务器的tcp端口无法访问(云服务厂家问题?)

问题->无法访问 阿里云服务器的tcp端口 最近一台阿里云服务器的一个端口61616无法访问&#xff0c;在服务器内用外网地ip发现无法访问&#xff0c;用内网ip访问是正常的&#xff0c;通过技术排查&#xff1a; 解决->无法访问 阿里云服务器的tcp端口 1 配置官网的安全组…

如何正确使用数据库的读写分离

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 背景 在应用系统发展的初期&#xff0c;我们并不知…

spring基于XML方式的组件管理

基本介绍 依赖注入是一种处理对象间依赖关系的技术。在Spring中&#xff0c;依赖注入有构造方法注入和设值注入两种方式。 设值注入是将依赖作为成员变量&#xff0c;通过主调类的setter方法注入依赖。构造方法注入则是在Bean的构造方法中注入依赖。 本次我们将通过具体例子来…

大白话讲清楚:什么是 Langchain 及其核心概念

在AI和机器学习领域&#xff0c;每天都有新技术和框架涌现。今天&#xff0c;我们来聊聊最近引起广泛关注的一个框架 —— Langchain。 https://python.langchain.com/docs/get_started/introduction 那么&#xff0c;Langchain到底是什么&#xff0c;它为什么这么受欢迎&#…

[NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< ​全文 6000 字 内容摘要 NAND Flash 引脚功能 读操作步骤 NAND Flash中的特殊硬件结构 NAND Flash 读写时的数据流向 Read 操作时序 读时序操作过…

测试SpringBoot的时候报错mapper未装载的解决方案:

1.报错信息和截图&#xff1a; org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name com.tang.testspringboot.TestSpringBootApplicationTests: Unsatisfied dependency expressed through field mapper: No qualifying bean o…

SAM:segment anything model——一个通用的图像分割基础模型

文章目录 一、Segment Anything Task二、SAM模型的架构&#xff08;一&#xff09;图像编码器image encoder&#xff08;二&#xff09;prompt encoder&#xff08;三&#xff09;mask decoder 三、SAM 模型的思想&#xff08;一&#xff09;Transformer的自注意力机制&#xf…

Oracle-数据库性能变慢问题分析

问题背景: 应用运维报障说最近两天业务数据入库和表查询都变得很慢&#xff0c;需要排查一下数据库的性能问题 问题分析&#xff1a; 登录到服务器上&#xff0c;通过TOP命令快速看了一下&#xff0c;服务器整体的CPU使用%usr不算特别高&#xff0c;但%wa IO等待很高&#xff…

数据库与SQL

数据库与SQL 学习链接数据库关系型数据库管理系统&#xff08;RDBMS&#xff09; SQLSQL介绍SQL类型SQL 基础语言学习创建表&#xff08;create table&#xff09;语法 数据类型SQL最常用的数据类型 学习链接 基础篇&#xff1a;数据库 SQL 入门教程 数据库 用于存储数据 存放…

centos下系统全局检测工具dstat使用

目录 一&#xff1a;没有需要安装 二&#xff1a;dstat命令参数 三、监测界面各参数含义&#xff08;部分&#xff09; 四、dstat的高级用法 一&#xff1a;没有需要安装 yum install dstat 二&#xff1a;dstat命令参数 有默认选项&#xff0c;执行dstat命令不加任何参数…

docker完成redis 三主三从

文章目录 关闭防火墙启动docker后台服务新建6个docker容器redis实例创建并运行docker容器实例 进入容器redis-node-1并为6台机器构建集群关系链接进入6381作为切入点&#xff0c;查看集群状态主从容错切换迁移案例容错切换迁移 主从扩容案例为主节点6387分配从节点6388主从缩容…