TCP 连接的握手延迟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP 连接的握手延迟相关的知识,希望对你有一定的参考价值。
参考技术A建立一条新的TCP连接时,甚至是在发送任意数据之前,TCP软件之间会交换一系列的IP分组,对连接的有关参数进行沟通,如果连接只用来传送少量数据,这些交换过程就会严重降低HTTP的性能
TCP连接三次握手:
另 参考 here :
TCP的三次握手是怎么进行的:
之后,一个TCP连接建立,开始通讯。
SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把 TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
ACK:确认标志
确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端[系统]已经成功接收所有数据。
RST:复位标志
复位标志有效。用于复位相应的TCP连接。
URG:紧急标志紧急(The urgent pointer) 标志有效。紧急标志置位,*PSH:推标志该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
FIN:结束标志
带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。
TCP的几个状态对于我们分析所起的作用
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。
TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。
HTTP1.0HTTP2.0HTTP 3.0区别
众所周知,建立起一个TCP连接需要经过“三次握手”,而HTTP协议是建立在TCP协议之上的一种应用。
TCP建立连接时三次握手有1.5个RTT(round-trip time)的延迟,为了避免每次请求的都经历握手带来的延迟,应用层会选择不同策略的http长链接方案;TCP在建立连接的初期有慢启动(slow start)的特性,所以连接的重用总是比新建连接性能要好。
HTTP 0.9
http0.9只是一个简单的协议,只有一个GET方法,没有首部,目标用来获取HTML。
HTTP 1.0
在 HTTP/1.0 中,HTTP 1.0规定浏览器与服务器只保持短暂的连接,一个服务器在发送完一个 HTTP 响应后,会断开 TCP 链接。但是这样每次请求都会重新建立和断开 TCP 连接,代价过大。
HTTP 1.1
HTTP 1.1支持持久连接(HTTP/1.1的默认模式使用带流水线的持久连接),在一个TCP连接上可以传送多个HTTP请求和响应。
HTTP 1.1的 request和reponse头中都有可能出现一个connection的头,此header的含义是当client和server通信时对于长链接如何进行处理。
Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。HTTP 1.1还支持文件断点续传,传送文件不用从头开始。
总结就是:浏览器再也不用为每个请求重新发起TCP连接了。HTTP 1.1引入cookie以及安全机制
HTTP 2.0
HTTP2.0中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据。
HTTP2.0 使用了HPACK(HTTP2头部压缩算法)压缩格式对传输的header进行编码,减少了header的大小。
HTTP2.0,可以在一个连接里,客户端和服务端都可以同时发送多个请求或回应,而且不用按照顺序一对一对应。
因为http 1.1
管道化特性可以让客户端一次发送所有的请求,但是有些问题阻碍了管道化的发展,即是某个请求花了很长时间,那么队头阻塞会影响其他请求。
总结就是:解决了http1.1中的队头阻塞问题,用户体验的感知多数延迟的效果有了量化的改善,以及提升了TCP连接的利用率
参考:
https://zhuanlan.zhihu.com/p/61423830
https://www.jianshu.com/p/52d86558ca57
https://mp.weixin.qq.com/s/MHYMOYHqhrAbQ0xtTkV2ig
以上是关于TCP 连接的握手延迟的主要内容,如果未能解决你的问题,请参考以下文章