您的位置:首页 > 理论基础 > 计算机网络

关于TCP连接的若干问题

2019-06-24 11:39 85 查看

一个从公众号上看到的小问题,答案来自其他博客和公众号,只做讨论,侵删

从 URL 在浏览器被被输入到页面展现的过程中发生了什么?
基本路径为:
1 URL解析/DNS解析查找域名IP地址;
2 TCP 连接:TCP 三次握手;
3 网络连接发起HTTP请求;
4 服务器接收数据并响应请求/MVC;
5 服务器返回 HTTP 报文,客户端接收数据;
6 浏览器加载/渲染页面;
7 断开连接:TCP 四次挥手

基本路径如果划分的细节不同,步骤和具体内容会有所区别,但大致操作是相同的

除此之外,还有一些细节:
1 现代浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?
2 一个 TCP 连接可以对应几个 HTTP 请求?
3 一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?
4 为什么有的时候刷新页面不需要重新建立 SSL 连接?
5 浏览器对同一 Host 建立 TCP 连接到数量有没有限制?

答案是:
1 HTTP/1.0中服务器在发送完一个 HTTP 响应后,会断开 TCP 连接;
而HTTP/1.1中浏览器与服务器只保持短暂的连接,连接无法复用默认情况下建立 TCP 连接不会断开,只有在请求报头中声明 Connection: close 才会在请求完成后关闭连接。
2 如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。
3 在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。
那么在 HTTP/1.1 时代,浏览器是如何提高页面加载效率的呢?主要有下面两点:
(1)维持和服务器已经建立的 TCP 连接,在同一连接上顺序处理多个请求。
(2)和服务器建立多个 TCP 连接。
4 TCP 连接有的时候会被浏览器和服务端维持一段时间。TCP 不需要重新建立,SSL 自然也会用之前的。
5 有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。

如果收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢?

如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。不过也未必会所有挂在这个域名的资源都会使用一个 TCP 连接去获取,但是可以确定的是 Multiplexing 很可能会被用到。

如果发现用不了 HTTP2 呢?或者用不了 HTTPS(现实中的 HTTP2 都是在 HTTPS 上实现的,所以也就是只能使用 HTTP/1.1)。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?那其他的请求就只能等等了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: