【面试中的网络知识】DNS原理-如何实现域名和IP地址的查询转换

news2024/12/24 2:15:19

 接上一篇,理解 浏览器是如何生成HTTP消息的 ,最好是按照顺序来读。
 从上一篇博客我们得知浏览器是如何生成了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解析器程序来完成。
 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地址,下一步就可以将网络请求委托给操作系统了。

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

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

相关文章

淘宝详情页分发推荐算法总结:用户即时兴趣强化

转子:https://juejin.cn/post/6992169847207493639 商品详情页是手淘内流量最大的模块之一,它加载了数十亿级商品的详细信息,是用户整个决策过程必不可少的一环。这个区块不仅要承接用户对当前商品充分感知的诉求,同时也要能肩负起…

必学KVM技术详解包括所有技能

KVM虚拟化进阶学习 一,KVM命令行安装 图形化安装教程:https://blog.csdn.net/weixin_53678904/article/details/125950867?spm1001.2014.3001.5501 1.存储池管理 ​ KVM必须要配置⼀个⽬录当作他存储磁盘镜像(存储卷)的⽬录,我们称这个⽬…

通达信筹码单峰密集选股公式,突破筹码密集区发出信号

筹码密集是相对筹码发散而言的,筹码分布在宽广的价格区间,这种状态就是筹码发散(如下图),而且筹码峰像群山一样,有多个高峰,属于多峰形态。 与之相对的,筹码分布在比较窄的价格区间&…

Armbian安装1panel教程

文章目录 一 1panel简介二 检测是否安装1Panel三 环境要求四 安装操作指导4.1 确定系统类型4.2 执行安装命令4.3 访问1panel面板4.4 设置1panel访问配置4.5 查看访问1panel面板入口 五 常用命令总结 一 1panel简介 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。 二…

New Bing使用教程

New Bing使用教程 New Bing简介前提条件使用技巧 New Bing简介 New Bing是微软推出的一款基于GPT4模型的智能搜索引擎,它不仅可以提供高质量的搜索结果,还可以与用户进行自然语言交互。 用户只需安装Edge浏览器即可使用,但现实使用中会出现…

驱动操作 驱动移植试验和Source Insight添加项目

目录 驱动移植 》1.需要有一个驱动对应的 .c代码 》2.将.c文件放入到对应的文件夹内 》3.修改Makefile文件 》4.修改Kconfig菜单 》5.到顶层目录配置自己驱动 》6.编译成模块 》7.此时用的开发板上内核的编译器,安装得到开发板上进行安装 》8.在开发板上进…

标准IO和文件IO分别实现cp功能(嵌入式学习)

标准IO和文件IO分别实现cp功能 标准IO实现cp功能标准IO概念代码实现 文件IO实现cp功能文件IO概念代码实现 标准IO实现cp功能 标准IO概念 想了解标准IO的概念,请点击这里——》IO进程——标准IO(嵌入式学习) IO进程——标准IO(嵌…

【C语言】三子棋详解(包教包会的那种)

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 三子棋及五子棋详解 前言三子棋的实现1. 打印菜单2.初始化并打印棋盘棋盘初始化函数功能的实现打印棋盘 3.玩家下棋与模拟电脑下棋玩家下棋电脑下棋随机数的生成 4.判断输赢我们的game函数 源码game.hgame.ctest.c 总结 …

PMP课堂模拟题目及解析(第18期)

171. 一个项目已经结束,然而,项目经理和项目团队成员仍然被要求解决技术问题,进行一些变更,并评估新的需求。若要保证项目开发的产品或服务现在具有运营支持,项目经理应该执行下列哪些工作? (选…

Nacos配置中心交互模型是push还是pull?

对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。 比如我们今天要讨论的…

44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 经过前面几篇文章的讲解,我们现在已经对面向对象有了基本的认知,掌握了面向对…

基于Java员工信息管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

2.04_基于矩阵分解的协同过滤推荐

矩阵分解发展史 Traditional SVD: 通常SVD矩阵分解指的是SVD(奇异值)分解技术,在这我们姑且将其命名为Traditional SVD(传统并经典着)其公式如下: Traditional SVD分解的形式为3个矩阵相乘,中间矩阵为奇异值矩阵。如果想运用SVD分解的话,有一个前提是要求矩阵是稠密…

AAC ADTS格式分析

标题 1.AAC简介2. AAC ADTS格式分析2.1 adts_fixed_header详细介绍2.2 adts_variable_header详细介绍 1.AAC简介 AAC音频格式:Advanced Audio Coding(⾼级⾳频解码),是⼀种由MPEG-4标准定义的有损⾳频压缩格式,由Fraunhofer发展,Dolby, Sony…

[CISCN 2023 初赛]puzzle 解析

打开文件包给了一堆拼图碎片,由于文件数量高达2880张,这里不考虑gaps的方式进行修正拼图 (因为跑了也只会把gaps跑冒烟) tmp类型的拼图,因为tmp文件特性在文件头的位置会有其在原图片上的位置坐标 于是,我…

MyBatis-Plus一级缓存和二级缓存-redis解决缓存的脏数据

MyBatis-Plus一级缓存和二级缓存 文章目录 MyBatis-Plus一级缓存和二级缓存[TOC](文章目录) 基本缓存问题一级缓存-MyBatis默认打开一级缓存、不允许关闭二级缓存(默认是开启)注意:二级缓存的作用域不然更新了数据,还是使用查询到缓存的数据)操作演示第一…

系统编程(1):基本程序框架--IO

文章目录 一、main函数二、IO&#xff08;输入/输出&#xff09;2.1 标准IO和文件IO2.2 文件描述符2.2 open函数 一、main函数 #include <stdio.h> #include <stdlib.h>int main(int argc, char* argv[]) {// argc&#xff1a;表示是命令行中参数的个数// argv&am…

天融信堡垒机怎么结合国密OTP动态令牌实现双因子身份认证?

摘要&#xff1a; 结合宁盾国密OTP动态令牌为天融信堡垒机登录开启双因子身份认证机制&#xff0c;能有效增强运维人员的账号安全&#xff0c;满足等保合规要求。 天融信运维安全审计系统&#xff08;简称“堡垒机”&#xff09;是面向政府、企事业单位等组织机构推出的兼具运…

一篇文章教你pytest+yaml实现参数化

目录 一、使用背景 二、parametrize 三、yaml 四、将yaml数据转换成parametrize可读的列表形式 总结&#xff1a; 一、使用背景 当我们在设计用例的时候&#xff0c;经常会出现需要不同参数的情况&#xff0c;例如一个登录的用例&#xff0c;我们需要测试它登录名正常、为…

【JAVA集合篇】深入理解HashMap源码

文章目录 HashMap简介源码分析关键参数获取数组下标put方法resize扩容过程jdk1.7的扩容实现jdk1.8的扩容实现 get()方法remove()方法 总结 关于HashMap&#xff0c;一直都是一个非常热门的话题&#xff0c;只要你出去面试&#xff0c;一定少不了它&#xff01; 本文主要结合 JD…