网络是怎样链接的--向DNS服务器查询Web服务器的IP地址

news2024/9/20 13:17:38

文章目录

    • 2.1 IP地址的基本知识
    • 2.2 域名和IP地址共用理由
    • 2.3 DNS本质是什么
    • 2.4 浏览器如何获取IP
    • 2.5 DNS解析器内部工作原理

2.1 IP地址的基本知识

浏览器能够解析网址并生成HTTP消息,但并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统来实现,而想要进行这一操作,我们必须知道是通信对象服务器域名对应的IP地址;

我们先了解一下局域网网络结构:由一些小的子网,通过路由器连接起来组成一个大的网络;这里的子网可以理解为用集线器连接起来的几台计算机为单位的团体,我们将它称为子网。将子网通过路由器连接起来,就形成了一个网络;

在这里插入图片描述

发送者发出的消息首先经过子网中的集线器,转发到距离发送者最近的路由器上。接下来,路由器会根据消息的目的地判断下一个路由器的位置,然后将消息发送到下一个路由器,即消息再次经过子网内的集线器被转发到下一个路由器,循环往复,直到找到目的地;

这里有个小问题,路由器是怎么知道发送消息的下一个目的地的呢?

在网络中,所有的设备都会被分配一个地址.这个地址就相当于现实中某条路上的“××号××室”;其中“号”对应某个子网(整体)的,而“室”对应某个子网中的计算机,这就是网络中的地址(IP). “号”对应的号码称为网络号,“室”对应的号码称为主机号,这个地址的整体称为IP地址,通过IP地址我们可以判断出访问对象服务器的位置,从而将消息发送到服务器。

实际的IP地址是一串32比特的数字,按照8比特(1字节)为一组分成4组,分别用十进制表示然后再用圆点隔开(称为点分十进制)。这就是我们平常经常见到的IP地址格式,但仅凭这一串数字我们无法区分哪部分是网络号,哪部分是主机号,因此我们需要另外的附加信息(子网掩码);

子网掩码的格式如下图所示,是一串与IP地址长度相同的32比特数字,其左边都是1,右边都是0。为1的部分的位置在ip地址中表示网络号,为0的部分的位置在ip地址中表示主机号;

在这里插入图片描述

子网掩码既可以用点分十进制表示,也可以用比特位中1的数目表示
在这里插入图片描述

IP地址的主机号

  • 全0:表示整个子网
  • 全1:表示向子网上所有设备发送包,即广播

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-STh7H0sY-1668959271035)(2 向DNS服务器查询Web服务器的IP地址.assets/image-20221120224814213.png)]

子网掩码表示网络号与主机号之间的边界。在本例中,这个边界与字节的边界是正好吻合的,也就是正好划分在句点的位置上,实际上也可以划分在字节的中间位置

2.2 域名和IP地址共用理由

使用域名

是为了方便人类理解,因为人类相对于数字表示来说,更喜欢文字记忆;举个例子,这里有农业公司,商业公司,网络公司,贸易公司,国家银行等五个样例,通过其名字就能大概猜出其背后所做的业务;但若是给他们分别起数字名:111,222,333,444,555,是不是就会感觉很别扭?

使用IP

是为了方便计算机,计算机并不明白文字到底什么意思,它只知道对数字进行计算;同时使用IP对计算机来说也更加节省空间,随便一个域名可能就十几二十几个字节,但IP始终只有四个字节;

为了填补两者之间的障碍,需要有一个机制能够通过名称来查询IP地址,或者通过IP地址来查询名称,这样就能够在人和机器双方都不做出牺牲的前提下完美地解决问题。这个机制就是DNS(Domain Name System)

2.3 DNS本质是什么

浏览器向DNS服务器发出查询,也就是向DNS服务器发送查询消息,并接收服务器返回的响应消息(通过域名解析出来的IP地址);既然有了DNS服务器,那么就一定有DNS客户端,这里简称解析器,通过DNS查询ip地址的操作称为 域名解析 ,而负责这执行解析(resolution)操作的就称为解析器(resolver)了,而解析器实际上是一段程序,它包含在操作系统的Socket库中。

首先,库到底是什么东西呢?

库就是一堆通用程序组件的集合,其他的应用程序都需要使用其中的组件。库有很多好处。首先,使用现成的组件搭建应用程序可以节省编程工作量;其次,多个程序使用相同的组件可以实现程序的标准化,而解析器就是这个Socket库中的其中一种程序组件。

Socket库是用于调用网络功能的程序组件集合。

2.4 浏览器如何获取IP

浏览器本身也是一个程序软件,因此想要获取IP地址,那么就在程序中调用DNS解析器的程序名称就行(gethostbyname),代码结构大致如下:

<浏览器程序名>(相关参数){
    ...
    ...
    <某个变量或者内存接收该程序返回的内容> = gethostbyname("你所想查询的域名");
    ...
    ...
}

调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会返回响应消息。响应消息中包含查询到的IP地址,解析器会取出IP地址,并将其写入浏览器指定的内存地址中。然后浏览器就可以得到域名所对应的IP地址了;

