计算机网络系列之浏览器对URL处理,小白看完吊打面试官

从这篇开始,就开始了计算机网络的学习,从面试时最常见的一道面试题开始,“在浏览器输入一个网址之后发生了什么?”

一、序言

1.1什么是互联网

说到计算机网络,先来认识一下天天说的互联网是什么。
互联网就是计算机之间通过路由器、交换机、集线器等相互之间连接在一起组成一个网络,路由器将网络与网络互相连接,最后组成了整个互联网。
在这里插入图片描述
在这里插入图片描述
网络把许多计算机连接在一起,许多网络通过路由器连接在一起作为互联网。

1.2客户-服务器模式

计算机之间的网络通信大多使用客户-服务器模式的方式进行。一个应用进程想要获取另一个计算机的某些数据,此时这个应用进程所在的计算机就是客户端,存储数据的计算机就是服务器。

二、浏览器在收到输入的网址后,做了什么?

2.1网址是什么?

网址其实就是计算机网络里的URL,就是常常在浏览器见到以HTTP://开头的东西,但其实不只是HTTP开头,还有FTP等文件传输。我们这里以HTTP为例。来看上一篇文章的URL为https://blog.csdn.net/HIT_zhanmusi/article/details/105623645
来分析一下这个URL的组成https就是它使用的协议,//之后就是主机名,也叫域名,/之后的所以就是这个主机的文件路径,最后是文件名。
在这里插入图片描述
域名就是计算机网络中的对于计算机或者路由器的命名,域名按照层级划分为顶级域名、二级域名、三级域名等。每个域名都由名称组成,域名层级之间使用.来分隔。比如www.baidu.com中,com是顶级域名,baidu是二级域名,www是三级域名。
对于URL可能只有域名或者只有文件夹名的情况,http://www.baidu.com就是只有域名的情况,这种情况下,对于服务器来说是有默认文件供你访问的,不用担心。
在知道网址也就是URL是什么之后,浏览器就可以对它进行解析了,按照上面说的组成部分,根据HTTP协议的要求,把各个部分添加到HTTP的请求报文中。

2.2HTTP是什么?

HTTP就是web客户端与服务器之间通信约定的一种规则。HTTP分为请求报文和响应报文。请求报文就是客户端告诉服务器“我要对你的哪个数据做什么”,响应报文就是服务器告诉客户端“我按照你的要求做了什么,成功了还是失败了”。
请求报文的格式就是:

方法【空格】URL【空格】协议版本【换行】
<字段名>:<字段值>

主体消息

其中方法就是客户端想要服务器端做什么,URL就是对服务器的哪个地方做什么。
常用的方法有

方法 功能
HEAD 读取URL的
GET 从服务器端获取URL的数据
POST 给服务器添加信息
PUT 在URL指明的位置存储一个文件
DELETE 删除URL位置上的文件

响应报文的格式如下:

版本【空格】状态码【空格】短语【换行】
<字段名>:<字段值>

主体消息

常用的状态码有200,正确处理返回需要的信息;我们常见的404,没有找到所需要的信息等。

2.3浏览器对URL的处理

在浏览器输入URL后,根据前面的介绍,把URL按照需要分解为各个部分,填充到HTTP的请求报文之中,然后发送出去,得到服务器返回来的响应报文,按照前面的响应报文格式进行解析,之后就会可以将内容显示在屏幕上了。
在这里插入图片描述
当然这只是因为计算机网络下层的一个封装,让我们感觉起来是客户端和服务器端的直接相连。
如果在得到的响应报文中还有其他的URL(比如一个网页既有文本,又有图片的情况),则浏览器还需要重复解析,发送请求报文,解析响应报文的过程直到把所有数据都获得下来,之后在浏览器的界面显示。
这就是宏观上浏览器在收到URL所做的事情。整个过程细化起来如下图所示:
在这里插入图片描述

三、利用DNS获取web服务器的IP地址

3.1 IP地址是什么?

