【网络面试(2)】DNS原理-域名和IP地址的查询转换
从上一篇博客我们得知浏览器是如何生成了HTTP消息了,但是浏览器作为应用程序,是不具备向网络中发送请求的能力,而是需要委托给操作系统的内核协议栈来发送请求。在委托协议栈之前,浏览器还要做的一件事情就是将域名转换为IP地址。
在了解这个过程之前,我们先来学习一下IP地址相关概念。
1. IP地址
IP(Internet Protocol)网际互联协议,是TCP/IP协议中的核心部分。通常我们接触比较多的是IP地址,像 192.168.0.1
这种4组数字和3个点分隔符组成的,每组数字的取值范围是0~255,换算成2进制最大表示到28,也就是8个bit,1个字节的长度,所以1个IP地址的长度占用了4个字节。
IP地址的作用可以帮助我们在互联网中定位到某台主机。通常我们访问的网站域名都是很多字符组成,一般占用几十到几百个字节,而1个IP地址只占用4个字节,如果通过域名去定位这台主机,要远大于使用IP地址定位的使用的网络传输成本。
IP地址一般是由2部分组成,子网号+主机号
,那子网和主机又分别代表了什么呢?下面这张图就展示了他们的关系,比如几台计算机通过集线器可以组成的一个小的内网,这个内网就是子网,而每一台计算机就是子网中的主机。子网与子网之间可以通过路由器连接起来,实现访问。
1.1 掩码
既然IP地址是由子网号和主机号组成,那他们是通过什么规则组成的呢?这里就需要接触掩码地址。
掩码地址和IP地址长的是一样的,都是占用4个字节的一组.
号分隔的数字。掩码的表示有很多种形式,如下两种:
掩码理解起来其实比较简单,掩码掩码,遮掩起来的就是子网号,剩下的就是主机号,原理上如下,首先将IP地址和掩码地址转换为2进制表示,然后做拆分转换,如下:
这样我们就可以拿到子网号和主机号了,路由器可以根据子网号定位到子网,集线器可以定位到具体的主机。
还有一种简单的方式表示掩码,就是上面的(c)表示法,24其实就是二进制表示方法中,从左往右24个数字1。
2. 查询IP地址
接下来,浏览器需要根据域名查询IP地址,这一步要借助DNS服务器,同理浏览器无法直接向DNS服务器发起请求,而是要调用操作系统Socket库中的DNS解析器程序gethostbyname()
来完成。
DNS解析器,其实就是DNS客户端,是一段实现在Socket库中的程序代码,他的作用就是接收各种域名转换IP地址的请求,将域名发送给DNS服务器,DNS服务器接收请求解析后,将IP地址返回给DNS解析器,解析器再将IP地址存放到浏览器指定的内存地址处。当然,DNS解析器也是不具备直接向网络发送请求的,同理要借助操作系统的内核协议栈来实现。接下来,浏览器就会从内存中取出IP地址,和生成的HTTP消息,交给操作系统来执行发送网络请求。
通常,DNS服务器的地址是作为TCP/IP设置的一个配置项提前设置好的,DNS地址有很多,比如有阿里的223.5.5.5
,谷歌的8.8.8.8
等等。
3. DNS服务器的工作原理
DNS服务器的主要工作就是将客户端发来的域名转换为IP地址,在DNS服务器中保存着域名与IP地址的映射表,这张表中除了保存域名
、IP地址
,还有Class
(DNS设立之初考虑了除了互联网之外的网络,不过目前只有互联网IN这一种类型)和记录类型
(A就是Adress,表示IP地址,MX表示邮件服务器)。
客户端的入参中,会包含域名、Class类型、记录类型等参数,以此来确定最终的IP地址。
在全世界有很多的WEB服务器,如果只有一台DNS服务器来记录相关的域名和IP地址是不现实的,所以这么多的映射记录肯定是分散保存在不同的WEB服务器上的。下面我们就来看下,如何根据域名找到最终的IP地址。
3.1 DNS服务器缓存
查找的第一步,根据我们配置的DNS地址找到对应的DNS服务器,这台DNS服务器上会缓存之前查找过的域名,当然是有过期时间的。如果有此域名,会直接返回客户端,同时也会告诉客户端这个IP地址来自缓存还是保存此地址的DNS服务器。
3.2 DNS接力查找
我们知道,域名通常是由很多层级来表示的,比如www.lab.glasscom.com
这个域名就包含了4层域名,1个是.
放在最后,一般隐藏不写表示根域,com
表示顶级域名,而glasscom
表示一级域名,lab表示二级域名,www就代表了web服务器。一般来说,每层的域名会分布在不同的DNS服务器上,当然也不是那么绝对,但是上一层级的域名会记录下一层级域名的IP地址,然后所有的域名服务器都会记录根域服务器的IP地址。以上面这个域名为例:
- 根域名: 全世界的根域IP地址有13个,这样就有对应的13组服务器,大部分在美国,据说中国以前有一台,后来因为国内互联网开放程度过低,动不动就封这个网站,那个网站,被撤掉了。回到上面例子,根域服务器会记录
com
这个域名的服务器IP地址。 - 顶级域名: 上面例子中的
com
是当前互联网中应用最广的域名,这个域名对应的DNS服务器中会记录下一级glasscom
的域名服务器地址。 - 一级域名: 上面例子中的
glasscom
是一级域名,这个对应的服务器中会记录lab
的DNS服务器IP地址。 - 二级域名: 这是最下一层的域名了,这个DNS服务器中就会记录
lab.glasscom.com
这个域名与IP的映射记录。
因为所有的域名服务器中都会记录根域服务器的IP地址,所以不管我们电脑上配置的哪个DNS服务器,在DNS缓存无法命中的情况下,会直接将请求发给根域服务器,根域服务器将顶级域com
的IP地址返回到我们配置的DNS服务器,它再去寻找com
的DNS服务器,同理会返回glasscom
域名DNS服务器的地址,依次直到最下层的lab.glasscom.com
域名DNS服务器,这台DNS服务就会把www.lab.glasscom.com
对应的IP地址返回给客户端,完成对此IP地址的请求。
经常上面的这些步骤查找,浏览器就可以得到我们输入的URL中域名对应的IP地址,下一步就可以将网络请求委托给操作系统了。
相关文章:

