【网络面试(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地址,下一步就可以将网络请求委托给操作系统了。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows10系统的音频不可用,使用疑难解答后提示【 一个或多个音频服务未运行】

一、问题描述 打开电脑,发现电脑右下角的音频图标显示为X(即不可用,无法播放声音),使用音频自带的【声音问题疑难解答】(选中音频图标,点击鼠标右键,然后选择“声音问题疑难解答(T)”…

使用频率分析求周期性

通常很难通过观察时间测量值来表征数据中的振荡行为。频谱分析有助于确定信号是否为周期性信号并测量不同周期。 办公楼内的温度计每半小时测量一次室内温度,持续四个月。加载数据并对其绘图。将温度转换为摄氏度。测量时间以周为单位。因此,采样率为 2 …

回首2023: 程序员跳出舒适圈

1 前言 今天的冬日暖阳高照,照耀着我穿着羽绒服的身体,让我感到火一般的燥热,仿佛错觉中已经到了阳春三月。刚刚把孩子洗好,我坐在电脑前,准备整理一下思绪,回顾一下2023年的生活和工作。 2 2023 回顾 回…

拓扑排序

目录 拓扑排序 有向图的拓扑排序 拓扑排序 一个有向图,如果图中有入度为 0 的点,就把这个点删掉,同时也删掉这个点所连的边。 一直进行上面出处理,如果所有点都能被删掉,则这个图可以进行拓扑排序。 举例子&#…

Java技术栈 —— Nginx的使用

Java技术栈 —— Nginx的使用 一、认识Nginx二、搭建Nginx环境2.1 在Ubuntu上安装Nginx 三、使用Nginx3.1 配置负载均衡(HTTP) 一、认识Nginx 企业需要运行多个相同的副本,并将负载分散在整个系统集群上,为了高性能的负载均衡,引入了Nginx代…

深度学习与Apollo自动驾驶:创造智能驾驶的未来

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo缓存层概述2. 缓存策略的重要性3. 缓存策略的配置4. 数据层次结构的管理结论 文章目录 前言1. Apollo缓存层概述2. 缓存策略的重要性3. 缓存策略的…

再薅!Pika全球开放使用;字节版GPTs免费不限量;大模型应用知识地图;MoE深度好文;2024年AIGC发展轨迹;李飞飞最新自传 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 👀 终于!AI视频生成平台 Pika 面向所有用户开放网页端 https://twitter.com/pika_labs Pika 营销很猛,讲述的「使…

Zookeeper-Zookeeper应用场景实战(二)

1. Zookeeper 分布式锁实战 1.1 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候,大家往往采用Synchronized(同步)或者其他同一个 JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要 一种…

CloneNotSupportedException的解决方案 + Object的clone方法分析

CloneNotSupportedException的解决方案 引入问题: 在一次测试clone方法时,D类Override了Object类的clone方法 public class D {private Integer A1;private Integer A2;public D() {}public D(Integer a1, Integer a2 {A1 a1;A2 a2;}Overrideprotec…

Docker:Docker集群配置与应用(Docker Swarm)

Docker集群配置与应用 前言学习目标 1. 建立Docker Swarm集群1.1 为什么要使用容器集群1.2 什么是Swarm集群1.3 Docker Swarm特性1.4 Swarm节点1.5 Swarm 集群管理命令Swarm 集群节点管理命令 1.6 Docker Swarm 集群搭建 前言 可以认为Docker Swarm(Go语言开发)将一个Docker主…

Powermill各版本安装指南

下载链接 https://pan.baidu.com/s/1CsrYEUQNmDa820RxDV2G6Q?pwd0531 1.鼠标右击【PowerMill2024(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 PowerMill2024(64bit)】。 2.打开解压后的文件夹,双击打开【Setup】文…

CorelDRAW 2024最新版本功能介绍含注册机序列号

始于1989年并不断推陈出新,致力为设计工作者提供更高效的设计工具!CorelDRAW滋养并见证了一代设计师的成长!在最短的时间内交付作品,CorelDRAW的智能高效会让你一见钟情!CorelDRAW 全称“CorelDRAW Graphics Suite“,也…