计算机网络之当输入网址后会发生什么


前言

我们都知道,每次打开浏览器输入网址,如www.baidu.com,这时会进入百度页面。这中间发生了怎样的过程:简单来说当你发送网址,给服务器,服务器返回响应,把对应页面返回给你的机器。那么在你输入网址,点Enter后发生了什么,其中在这一瞬间发生了两个过程:
一,生成HTTP请求消息:
二,向DNS解析得到对应的IP。
接下来将会详细解释这两个过程所设计的知识点。


提示:以下是本篇文章正文内容,下面案例可供参考

一、生成HTTP请求消息

对于生成HTTP请求消息,需要了解到www.baidu.com这个URL是不完整的,完整的URL应该带上相应的协议为https://www.baidu.com,其中除了https这种协议外还有ftp:,file:,new: 等,www.baidu.com是百度公司服务器的名称,后面通过加/的方式来进入这个服务器相应的文件夹或者文件。
了解到了URL的基本格式后,浏览器会对我们输入的URL进行解析生成请求消息,以HTTP协议为例,如图所示,通过//来断开协议与服务器,再利用/来分开服务器名称,目录名称和文件名称,从而生成一个索引。
在这里插入图片描述
在解析完成后浏览器会生成请求消息,实际上请求消息是有着严格的规定的,如下所示。
在这里插入图片描述
接下来将会对请求消息的各个部分进行解释。
首先第一行有个请求方法,在HTTP协议中,具体罗列如下,其中常用的方法有get和post方法,在我们输入网址得到的一般为get方法,在html中的超级链接提交的方法一般为post或者get方法。
在这里插入图片描述
URI实际上是服务器名称,例如www.baidu.com。相应的后面的/dir/…/file.html也有个名称为CGI。
第二行开始为消息头。尽管通过第一行我们就可以大致理解请求的内容,但有些情况下还需要一些额外的详细信息,而消息头的功能就是用来存放这些信息。消息头的规格中定义了很多项目,如日期、客户端支持的数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等。这些项目表示的都是非常细节的信息,因此要想准确理解这些信息的意思,就需要对 HTTP 协议有非常深入的了解。表中列举了主要的头字段供大家参考。消息头中的内容随着浏览器类型、版本号、设置等的不同而不同,大多数情况下消息头的长度为几行到十几行不等。
在这里插入图片描述
写完消息头之后,还需要添加一个完全没有内容的空行,然后写上需要发送的数据。这一部分称为消息体,也就是消息的主体。不过,在使用 GET 方法的情况下,仅凭方法和 URI,Web 服务器就能够判断需要进行怎样的操作,因此消息体中不需要填写任何数据。消息体结束之后,整个消息也就结束了。
尽管浏览器能够解析网址并生成 HTTP 消息,但它本身并不具备将消息发送到网络中的功能,因此这一功能需要委托操作系统来实现。在进行这一操作时,我们还有一个工作需要完成,那就是查询网址中服务器域名对应的 IP 地址。在委托操作系统发送消息时,必须要提供的不是通信对象的域名,而是它的 IP 地址。因此,在生成 HTTP 消息之后,下一个步骤就是根据域名查询 IP 地址。
首先我们需要理解IP地址的概念,每个设备都有一个地址,相当于某个小区某单元某门牌号。如果单元代表一个子网的话,每个门牌号对应的房间就是一台计算机,这就是这个计算机的地址,也就是IP地址。

二、DNS解析

了解到了IP地址的含义后需要知道DNS是怎样将域名转化为IP的地址的,这里要用到一个Socker套接字的概念了。
向 DNS 服务器发出查询,也就是向 DNS 服务器发送查询消息,接收服务器返回的响应消息。换句话说,对于 DNS 服务器,我们的计算机上一定有相应的 DNS 客户端,而相当于 DNS 客户端的部分称为 DNS 解析器,或者简称解析器。通过 DNS 查询 IP 地址的操作称为域名解析,因此负责执行解析(resolution)这一操作的就叫解析器(resolver)了。解析器实际上是一段程序,它包含在操作系统的 Socket 库中。
解析器的用法非常简单。Socket 库中的程序都是标准组件,只要从应用程序中进行调用就可以了。具体来说,在编写浏览器等应用程序的时候,只要像图这样写上解析器的程序称“gethostbyname”以及 Web服务器的域名“www.lab.glasscom.com”就可以了,这样就完成了对解析器的调用
在这里插入图片描述
在前面的讲解中,我们假设要查询的信息已经保存在 DNS 服务器内部的记录中了。如果是在像公司内部网络这样 Web 和邮件服务器数量有限的环境中,所有的信息都可以保存在一台 DNS 服务器中,其工作方式也就完全符合我们前面讲解的内容。然而,互联网中存在着不计其数的服务器,将这些服务器的信息全部保存在一台 DNS 服务器中是不可能的,因此一定会出现在 DNS 服务器中找不到要查询的信息的情况。下面来看一看此时 DNS 服务器是如何工作的。
在这里插入图片描述
客户端首先会访问最近的一台 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址),假设我们要查询www.lab.glasscom.com 这台 Web 服务器的相关信息。由于最近的 DNS 服务器中没有存放www.lab.glasscom.com这一域名对应的信息,所以我们需要从顶层开始向下查找。最近的 DNS 服务器中保存了根域 DNS 服务器的信息,因此它会将来自客户端的查询消息转发给根域DNS 服务器。根域服务器中也没有 www.lab.glasscom.com 这个域名,但根据域名结构可以判断这个域名属于 com 域,因此根域 DNS 服务器会返回它所管理的 com 域中的 DNS 服务器的 IP 地址,意思是“虽然我不知道你要查的那个域名的地址,但你可以去 com 域问问看”。接下来,最近的 DNS 服务器又会向 com 域的 DNS 服务器发送查询消息。com 域中也没有 www.lab.glasscom.com 这个域名的信息,和刚才一样,com 域服务器会返回它下面的 glasscom.com 域的 DNS 服务器的 IP 地址。以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标 DNS 服务器,只要向目标 DNS 服务器发送查询消息,就能够得到我们需要的答案,也就是www.lab.glasscom.com 的 IP 地址。最后发送给客户机即可。

总结

本文对输入URL浏览器第一步处理的过程进行了详细的解释,包括生成请求消息和DNS解析得到IP地址,但对于网络连接来说只是第一步。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值