【网络面试(2)】DNS原理-域名和IP地址的查询转换
从上一篇博客我们得知浏览器是如何生成了HTTP消息了,但是浏览器作为应用程序,是不具备向网络中发送请求的能力,而是需要委托给操作系统的内核协议栈来发送请求。在委托协议栈之前,浏览器还要做的一件事情就是将域名转换为IP地址。…...
【PHP】函数array_intersect、array_diff:从数组中取出、去除指定的几个键值
1.从数组中取出 :array_intersect 要从数组中取出指定的几个键值,可以使用 array_intersect_key 函数。以下是一个示例: $array [name > John,age > 30,email > johnexample.com,city > New York ];$keys [name, email];$resu…...

【华为机试】2023年真题B卷(python)-冠亚军排名-奖牌榜排名
一、题目 题目描述: 2012伦敦奥运会即将到来,大家都非常关注奖牌榜的情况,现在我们假设奖牌榜的排名规则如下. 1.首先gold medal数量多的排在前面 2.其次silver medal数量多的排在前面 3.然后bronze medal数量多的排在前面 4.若以上三个条…...
MyBatisPlus之逻辑删除
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 MyBatisPlus之逻辑删除 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是逻辑删…...

在macOS中搭建.NET MAUI开发环境
文章目录 准备安装扩展安装 .NET安装工作负载安装 Xcode 命令行工具调试安卓应用安装 JDK安装 Android SDK 安装 Android 模拟器安装模拟器安装镜像创建虚拟机 同意许可条款创建 MAUI 项目调试 MAUI 应用切换调试目标 参考资料 准备 一台 macOS Monterey 以上的电脑安装 XCode…...

[NCTF 2022]calc
[NCTF 2022]calc 考点:python环境变量注入 打开题目,F12有hint 访问一下得到源码 app.route("/calc",methods[GET]) def calc():ip request.remote_addrnum request.values.get("num")log "echo {0} {1} {2}> ./tmp/log…...

【pandas_不重复项计数】
听说WPS没有非重复项计数的功能,而office需要添加到数据模型之后,才可以使用该功能。而用pandas,既可以对重复项计数,又可以对非重复项计数。 # 使用提醒: # 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能 # 2. pack…...