2.5 DNS解析器内部工作原理

当浏览器调用DNS解析器时候,程序的控制流程就开始转移,控制流程转移指的是由于调用了其他程序,原本运行的程序进入暂停状态,而被调用的程序开始运行,如下图(注意箭头深浅和标记的执行顺序):
在这里插入图片描述

当控制流程转移到解析器后,解析器会生成要发送给DNS服务器的查询消息。这个过程与浏览器生成要发送给Web服务器的HTTP请求消息的过程类似,解析器会根据DNS的规格,生成一条表示“请告诉我www.lab.glasscom.com的IP地址的数据,并将它发送给DNS服务器(上图③)。发送消息这个操作并不是由解析器自身来执行,而是要委托给操作系统内部的协议栈[插图]来执行。这是因为和浏览器一样,解析器本身也不具备使用网络收发数据的功能。

解析器调用协议栈后,控制流程会再次转移,协议栈会执行发送消息的操作,然后通过网卡将消息发送给DNS服务器(上图④⑤)。当DNS服务器收到查询消息后,它会根据消息中的查询内容进行查询。查询后的IP地址会被写入响应消息并返回给客户端(上图⑥)。接下来,消息经过网络到达客户端,再经过协议栈被传递给解析器(上图⑦⑧),然后解析器读取出消息取出IP地址,并将IP地址传递给应用程序(上图⑨)。

计算机的内部结构就是这样一层一层的。也就是说,很多程序组成不同的层次,彼此之间分工协作。当接到上层委派的操作时,本层的程序并不会完成所有的工作,而是会完成一部分工作,再将剩下的部分委派到下层来完成。

顺带一提,向DNS服务器发送消息时,我们当然也需要知道DNS服务器的IP地址。只不过这个IP地址是作为TCP/IP的一个设置项目事先设置好的,不需要再去查询了。不同的操作系统中TCP/IP的设置方法也有差异,Windows中的设置如图所示,解析器会根据这里设置的DNS服务器IP地址来发送消息。

在这里插入图片描述

====================================上一章====================================

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

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

相关文章

DataObjectImpl

DataObjectImpl目录概述需求&#xff1a;设计思路实现思路分析1.DataObjectImpl2.DeadLetterJobQueryImpl3.DeploymentQueryImpl4.Direction5.DynamicBpmnServiceImpl参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,fu…

IDEA2022版本创建maven web项目(两种方式)

目录 一、使用骨架的方式 二、maven中添加 web方式 总结&#xff1a; 前言&#xff1a; 创建maven web项目有两种方式&#xff0c;一种是使用骨架方式&#xff0c;一种是不使用骨架的方式 一、使用骨架的方式 1.打开idea&#xff0c;按照步骤创建一个新的项目 2.点击Mave…

【高级篇】Java JVM实战 之 内存调优

文章目录一、通过Jprofiler调式Dump文件错误⛅ 什么是Jprofiler&#xff1f;⚡使用Jprofiler调试Dump文件二、堆内存调优三、 GC垃圾回收器四、GC常用算法❄️引用计数法⛄复制算法♨️标记清除算法⛽标记压缩⚠️标记清除压缩五、JMM⛵小结一、通过Jprofiler调式Dump文件错误 …

Spark 3.0 - 4.Pipeline 管道的工作流程

目录 一.引言 二.基本组件 三.Pipeline 基本流程 1.训练 Pipeline - Estimator 2.预测 Pipeline - Transformer 四.Pipeline 分解与构造 1.DataFrame 2.Transformer1 - Tokenizer 3.Transformer2 - HashingTF 4.Estimator - LR 5.Pipeline With ParamMap - Estimat…

SpringCloud微服务(一)——Consul服务注册中心

Consul服务注册中心 SpringCloud 中文官网&#xff1a;https://www.springcloud.cc/spring-cloud-consul.html Consul是一套开源的分布式服务发现和配置管理系统&#xff0c;Go语言开发。 Consul是一个服务网格&#xff08;微服务间的 TCP/IP&#xff0c;负责服务之间的网络…

SharedPreferences存储

文章目录 前言 听说SharedPreferences存储技术快过时了&#xff0c;不过如果是单纯的使用的话&#xff0c;不费什么时间成本。 本文的Demo摘录自《第一行代码》。 一.什么是SharedPreferences SharedPreferences&#xff0c;一种通过使用键值对的方式来存储数据的技术。 二…

【深入浅出Spring6】第八期——面向切面编程 AOP

AOP&#xff08;Aspect Oriented Programming&#xff09;面向切面编程&#xff0c;属于面向对象编程的一种衍射&#xff0c;是一种编程思想或技术AOP的底层是由动态代理机制实现的 JDK动态代理CGLIB动态代理&#xff0c;自动识别并切换我们也可以通过配置属性指定就是用CGLIB …

【MySQL】六,sql_model的合理设置

