【网络是怎么连接的】第一章:浏览器生成消息

1.输入网址后发生了什么

在最开始,我们如果要访问一个网页,就需要在浏览器的输入框内输入网址。例如www.baidu.com之类的东西。但是实际上你按下回车后,我们输入的地方的内容就变了,它会变成https://www.baidu.com/ 这样的东西。这个东西实际上叫做URL。

我们可以发现URL是在我们输入的网址前边添加了”http”,”ftp:”,”file:“这样的东西。实际上URL开头的这些文字都表示了浏览器应该使用的访问方法。访问web服务器就应该用HTTP协议,访问FTP服务器就应该使用FTP协议等等。所以我们可以把”http:”,”ftp:”,”file:“理解为访问时候使用的协议类型。

2.浏览器解析URL

我们按下回车键后,浏览器的第一步工作就是讲URL进行解析。我们以访问web服务为例子:在这里插入图片描述
浏览器解析完毕URL后就会明白,哦,原来我要去这个web服务器下边的这个目录找一个文件,或者启动一个在这个目录下的程序。

3.生成HTTP请求消息

完成URL的解析后,浏览器确定了web服务器和文件名,接下来就要根据这些信息来生成HTTP请求消息了。HTTP协议规定这个请求消息拥有特定的格式,浏览器必须按照规定的格式来生成请求消息。

HTTP协议规定了客户端和服务端之间消息交互的内容和步骤,基本思路就是客户端需要向服务器发送请求消息,这个消息内容必须包括“对什么”和“进行怎样的操作”这两部分。
进行的操作例如获取信息(GET),传输数据(POST),替换服务端的文件(PUT),删除文件(DELETE)等等。

请求消息的格式大概长这样:
在这里插入图片描述
在这里插入图片描述
第一行存的是访问方法,访问具体的位置(如某个文件地址)。头部存的是一些浏览器的信息,比如当前浏览器使用的HTTP协议的版本等信息。实体存储的就是需要发过去的数据,比如我们填写了一个收货地址发过去,那实体里就存着我们的收获地址这类数据。

同样的,服务端也需要按照一定的格式发送响应消息,响应消息也有一定的格式要求。其中包括消息的开头必须有状态码(用于告知请求消息的执行结果是成功了还是失败了)。例如404就是其中一种状态码。

然后响应消息的格式大概长这样:

在这里插入图片描述

如果一切都访问成功,那么浏览器就能从响应消息中获取到需要显示的网页等信息,然后呈现在我们的屏幕上。一切就完成了。

顺便一提,我们刚才说的请求消息和响应消息其实是有名字的,叫做HTTP请求报文和HTTP响应报文。

4.向DNS服务器查询IP地址

浏览器可以生成HTTP报文,下一步本应该是浏览器委托操作系统将报文发出去给Web服务器。实际上此时浏览器还不知道要将消息发送给的服务器具体位置,即浏览器还不知道Web服务器的IP地址是多少。所以我们还需要多做一步:询问最近的DNS服务器“当前网址www.baidu.com”对应的IP地址是多少。

这一步需要调用操作系统的Socket库中的解析器才可以实现。解析器会向当前最近的DNS服务器发送查询请求,得到DNS服务器的回复后会将IP地址写入浏览器指定的内存地址中,这样浏览器就可以在解析完毕后从内存地址中取出IP地址了。

在这里插入图片描述

5.DNS服务器的查询过程

DNS服务器通过查服务器信息得知域名对应的地址,然后返回给客户端。DNS的工作流程大致如图

在这里插入图片描述

但是总不能所有的域名对应的IP信息都保存在一个DNS服务器中吧? 所以显而易见,这些IP信息是分布在多台DNS服务器中的。

那么如果浏览器向最近的DNS查询的时候,这个DNS服务器正好没有保存这个域名对应的IP信息怎么办? 答案是多台DNS服务器接力配合,才能完成查询。

那我要怎么找呢?互联网中有数万台DNS服务器,肯定不能一台一台挨个去找我要的IP地址吧? 答案是DNS服务器中的所有信息都是按照域名以分层次的结构来保存的。DNS中的域名都是用句点来分隔的,如“www.lab.galsscom.com”代表着许多层级,每个层级成为域。因此,com域下一层是glasscom域,然后是lab域。 这些有层次结构的域名信息会注册到DNS服务器中,每个域都作为一个整体处理。

下级域的DNS服务器会将自己的IP地址注册到它的上级域DNS服务器中,这样就可以通过上级DNS服务器,一层一层地顺藤摸瓜找到我们要查询的IP地址。

注意,com域,cn域这种域名还不是最顶层的域,在这之上还有一个根域DNS服务器,这个服务器的IP全球只有13个(当然物理节点不止13个)。所有的DNS服务器都保存这根域服务器的IP地址,这样,任意一个DNS服务器都可以访问到根域服务器。然后我们就可以通过根域服务器顺藤摸瓜,一路查询到任意一个域的DNS服务器。

一个DNS查询的具体过程:
在这里插入图片描述
当然不是每一次查询IP都得这么麻烦一个个去查询,DNS服务器中有缓存的信息。类似于内存管理中的快表。保存着最近查询的IP地址,这样就可以快速返回需要的信息。

6.委托操作系统的协议栈发送消息

得到需要访问的Web服务器的IP地址后,浏览器就可以委托操作系统的协议栈发送消息了。这个时候就会调用Socket库的一系列组件,在客户端与服务器之间建立一条通道,然后传输我们需要的数据。大致步骤如下,具体步骤我们将在第二章详细讲解

  1. 创建套接字
  2. 将管道连接到服务端的套接字上
  3. 收发数据
  4. 断开管道并删除套接字

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值