菜鸟学习vue3笔记-vue hooks初体验
import { ref } from "vue"; export default function () {let a1 ref(1);let a2 ref(5);let c ref(0);function add() {a1.value;a2.value;}return {add,a1,a2,c,}; }<template><div><p>第一个数字{{ a1 }}</p><p>第二个数字{{ a2…...
81 使用DFS和BFS解机器人的运动范围
问题描述:地上有一个m行n列的方格,从坐标[0,0]到坐标[m-1,n-1].一个机器人从坐标[0,0]的格子开始移动,他每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。 public int numB…...

vue-springboot基于JavaWeb的家装一体化商城平台guptn
针对用户需求开发与设计,该技术尤其在各行业领域发挥了巨大的作用,有效地促进了家装一体化的发展。然而,由于用户量和需求量的增加,信息过载等问题暴露出来,为改善传统线下管理中的不足,本文将提出一套基于…...

.NET进阶篇06-async异步、thread多线程2
知识须要不断积累、总结和沉淀,思考和写做是成长的催化剂web 内容目录 1、线程Thread 一、生命周期 二、后台线程 三、静态方法 1.线程本地存储 2.内存栅栏 四、返回值 2、线程池ThreadPool 一、工做队列 二、工做线程和IO线程 三、和Thread区别 四、定时器 1、线…...
java 方法
方法: 什么是方法,有什么用? 方法(英语单词:method)是可以完成某个特定功能的并且可以被重复利用的代码片段。 在 C 语言中,方法被称为“函数”。在 java 中不叫函数,叫做方法。 方法…...

HarmonyOS 组件通用属性之通用事件 文档参数讲解(点击事件)
我们组件中 会有很多通用的信息和方法 那么 首先 我们看通用事件 通用事件中 最常用的就是我们的点击事件 比如说 我们之前常写的 组件.onClick(()>{//事件逻辑 })但是 我们之前 都没有用它接参数 我们可以这样 Button("跳转").onClick((ewat: ClickEvent)>…...
毕业设计之开题报告
终于轮到我来写开题报告了,呃呃呃呃呃,目前有点难产了。想做的东西是关于区块链的后端设计实现,但是因为是完全原创之前没有类似的项目能去参考,所以其实有点慌的。 框架梳理 这是我们开题报告的要求: 包括题目研究的…...

【数据结构】详细剖析线性表
顺序表与链表的比较 导言一、线性表二、线性表的存储结构三、顺序表和链表的相同点四、顺序表与链表之间的差异五、存储结构的选择六、静态顺序表的基本操作七、无头结点单链表的基本操作结语 导言 大家好,很高兴又和大家见面啦!!࿰…...
通过数字证书对PDF电子文件进行数字签名/盖章
以下代码详细说明如何使用数字证书对PDF电子文件进行数字签名/盖章。PDF文件签署主要传递PDF文件,数字证书信息,签章图片3个信息。代码中需要的文件、数字证书、签章图片可访问开放签电子签章开源系统详细了解系统的实现与效果。也可通过gitee开源社区下…...

2007~2016 年税调经纬度及其所处的省市区县乡镇数据
之前给大家分享过一份税调企业经纬度及其所处的省市区县数据: 2007~2016 年税调企业地理信息数据(含经纬度及其所处的省市区县):https://rstata.duanshu.com/#/course/76d38022cd004b09b2aa09647936beb0 最近有培训班的小伙伴提出是否能根据税调企业经纬度来判断其所属的乡…...
SLAM学习入门--编程语言
文章目录 编程语言一、C/C++C 与 C++ 的区别(面向对象的特点)C++ 与 Python的区别判断struct的字节数static 作用Const 作用extern "C"的作用多态如何实现多态?虚函数虚函数怎么实现的?析构函数虚析构函数的作用virtual函数能不能用在构造函数中&#...
Go语言程序设计-第6章--方法
Go语言程序设计-第6章–方法 对象就是简单的一个值或者变量,并且拥有其方法,而方法是某种特定类型的函数。 6.1 方法的声明 方法的声明和普通函数的声明类似,只是在函数名字前面多了一个参数。这个参数把这个方法绑定到这个参数对应的类型…...

AI按理说应该最擅长理工,为啥先冲击文艺行业?
介绍 本人数据AI工程师,我的观点对全行业都有冲击,当AI大模型持续进化之时,没有一家公司能独善其身。 本文从产业架构上、论文体量、基础Pass能力、通用大模型、AI开源社区、业务属性大模型、内容消费工具、创作工具赛道、企业服务这些板块…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...