互联网是由计算机通过集线器、交换机、路由器组合到一起形成子网,子网通过路由器相互连接构成大的网络,为了能够在互联网中找到某一个计算机的位置,所以我们需要给计算机命名,之前介绍过给计算机取了域名,但是域名是可以方便人来记忆的,对于计算机的处理就相当困难了,因为域名的长度不确定等等原因。所以提出了IP地址的概念,用一个32位的二进制数来表示一个计算机。在表示上采用了点分十进制,比如常见的192.168.1.1,每八位在一起转为十进制,共3个点分隔4个十进制数,一共32位二进制数。
前面说到子网以及子网的每一个计算机,为了描述子网和每个子网的计算机,又提出了子网和主机的概念,类似于谁家在“xx街道xx号”。比如前面的IP地址,可以说192.168.1作为子网号而最后的1是主机号。那么对于一个32位的IP地址如何可以知道哪些位是子网,哪些位是主机号呢?用一个同样32位的二进制数来表示,这个二进制数前面一部分为1,后面一部分为0,1就是对应的IP地址的位为子网号,0对应的就是主机号,这个二进制数叫做子网掩码。

IP地址 子网掩码 子网号 主机号
192.168.1.1 255.255.255.0 192.168.1 1

对于主机号部分全为0,和全为1两个IP地址具有特殊的意义。比如上面的举例192.168.1.0代表的是整个子网,192.168.1.255代表的是对整个子网进行广播。

所以在浏览器解析完URL和制作好HTTP请求报文之后,就需要获得这个URL中域名所在Web服务器的IP地址了。

3.2从DNS服务器获得IP地址

IP地址与域名的转换是通过DNS服务得到的,DNS服务其实也是从服务器取得数据,它负责返回域名所对应的IP地址。为了实现这个查询功能,DNS服务器也是与域名相匹配的,分为根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器。每一个层级的域名服务器负责相应的域名解析服务。整个结构如图所示:
在这里插入图片描述
当一台计算机想要查询一个域名的IP地址时,首先向本地DNS服务器查询,如果有,则返回给计算机。如果本地DNS服务器没有这个域名的IP地址,那么这个时候本地DNS服务器就会化身DNS客户端了,因为它要让根DNS服务器来给它提供服务了,它需要请求服务。根DNS服务器查询到这个域名所属的顶级DNS服务器,将它返回给本地DNS服务器,本地DNS服务器此时在向这个顶级DNS服务器查询,顶级DNS服务器要么可以确定这个域名的IP地址,返回给本地DNS服务器这个域名的IP地址,要么继续返回下一个层级的服务器的地址,本地NDS服务器继续去查询这个服务器,如此迭代,最终得到域名的IP地址。然后返回给本地的计算机。执行的顺序如下图的标号顺序所示。
在这里插入图片描述

为了提高DNS查询的效率,一般DNS服务器都带有缓存功能,将查询过的域名与IP的关系保存在自己本地,这样再有相同的查询的时候,直接返回了,而不需要进行在去访问其他的DNS服务器。但这种缓存是有时间限制的,因为域名与IP地址可能发生变化。
就这样浏览器从DNS服务器中获得了域名所代表web服务器的IP地址了。接下来就可以通过TCP协议,IP协议适配器将HTTP的请求报文发送给服务器了。

四、套接字概述

在浏览器得到IP地址后,就会调用套接字,其实在获得IP地址的时候也使用了套接字。套接字就是操作系统为应用程序编写网络通信功能提供的库函数,对于C语言向屏幕输出,操作系统提供了printf的函数来实现,这里也一样。提供了套接字实现网路编程功能。包括socket、bind、listen、connect、accept、send、close等。相当于套接字把TCP协议、IP协议、适配器等底层细节封装了起来(2.3节那个细化图)。调用这些套接字,就会发生系统调用,进入操作系统的内核之中,完成一些列网络协议的功能,详细的就是操作系统的知识了,这里不再详细说明。只要知道套接字其实就是把复杂的协议封装起来就好。

五、总结

这样,我们就介绍完了,输入一个URL之后,浏览器所完成的第一部分功能,解析URL,制作HTTP请求响应。接下来就会通过套接字进入系统的内核,借助系统完成发送前的其他准备,包括TCP报文段的生成,IP数据报的生成,MAC地址的生成等等,请听下回分解。

回复计算机网络,可以获得免费获得电子版。让我们一起快乐的玩编程。
在这里插入图片描述

原创文章 31 获赞 8 访问量 2311

猜你喜欢

转载自blog.csdn.net/HIT_zhanmusi/article/details/105656630
今日推荐