宽松模式和严格模式 宽松模式 如果设置的是宽松模式&#xff0c;那么我们在插入数据的时候&#xff0c;即使是给了一个错误的数据&#xff0c;那么可能也不会报错。 举例&#xff1a;某张表的name字段为 char(10) &#xff0c;插入数据的时候&#xff0c;如果name字段的数据长…

免费搜题系统

免费搜题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转&a…

跨模态神经搜索实践VCED 基于Streamlit实现前端页面设计和逻辑

1. Streamlit入门 1.1 Streamlit介绍 Streamlit是基于Python的Web应用程序框架&#xff0c;它可以使用Python代码轻松构建机器学习/数据科学相关的仪表板&#xff0c;其特点包括&#xff1a; 跨平台&#xff1a;支持Windows、macOS、Linux只需要掌握Python&#xff1a;不需要…

【时序】时间序列数据预处理

目录 1. 时间戳转换 2. 缺失值处理 3. 去噪 1&#xff09;滚动平均值 2&#xff09;傅里叶变换 4. 异常点检测 1&#xff09;基于滚动统计的方法 2&#xff09;孤立森林 3&#xff09;K-means 聚类 为了分析预处理结果&#xff0c;我们后续使用 Kaggle 的 Air Passenge…

【Python】发布一个简单好用的日志记录器bestlog

需求 日志是非常重要的一个东西&#xff0c;我们往往习惯于在开发一个新项目的第一行代码时&#xff0c;就用 logging.info 代替 print&#xff0c;随时保持记录的好习惯&#xff0c;等代码上线以后也无需修改替换那些 print&#xff0c;直接开跑&#xff0c;有了完善的日志&a…

牛客刷题——Python入门总结

&#x1f935;‍♂️ 个人主页: 北极的三哈 个人主页 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;Python领域优质创作者。 &#x1f4d2; 系列专栏&#xff1a;《Python入门学习》《牛客题库-Python篇》 &#x1f310;推荐《牛客网》——找工作神器|笔试题库|面试经…

【软考软件评测师】第三十章 操作系统(PV操作与死锁)

【软考软件评测师】第三十章 操作系统&#xff08;PV操作与死锁&#xff09; 第三十章 操作系统&#xff08;PV操作与死锁&#xff09;【软考软件评测师】第三十章 操作系统&#xff08;PV操作与死锁&#xff09;第一部分 知识点集锦1.PV操作1&#xff09;P操作的定义2&#xf…

win11的文件属性默认显示全部,Windows11右键菜单修改为Win10模式的方法(手把手详细操作)

win11的文件属性默认显示全部&#xff0c;Windows11右键菜单修改为Win10模式的方法&#xff08;手把手详细操作&#xff09; 文章目录win11的文件属性默认显示全部&#xff0c;Windows11右键菜单修改为Win10模式的方法&#xff08;手把手详细操作&#xff09;Tips 1 先以管理员…

Source Map知多少?Golang手写SourceMap转换过程

文章目录一、问题背景二、Source Map 简介基本格式应用场景三、Source Map 的工作原理四、Source Map 的转换过程代码示例总结本文从原理的角度入手对 Source Map 进行了较为深入的分析&#xff0c;并从业务需要的角度出发&#xff0c;手动编写根据 Source Map 映射编码前后代码…

SpringBoot集成Mybatis项目实操

本文为《从零打造项目》系列第三篇文章&#xff0c;首发于个人网站。 《从零打造项目》系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 前言 基于 orm-generate 项目可以实现项目模板代码&#xff0c;集成了三种 ORM 方式&#xff1a;Mybatis、M…

35m预应力简支梁桥毕业设计 课程设计-桥梁工程(计算书、8张CAD图)

35m预应力简支梁桥毕业设计 目 录 1、引言 1 2、桥型方案比选 2 2&#xff0e;1 桥梁设计原则 2 2.2方案一&#xff1a;25m预应力钢筋混凝土T梁桥 2 2.3方案二&#xff1a;25m预应力钢筋混凝土小箱梁 4 2.4桥墩方案比选 4 3、上部结构设计计算 5 3&#xff0e;1 设计资料及构造…

考研数据结构填空题整合

考研数据结构填空题整合 目录考研数据结构填空题整合一、ZYL组ZYL组一ZYL组二ZYL组三ZYL组四ZYL组五ZYL组六ZYL组七ZYL组八二、TJP组TJP组一TJP组二TJP组三三、LZH组LZH 组一LZH 组二LZH 组三LZH 组四LZH 组五LZH 组六LZH 组七四、LB组LB组一LB组二LB组三LB组四LB组五LB组六LB组…

FPGA实现精简版UDP通信,占资源很少但很稳定,提供2套工程源码

目录1.高端、中等和精简版UDP通信的选择2.精简版UDP通信实现方案3.工程1介绍及资源占用率和性能表现4.工程2介绍及资源占用率和性能表现5.上板调试验证6.福利&#xff1a;工程代码的获取1.高端、中等和精简版UDP通信的选择 FPGA实现UDP协议可难可易&#xff0c;具体根据项目需…