从浏览器输入URl到显示出页面的过程

       我们现在上网过程中,常常会在浏览器中输入各种各样的URL或者网址,然后浏览器就会渲染出对应的网页。这里到底是怎么实现的呢,中间包含的过程又有哪些呢。让我们来一一分析。

       首先,我们可以大致分为以下几步。

                      1、要解析域名转换成对应的公网IP;

                      2、根据公网IP通过庞大的互联网路由到对应的服务器上;

                      3、建立可靠的TCP数据连接;

                      4、服务器对该URL中的请求进行处理分发,返回一个html;

                      5、浏览器或者客户端对该HTML进行渲染;

       接下来让我逐个逐步的对以上五步进行分析:

1、解析域名

       首先,我们在浏览器中输入的其实是个域名,并不是一个可以再互联网中可以路由的公网IP地址,要将类似于Https://www.baidu.com这样的域名解析为Ip地址,就需要依靠DNS服务了,DNS服务可以将该域名解析为IP地址。具体是通过DNS服务器提供的服务来完成的,DNS服务器上维护了一张映射表,key为域名,value为Ip地址。由于庞大的互联网对于解析域名的需求十分庞大,所以不可能只部署了一台域名解析服务器。现在的互联网是采用了树型的分层的分布式域名解析服务器集群来完成的。如果这一级的DNS服务器上找不到,则会进一步向上一级的DNS发去查询请求。直到根域名服务器为止。如果中间找到了对应的公网Ip,则再一级一级返回,如果找不到则返回错误信息。域名解析失败。

从浏览器输入URl到显示出页面的过程

2、通过公网IP查找服务器

       有了公网IP地址,我们就可以通过路由器找到对应的服务器所在,并进一步进行通信。公网IP在整个互联网上是独一无二的,每个公网IP都代表着独立不同的节点、集群、或者服务。通过互联网间的路由器和路由表既可查找到对应的服务器。这部分我也不太熟悉,就不细细展开了。

3、建立TCP连接

       找到服务器后,就开始为通信做准备,通信协议在网络层主要有两种,一种是TCP、一种是UDP。而TCP可以通过可靠的网络通信服务,保证了通信双方的信息不丢失。

      这里使用的TCP协议在使用前需要首先在客户端和服务端之间,建立起一条数据链路。分为三步,也叫作TCP三次握手。

             3.1、TCP连接请求方,也就是客户端会发送一个请求建立连接的syn包(syn=x)给服务器;

             3.2、服务器接受到建立连接的请求syn包后,会回复一个确认包。其中有参数ACK=x+1。同时它自己还会再发一个SYN包,这里的SYN=y;

            3.3、客户端接收到服务器端发送来的确认建立连接请求的包后,再次回复一个确认包。这里的ACK=y+1;到了这里,客户端和服务端之间的链接就已经建立起来了。

从浏览器输入URl到显示出页面的过程

4、服务器后端对URL进行处理分发

       这里主要是指客户端会根据URL携带的不同信息,对其进行分发和数据处理。通过对应的URL格式dispatch到不同的后台处理Java类中,进行数据处理后,再返回对应的HTML文件给客户端。

5、对HTML在客户端进行渲染

       现在的网页多是动态HTML。里面包含了大量的JS代码。目前的浏览器为了尽快加载页面,普遍采用了一遍解析一遍加载的原则。

6、后记

       这里其实只是一个简单的过程分析,其实真正要去详细展开说明的话,会有很多的内容在其中,例如CDN加速、浏览器缓存、HTTPS中的证书CA认证、SSL、路由查找、后端分发、前端渲染等等等等。