浏览器中输入URL到返回页面的全过程

1.解析域名,找到主机IP

(1)浏览器缓存:浏览器会缓存DNS一段时间,一般2-30分钟不等。如果有缓存,直接返回IP
(2)系统缓存:浏览器会做一个系统调用,查询hosts文件。如果有缓存,直接返回IP
(3)路由器缓存:ISP服务商DNS缓存,这时一般都能够得到相应的IP。如果还是无果,就要借助DNS迭代查询

DNS域名解析.png

到这里,浏览器就获得了IP。在DNS解析过程中,常常会解析出不同的IP。比如,电信的是一个IP,网通的是另一个IP。这是采取了智能DNS的结果,降低运营商间访问延时,在多个运营商设置主机房,就近访问主机。电信用户返回电信主机IP,网通用户返回网通主机IP。当然,劫持DNS,也可以屏蔽掉一部分网点的访问,某防火长城也加入了这一特性。

2.浏览器与服务期三次握手建立TCP连接

三次握手.png

(1)浏览器发出TCP连接请求,请求报文段:同步位 SYN = 1,选择序号 seq = x,然后等待服务器确认
(2)服务器收到连接请求后,返回应答报文:SYN = 1, ACK = 1,确认号ack = x +1,自己的序号 seq = y
(3)浏览器收到应答报文后,发现ACK标志位为1,表示连接请求确认。浏览器返回确认报文:ACK = 1,确认号ack = y+1 服务器收到确认报文后建立TCP连接。

3.浏览器发起Get/Post请求

浏览器向主机发起一个HTTP-GET/POST方法报文请求。请求中包含访问的URL,还有User-Agent用户浏览器操作系统信息,编码等。Accept-Encoding一般采用gzip,压缩之后传输html文件。Cookies如果是首次访问,会提示服务器建立用户缓存信息,如果不是,可以利用Cookies对应键值,找到相应缓存,缓存里面存放着用户名,密码和一些用户设置项。

Get和Post的对比

(1)GET:在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔, 但数据容量通常不能超过2K
(2)POST: 这个则可以在请求的实体内容中向服务器发送数据,传输没有数量限制
(3)GET安全性非常低,Post安全性较高, 但是执行效率却比Post方法好,一般查询的时候我们用GET,数据增删改的时候用POST

4.显示页面或返回其他

服务器接收到获取请求,然后处理并返回一个响应,返回状态码200 表示OK,表示服务器可以响应请求,返回报文,如果在报头中Content-type为“text/html”,浏览器以HTML形式呈现。

但是,对于大型网站存在多个主机站点,往往不会直接返回请求页面,而是重定向。返回的状态码就不是200 而是301,302等以3开头的重定向码,浏览器在获取了重定向响应后,在响应报文中Location项找到重定向地址,浏览器重新第一步访问即可。

重定向是为了负载均衡或者导入流量,提高SEO排名。利用一个前端服务器接受请求,然后负载到不同的主机上,可以大大提高站点的业务并发处理能力;重定向也可将多个域名的访问,集中到一个站点;由于baidu.com,www.baidu.com会被搜索引擎认为是两个网站,照成每个的链接数都会减少从而降低排名,永久重定向会将两个地址关联起来,搜索引擎会认为是同一个网站,从而提高排名。

5.TCP四次握手断开连接

断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。整个流程如下:


四次握手断开连接.png

(1)Client将报文段首部的FIN=1,序号seq = u,发送给Server,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态,等待Server的确认
(2)Server收到后,发送ACK和自己报文段的序号给Client,确认序号ack = u+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。这个时候从 A 到 B 这个方向的连接就释放了,TCP 连接 处于半关闭状态。B 若发送数据,A 仍要接收。
(3)Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
(4)Client收到FIN后,Client进入TIME_WAIT状态,接着发送ACK给Server,确认序号ack = w+1,Server进入CLOSED状态,TCP连接断开。

为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

这里补充一下计算机网络的相关知识

Http和Https有什么区别

(1)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
(2)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
(3)https协议需要到ca申请证书,一般需要收费,比http协议安全,但是耗时多,缓存不是很好

TCP和UDP的区别

1、TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

你可能感兴趣的:(浏览器中输入URL到返回页面的全过程)