1.2向DNS服务器查询Web服务器的IP地址
时间:2023-02-12 07:21:01 | 来源:建站知识
时间:2023-02-12 07:21:01 来源:建站知识
本节和前一节的关系:在生成HTTP消息之后,下一个步骤就是根据域名查询IP地址,然后根据IP地址讲消息发送出去
1.简介IP地址的基本知识
什么是IP地址和子网掩码网络中,所有的设备都会被分配一个地址。这个地址相当于现实中某条路上的“××号××室”。“号”对应的号码称为网络号,“室”对应的号码称为主机号,这个地址的整体称为IP地址。
我们知道IP地址由两部分组成——网络号和主机号,这两部分共用32位比特位,但相对大小是不固定的,于是就需要一种方式来界定它们之间的分界,而这种分界方式就是通过添加一个叫做子网掩码的附加信息来实现的。
具体规则如下:
子网掩码为1的部分表示网络号,子网掩码为0的部分表示主机号。
两种比较特殊的情况主机号部分的比特位全部为0或者全部为1时代表两种特殊的含义。
主机号部分全部为0代表整个子网而不是子网中的某台设备。
主机号部分全部为1代表向子网上所有设备发送包,即广播。
IP地址的作用请求消息发送到目的地需要域名对应的IP地址,通过IP地址我们可以判断出访问对象服务器的位置,从而将消息发送到服务器。
消息从客户端到达服务器端的过程客户端——>客户端子网中集线器——>离发送者最近的路由器——>集线器——>中间路由器——很多个中间子网——>服务器,中间过程判断发往哪一个节点时的依据就是IP地址。
域名和IP地址并用的原因对人来说,使用域名更加友好,IP地址不好记忆和区别。
对于计算机来说,使用域名,占用了更多的内存,增加了机器的负担,使运行效率降低。
最终,我们让人来使用名称,让路由器来使用IP地址。为了填补两者之间的障碍,需要有一个机制能够完成IP地址和域名的相互转换,这样就能够在人和机器双方都不做出牺牲的前提下完美地解决问题。这个机制就是DNS。
2.查询DNS服务器的过程
第一步:将查询工作委托给操作系统浏览器本身不具备发送消息到网络中的功能,这一功能需要委托操作系统来实现。发送消息的功能对所有应用程序来说都是共通的,所以让操作系统来实现这个功能比较合理。
操作系统是如何完成委托的呢?
向DNS服务器发送查询消息,并接收服务器返回的响应消息,那么计算机上一定就有DNS客户端,这个DNS客户端我们称之为DNS解析器,简称解析器。
解析器:负责执行域名解析工作的工具就叫解析器。Socket库:用于调用网络功能的程序组件集合。解析器的使用方法解析器的用法非常简单。Socket库中的程序都是标准组件,只要从应用程序中进行调用就可以了,该函数会自动完成相应的工作
具体过程如下:
调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会返回响应消息。响应消息中包含查询到的IP地址,解析器会取出IP地址,并将其写入浏览器指定的内存地址中。
解析器的内部原理1.程序执行到解析器函数那里,控制流程转移到解析器。
2.然后解析器按照DNS规格(特定的协议)生成请求消息,该过程和客户端根据HTTP协议生成请求消息的过程类似。
3.之后将请求消息转给协议栈(和浏览器类似,本身不具有收发消息的功能,而是通过委托实现)
4.控制流程转移到协议栈,协议栈执行发送消息操作,通过网卡将消息发送给DNS服务器。
5.DNS服务器根据域名查询到IP地址,通过响应消息发回客户端
6.再经过协议栈被传递给解析器,
7.解析器读取出消息取出IP地址,并将IP地址传递给应用程序
8.解析器完成工作,控制流程回到了应用程序
以上完,这就是具体过程
补充:细心的你会发现,客户端程序是怎么找到DNS服务器的呢,在网络中寻找目标不是需要IP地址吗。答案是,DNS服务器的IP地址已经作为作为TCP/IP的一个设置项目事先设置好的,不需要再去查询了。
小结:作者是如何来讲解的1.作者不直接讲浏览器如何通过DNS服务器查询IP地址,也不仅仅只是讲解IP地址在当前”如何通过DNS服务器查询IP地址“这个主题下的的作用和意义,而是比较完整的阐释了IP这个网络概念各方面的內容,比如它的解释规则,它的作用,它和别的网络概念的关联(域名),从整体上帮助我们理解了IP这个概念的意义,为后面讲查询做铺垫。
2.作者利用
隐藏的逻辑线,巧妙顺理成章的引出了DNS查询。在讲到IP地址和域名都是作为网络中设备地址标识的时候,引出了这两者之间需要一个转换机制的问题,而这个机制就是DNS。
本来在讲IP地址的內容(IP和别的概念的关联),突然话锋一转直接来到了DNS,很自然,毫无突兀之感。这是我写作过程中欠缺的。
感觉这里面是
一条技巧,当多个知识点概念开始连接的时候,大多情况下会自然而然地引出另外一些知识。所以我们在写作的时候,先讲清楚概念本身,再讲概念之间的关联,然后顺理成章引出新的点。妙啊妙啊。
3.在讲解DNS这个概念的时候,作者先补充了一些预备知识,Socket库,库,流程控制的概念,然后简要描述了解释器向DNS查询IP地址的整体流程,最后抽丝剥茧分析原理。(这是第一层思路理解)
预备知识——>整体概要——>逐条分析 这是我目前写作常用的逻辑
作者讲解的思路也可以这么来理解,直接进入问题,
线性思维逐层推导,当遇到新的知识时,就先暂停主线的推导过程,把新知识单独拿出来讲明白了,再回到主线继续推导。(第二层思路)
特别注意,这种方式操作的难点在于,要暂时的可以不把问题讲明白,省略那些不好理解或者不完整的方面,把整体框架先搭好了,然后后面再补充。
我在之前的写作中,总是想在第一时间把问题全部聊明白,结果使得文章主题不集中,增大了文章的阅读难度。
(因为我所谓把一个问题聊明白的通常做法是罗列出所有可能的状况)
总结技巧:先搭框架,再理细节
先解决主要矛盾,暂时忽视掉次要矛盾
计算机基本原理
4.分层工作,计算机的基本原理之一:
计算机的内部结构就是这样一层一层的。也就是说,很多程序组成不同的层次,彼此之间分工协作。当接到上层委派的操作时,本层的程序并不会完成所有的工作,而是会完成一部分工作,再将剩下的部分委派到下层来完成。