说说 HTTP 与 TCP 的关系

更新日期: 2019-08-10阅读: 1.9k标签: tcp

HTTP与TCP的关系?

HTTP是应用层协议。TCP是传输层协议。HTTP是建立在TCP协议之上。


完成一次http请求到底发生了什么?

在http1.0阶段,完成一次http请求之后,就会断开http连接,同时TCP连接也会断开。

所以每次HTTP请求都会先建立TCP连接,然后建立HTTP连接。这样代价有些大,也不符合我们的常识。

所以在http1.0中虽然没有相应的规定,但是某些服务器还是对Keep-alive的Header头进行了支持。

加入keep-alive之后,在完成http请求之后,断开http连接,但是底层的TCP连接并不断开。

可以为新的http请求所复用,节省了很大资源。这才是我们想要的。

在http1.1阶段,默认开启http的keep-alive,除非显示的关闭。

所以一个tcp连接可以发送多个http请求。但是同一时刻,TCP只能处理一个请求,

两个请求的生命周期不能重叠,任意两个HTTP请求从开始到结束的时间在同一个TCP连接里不能重叠。

  • HTTP 1.0中默认是关闭的,需要在http头加入"Connection: Keep-Alive",才能启用Keep-Alive;

  • HTTP 1.1中默认启用Keep-Alive,如果加入"Connection: close ",才关闭。

对于客户端来说,不论是浏览器,还是我们直接在Java代码中使用HttpUrlConnection,只是负责在请求头中设置Keep-Alive。

在HTTP协议中,具体的连接复用时间的长短,通常是由web服务器控制的,通常配置都是在几十秒左右。

例如,在tomcat中,我们可以server.xml中配置以下属性:

<Connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
keepAliveTimeout="60000"
maxKeepAliveRequests="100" redirectPort="8443" />

说明如下:

  • maxKeepAliveRequests:一个连接上,最多可以发起多少次请求,默认100,超过这个次数后会关闭。

  • keepAliveTimeout:底层socket连接最多保持多长时间,默认60秒,超过这个时间连接会被关闭。

一个TCP连接中,多个http请求可以一起发送吗?

HTTP/1.1 存在一个问题,单个 TCP 连接在同一时刻只能处理一个请求,意思是说:两个请求的生命周期不能重叠,

任意两个HTTP请求从开始到结束的时间在同一个 TCP 连接里不能重叠。虽然 HTTP/1.1 规范中规定了Pipelining来试图解决这个问题,

但是这个功能在浏览器中默认是关闭的。但是,HTTP2 提供了 Multiplexing 多路传输特性,可以在一个 TCP 连接中同时完成多个 HTTP 请求。

至于 Multiplexing 具体怎么实现的就是另一个问题了。


那么在 HTTP/1.1 时代,浏览器是如何提高页面加载效率的呢?主要有下面两点:

  1. 维持和服务器已经建立的 TCP 连接,在同一连接上顺序处理多个请求。

  2. 和服务器建立多个 TCP 连接。

假设我们还处在 HTTP/1.1 时代,那个时候没有多路传输,当浏览器拿到一个有几十张图片的网页该怎么办呢?

肯定不能只开一个 TCP 连接顺序下载,那样用户肯定等的很难受,但是如果每个图片都开一个TCP连接发HTTP请求,

那电脑或者服务器都可能受不了,要是有1000张图片的话总不能开1000个TCP连接吧,

所以Chrome允许对同一个Host建立最多六个TCP连接。


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

如果图片都是HTTPS连接并且在同一个域名下,那么浏览器在SSL握手之后会和服务器商量能不能用HTTP2,

如果能的话就使用Multiplexing功能在这个连接上进行多路传输。如果发现用不了HTTP2呢?

或者用不了HTTPS(现实中的HTTP2都是在HTTPS上实现的,所以也就是只能使用 HTTP/1.1)。

那浏览器就会在一个HOST上建立多个TCP连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,

如果所有的连接都正在发送请求呢?那其他的请求就只能等等了。

来自:https://mp.weixin.qq.com/s/quo5NXzfEqgRomwX1t7zaw

链接: https://www.fly63.com/article/detial/5251

网络协议中HTTP,TCP,UDP,Socket,WebSocket的优缺点/区别

先说一下网络的层级:由下往上分为 物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,TCP:是面向连接的一种传输控制协议。属于传输层协议。UDP:是面向非连接的用户数据报协议。HTTP是基于TCP协议的应用的超文本传输协议,属于应用层的协议。

node.js中net网络模块TCP服务端与客户端的使用

node.js中net模块为我们提供了TCP服务器和客户端通信的各种接口。创建服务器并监听端口,net.Socket是一个socket端口对象,是一个全双工的可读可写流,创建一个tcp客户端

http的keep-alive和tcp的keep-alive区别

在http早期,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接。使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接

web中tcp三次握手

TCP报文段中的窗口这16位字段部分,这里窗口的作用就是为了实现流量的控制,为什么会有流量的控制的引入???它是这样来的:若是发送方发送数据的速度大于了接收方应用程序取数据的速度(假设数据传输过程不拥塞)

TCP 中的两个细节点

没有永远不出错误的通信,这句话表明着不管外部条件多么完备,永远都会有出错的可能。所以,在 TCP 的正常通信过程中,也会出现错误,这种错误可能是由于数据包丢失引起的,也可能是由于数据包重复引起的,甚至可能是由于数据包失序 引起的。

TCP/UDP端口对照表

下面的表格中列举了包括在红帽企业 Linux 中的服务、守护进程、和程序所使用的最常见的通信端口。该列表还可以在 /etc/services 文件中找到

TCP 和 UDP - 网络底层基础

TCP 是一个面向连接的、可靠的、基于字节流的传输层协议。而 UDP 是一个面向无连接的传输层协议。(就这么简单,其它 TCP 的特性也就没有了)。具体来分析,和 UDP 相比,TCP 有三大核心特性:

面试突击:TCP 可靠吗?为什么?

相比于 UDP 来说,TCP 的主要特性是三个:有连接、可靠、面向数据流。所谓的“有连接”指的是 TCP 中的连接管理机制,也就是著名的三次握手和四次挥手,就像打电话一样

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!