电脑是怎样上网的 (一) 消息产生 DNS

      最后更新:2022-07-21 08:26

      一、浏览器生成消息

      生成http请求消息

      不同的URL(Uniform Resource Locator)访问格式取决于访问的目标。
      虽然URL有不同的格式,但他们都有一个共同点,就是开头的文字,http、ftp、file,本文的这个部分指出浏览器应该使用的方法,例如,访问网页服务器时,使用HTTP协议,当访问FTP服务器时,使用FTP协议,因此,这个部分可以理解为访问时使用的协议类型。

      解析URL

      HTTP的基本思路

      HTTP定义服务器与客户端交互的内容和步骤。首先客户端将请求消息发送到服务器上,请求消息包含要做什么和如何去做。什么是URL,“什么样的操作”意味着网络服务器需要做什么样的操作,如下图。

      收到请求消息之后,Web服务器会对其中的内容进行解析,通过URI和方法来判断“对什么”“进行怎么样的操作”,并根据这些要求完成自己的工作,再将结果放在响应消息中。

      查询Web服务器到DNS服务器的IP地址

      IP的基础知识

      在生成HTTP消息后,我们需要委托操作系统向Web服务器发送消息。

      虽然浏览器可以分析网站并生成HTTP消息,但它没有能力向网络发送消息,因此它需要在操作系统帮助下向网络发布信息

      在此过程中,我们还需要查询服务器域的相应IP。 当委托一个操作系统发送消息时,必须提供通信对象的IP而不是其域名。

      IP地址的内部结构:

      子网加密是网络编号的全部部分1, 和主机编号的全部部分0.

      IP 地址的主机号

      1. 总数0:代表整个子网
      2. 所有1指向子网传输的所有设备,即广播

      域名和IP共同使用的原因

      TCP/IP网络由通信对象的IP地址定义,因此未知的IP对象不能向另一方发送消息。

      那么就会有一个疑问,那么直接在网址中使用IP不就行了吗?这种方式肯定是可以实现网站的访问的的,但是记住IP地址的一串数字的难度远大于记住网址的难度。

      一定有人再说一遍,既然如此,那么不使用IP,并直接使用名称来确定通信对象。这样的方法当然也可以实现网站的访问,但是IP地址是32位,才4字节,而如果是域名的话,最低就几十个字节,最大255个字符,所以这增加了路由器的负荷,数据的传输也需要更多的时间。

      所以我们使用的方案是用户使用名称,路由器使用IP。

      Socket库提供查询IP地址的功能,DNS(Domain Name System)

      对于DNS服务器,我们的电脑必须有相应的DNS客户端,与 DNS 客户端相对应的部分称为 DNS 分析器。通过 DNS 查询 IP 地址的过程称为域名分析。因此负责解析的这一操作也就叫做解析器(resolver)。

      Socket库是一个用于调用网络函数的程序组件。

      通过分析器向DNS服务器发送查询

      呼叫DNS分析器后,分析器将查询消息发送到DNS服务器,然后DNS服务器返回响应消息。 响应消息包含请求的IP地址,存储在浏览器指定的内存地址。

      解析器内部原理

      当控制流转移到分析器时,分析器生成向 DNS 服务器发送的查询消息。这个过程类似于浏览器生成HTTP请求消息的进程,用于发送到Web服务器,分析器将基于DNS规范,生成一个表达式 “ 请告诉我公司IP地址的ww.Lab.Glasscom.data,然后发送到 DNS 服务器(图1).12 3)。发送消息这个操作不是由分析器本身执行的,相反, 你必须委托操作系统内部的协议堆栈执行.这是因为,就像浏览器一样,分析器本身没有使用网络来接收和传输数据的功能。分析器呼叫协议堆之后,控制过程将再次转移,协议堆栈执行发送消息的操作,然后通过网络卡向DNS服务器发送消息。

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

      世界各地的DNS服务器的巨大连接性

      DNS服务器的基本工作

      DNS服务器的基本任务是从客户端接收消息,然后根据消息内容返回响应,从客户端查询的信息是:

      域名

      服务器的名称,邮件服务器(后面的 @ 电子邮件地址的一部分)。

      Class

      在 DNS 计划的早期设计中,还考虑了DNS在互联网以外的其他网络上的应用。类是用来识别网络的信息。不过,如今除了互联网之外,没有其他网络,因此, 类的值总是互联网的IN.

      记录类型

      表示域名对应何种类型的记录。例如,当类型为 A 时,表示域名对应的是 IP 地址;当类型为 MX 时,表示域名对应的是邮件服务器。对于不同的记录类型,服务器向客户端返回的信息也会不同。

      DNS服务器在域名和IP地址的比较表中搜索相应的记录,并返回IP地址。

      域名的层次结构

      DNS中的域名由句子分开,例如,ww.Lab.Glasscom.com,这个点代表了不同层次之间的界限,就像公司内部的组织结构没有部门和部门等等。只是一个通道。在域名中,越靠近右边,层越高,例如,ww.Lab.Glasscom.如果域名com符合公司的组织结构,大概就是“com 事业集团 glasscom 部 lab 科的www”这样。其中,一个层的同等部分叫做域。因此,网络网域的下层是玻璃网域,下一步是实验室,还有这个名字:ww。

      这个层次级域名信息将被注册在DNS服务器上,每个区域都是整体处理的。换句话说就是,在DNS服务器中存储一个域名信息,您不能分离一个域名以存储它在多个DNS服务器上。不过,DNS服务器与域名之间的关系也不总是一样。DNS服务器也可以存储多个信息域。为了避免事情过于复杂,这里我们假设一个DNS服务器只存储一个信息域,下面的解释也基于这个前提。于是,DNS服务器与域名具有相同的层次结构,每个域的信息存储在相应的层级DNS服务器中。例如,这里有一家公司。然后有一个相应的DNS服务器,它存储公司所有Web服务器和邮件服务器的信息。

      找到相应的DNS服务器并获取IP地址

      网上有成千上万的DNS服务器,我相信你不能逐个找到。我们可以采取以下的办法。首先,负责管理下层域的 DNS 服务器的 IP 地址 笔记本将放在其上层 DNS 服务器中,然后上层 DNS 服务器的 IP 地址被注册到上层 DNS 服务器上,以此类推。也就是说,负责管理实验室.Glasscom.在com域名中的DNS服务器的IP地址必须注册为 glasscom.incom域名的DNS服务器,而 glasscom.com 域的 DNS 服务器的 IP 地址又需要注册到 com域的 DNS 服务器中。这样,我们可以通过顶部 DNS 服务器查询下层 DNS 服务器的 IP 地址,也可以向较低级别的DNS服务器发送查询请求。

      在前面的讲解中,似乎是com,jp这些域名(称为顶端域名)位于顶端,他们负责存储下游DNS服务器的信息,但实际上并非如此。在互联网 中,com和jp的顶部也有一个层次域,称为根域。根域没有自己的名称,如com或jp,因此,一般在写域名时,它常常被忽略,如果要明确定义根域,如果图像为ww.Lab.Glasscom.com,那么在域名末尾添加一个句子,最后一个点代表了根部。不过,通常你不会写最后一句话,因此,根域的存在往往被忽视,但根源毕竟是真实的。根 DNS 服务器存储 com 、 jp 和其它 DNS 服务器的信息.因为顶部的DNS服务器存储了底部的DNS服务器的所有信息,所以我们可以从根域开始,一直到下游找到任何域的DNS服务器。

      此外,还有其他工作要做,也就是说,根 DNS 服务器的信息存储在互联网上的所有 DNS 服务器中。这样一来,任何 DNS 服务器都可以由根 DNS 服务器找到和访问。因此,客户端只能找到任何DNS服务器,你可以通过它找到根 DNS服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。给根 DNS 服务器分配的 IP 地址仅在全世界有13个,这些地址很少发生变化,因此在所有DNS服务器上保存这些地址也不是一个问题。实际上,与根 DNS 服务器有关的信息已经包含在 DNS 服务器程序的配置文件中,所以只要安装DNS服务器程序,这个信息是自动配置的。
      如图1所示,如第16段所示,客户端首先会访问最近的一台 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址),假设我们要查询 www.lab.glasscom.com 这台 Web 服务器的相关信息(图 1.16 ①)。因为最新的DNS服务器不存储ww.Lab.Glasscom.域名com的相应信息,因此,我们需要从顶部开始看下。最新的DNS服务器存储了根 DNS服务器的信息,因此,它将客户端的查询消息转移到根 DNS 服务器(图1).16 2)。根域服务器也是ww.Lab.Glasscom.thedomainnamecom,但是根据域名结构可以判断域名属于kom域名,因此,根域 DNS服务器将返回它管理的COM域中 DNS服务器的IP地址,虽然我不知道你正在寻找的域名的地址,但是你可以到电脑区域去问问题。接下来,最近的DNS服务器也发送查询消息到COM域的DNS服务器(图1).163)。没有ww在com域名中。Lab.Glasscom。 关于com域名的信息,和刚才一样,com 域服务器会返回它下面的 glasscom.com域的 DNS 服务器的 IP 地址。以此类推,只是重复前面的步骤,就可以顺藤摸瓜找到目标 DNS 服务器(图 1.16 ⑤),只要向目标DNS服务器发送查询消息,要得到我们所需要的答案,那是ww.Lab.Glasscom.com.com的IP地址。收到客户查询消息后,DNS服务器将根据以前的方法查询IP地址,返回到客户端(图1).16 6)。这样,客户端知道Web服务器的IP地址,也就能够对其进行访问了(图 1.16 ⑦)

      将消息发送给托管协议堆栈

      数据收发操作概览

      知道IP地址后,您可以将操作系统内部的协议堆放在目标IP地址上,也就是说,我们想访问的网络服务器发送了一个消息。要发送给 Web 服务器的 HTTP 消息是一种数字信息(digitaldata),因此,也可以说委托协议堆发送数字信息。接收和发送数字信息的操作并不局限于浏览器,它适用于所有使用网络的应用程序。因此,这个过程不仅适用于网络,它适用于任何网络应用程序。

      上面的图1.17显示了使用索克库接收和发送数据的操作过程。简单来说,两个接收和传输数据的计算机之间有一个数据通道.数据沿着这个渠道流入,最终到达目的地。我们可以把数据渠道看作一个管道,从一个端发送数据到管道,数据将到达管道的另一端,然后被删除。数据可以从任何端发送到管道中,数据的流动是双向的。不过,这并不是说在现实中真的有这样的管道,它只是帮助人们了解数据传输业务的整体情况。

      这是接收和传输数据的一般概念。但还有另外一个非常重要的事情。光从图上来看,这个管道似乎从一开始就存在着,实际上并不是这样,在收到和发送数据之前,双方必须首先建设这个管道。建立管道的关键是管道两端的数据输入和输出。这些输入称为插座。首先我们需要制造一个插座,然后接头连接成管道.实际过程如下。首先,服务器端首先创建插座,然后等待客户端将管道连接到插座上。当服务器进入等待状态时,客户端可以连接到管道.具体来说,客户端也将首先创建一个插座,然后从插座延伸管道,最后,管道连接到索克的服务器端。当两个插座连接时,通信准备就完成了。接下来,正如我们刚才说的那样,你只需要把数据发送到接口来接收数据。

      让我们再看看接收和发送数据操作的结尾。当所有数据被发送出去时,连接的管道将被切断.当连接时,由客户端启动管道,A 可以由客户端或服务器在切断时启动。其中一方断开后,另一边也会断开,当管道断开后,套接字也会被删除。到此为止,通信操作就结束了。综上所述,数据接收和传输的操作分为几个阶段。可以 总结 如下 。

      (1)创建插座(创建插座阶段)
      (二)将管道连接到服务器端插座(连接阶段)
      (三)接收和发送数据(通讯阶段)
      (四)切断管道并拆卸插座(切断阶段)

      创建套接字阶段

      套接字创建完成后,协议堆栈返回一个描述性,应用程序将存储接收的描述在内存中.描述符用于识别不同的字符集,大家可以理解如下。我们现在只关注浏览器如何访问Web服务器,但事实上,计算机可以同时通信多个数据,例如,你可以打开两个浏览器窗口,同时访问两个Web服务器。这时,同时进行两个数据检索操作,也需要创建两个不同的插座。多个套接字,在这样的情况下,我们需要一种识别特定类型的字符的方法,这种方法是描述性的.我们可以理解描述符为给一系列字符串分配的代码。也许仅仅说这个数字还不够,你可以想象一下行李在旅馆里储存的场景,酒店服务员会给你一张号码卡,向军人展示号码牌,你可以拿回你寄的行李,描述性原则类似于此。当创建套接字后,我们可以使用这个语法执行输入和输出操作.这时,只要我们给出一个描述,协议堆可以确定我们想要使用哪些接口连接或发送数据。

      连接阶段:连接管道

      这里的要点是当调用 connect 时,需要指定描述符、服务器 IP 地址和端口号这 3 个参数(图 1.18 ②)

      第 1 个参数,即描述符,它是创建索克时从协议堆栈返回的描述符。连接通知应用程序指定的描述符的协议堆栈,然后,协议堆栈根据这个描述者判断要使用哪个接口连接到服务器端的接口,并执行连接操作。

      第 2 个参数,例如服务器IP地址,这是我们想通过 DNS 服务器查询访问服务器的IP地址。DNS服务器的一部分已经被提及,在进行数据收集和传输作业时,双方必须了解对方的IP地址,并通知堆栈。这个参数是IP地址。

      第 3个参数,即端口号,这需要稍微解释一下。可能大家会觉得,IP地址就像电话号码,只有知道电话号码,才能与对方联系 吗?其实,网络通信和电话仍然不同,让我们先看看IP地址能做什么。IP地址是分配给网络中的每个计算机的B号。因此,只要你知道IP地址,我们可以识别网络上的计算机.但是,连接操作的对象是特定的插座.因此必须要识别到具体的套接字才行,只有使用IP地址才能做到这一点。我们打电话的时候,也需要通过“请帮助我找到某人”或“请帮助我找到某人”找到具体的联系人。这就是终端代码的运作方式。当IP地址和端口号同时指定时,在特定计算机上,你可以明确地识别一个特定的字符集。

      如果说描述符是用来在一台计算机内部识别套接字的机制,那么端口号就是用来让通信的另一方能够识别出套接字的机制 。

      由于必须通过端口号确定连接对象的接口,那么我应该使用多少港口?在网站上似乎没有一个港口号码,不能像IP地址那样问 DNS 服务器.我找了半个小时,没有线索,这可怎么办?其实,这件事也不那么神奇。服务器上使用的端口号根据应用程序类型预定义,仅此而已。例如,网络是80 port,电子邮件地址是25号码头。关于端口号,在第六章中,我们将探讨服务器的内部工作。这里你只需要记住:只要指定一个预定义的端口号码,您可以连接到相应的服务器程序的接口。也就是说,当访问Web服务器时,浏览器使用80端口,这是已经规定好的。也许还有另一个问题,因为确定连接对象的接口需要使用端口号,然后服务器也需要知道客户端的插座号码。你如何解决这个问题?事情是这样的,首先,当客户端创建一个接口时,协议堆栈将任意的端口编号分配给这个插座.接下来,当协议堆栈执行连接操作时,此随机分配的端口号码将通知服务器。说了这么多,总而言之,当你打电话连接时,协议堆栈将执行连接操作.当连接成功后,协议堆栈将其他IP地址和端口号码等信息存储在接口中,这样我们就可以开始接收数据。

      描述: 应用程序识别一个接口的机制.

      IP地址和端口号码:客户端和服务器之间用来识别彼此的接口的机制。

      通信阶段:传递消息

      当插座连接时,剩下的是很容易的。只要把数据发送到插座上,数据将发送给对方的密码。当然,应用程序不能直接控制插座,因此, 这个操作仍然通过 Socket 库托管的协议堆栈进行.此操作需要使用写程序组件,具体过程如下。首先,应用程序需要数据准备在内存中发送.用户输入URL生成的HTTP请求消息是我们要发送的数据。接下来,打电话写信时,你需要指定描述符并发送数据(图1).3),然后协议堆发送数据到服务器。

      由于连接通信对象的关联信息已经存储在接口中,所以只要指定描述符的插座,你可以识别通讯对象,并向其发送数据。接着,发送数据将通过网络到达我们想要访问的服务器。接下来,服务器执行接收操作,分析接收的数据,并执行相应的操作,向客户端返回响应消息。

      中断阶段:接收和发送数据的结束

      当浏览器接收数据时,接收和发送数据的过程已经结束。接下来,我们需要将 Socket 库的关闭程序组件调到故障阶段(图1).184)。最终,接口中的连接之间的管道将被切断,索克本身也将被删除。

      断开的过程如下。使用Web的HTTP协议,当Web服务器发送响应消息时,应该积极执行中断操作,因此,Web服务器首先会接近调用以切断连接。将操作与客户端切断后,客户端的插座也将进入中断阶段。接下来,当浏览器呼叫读取执行接收数据操作时,read通知浏览器数据已经收到和发送,连接已经断开。浏览器得知后,也可以近接来进入中断阶段。

      这就是HTTP的运作方式。HTTP协议将HTML文档和图像视为单独的对象,每获取一次数据,执行连接、发送请求消息、接收响应消息、切断连接的过程。因此,如果网页里有许多图片,你必须重复许多连接, 接收数据, 并切断操作.同样的服务器,重复的连接和断连显然是非常无效的,因此,它后来被设计为在一个连接中接收多个请求和响应。在HTTP版本1中,可以使用此方法在在这种情况下,所有数据请求完成后,浏览器激活切断操作.

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类