我很难理解SPDY是如何解决HOL阻塞的。
引用来源:孔
要理解为什么会出现这种情况,请记住,每个TCP数据包在连接时都带有一个唯一的序列号,数据必须按顺序传递给接收方(图2-8)。如果其中一个数据包在发送到接收器的过程中丢失,则所有后续数据包必须保存在接收器的TCP缓冲区中,直到丢失的数据包被重新发送并到达接收器为止。因为这项工作是在TCP层内完成的,所以我们的应用程序对TCP重传或排队的数据包缓冲区没有可见性,必须等待完整的序列才能访问数据。相反,当它试图从套接字读取数据时,它只会看到一个传递延迟。这种效应被称为TCP线头(HOL)阻塞.
所以HOL阻塞的存在是因为TCP保证了订单的传递.但是这里,用户igrigorik说,SPDY允许数据包以不同的顺序出现。但是,SPDY不只是HTTP的替代品吗?这意味着它仍然运行在TCP上(从这里)。
发布于 2014-08-09 19:51:28
HOLB有几个原因,其中包重传是其中之一,但与HTTP和SPDY无关。与HTTP和SPDY相关的是,在HTTP1.x中,必须按顺序响应多个请求。
假设一个HTTP客户机通过同一个TCP连接向服务器发送2个请求,而第一个响应在内容长度上是“大”的,而第二个响应在内容长度上是“小”的。
由于HTTP1.x协议的性质,第二个响应必须等待第一个响应完成。第二个响应被第一个响应阻塞。
相反,对于SPDY和HTTP 2这样的多路复用协议,这种类型的HOLB并不存在,因为第二个“小”响应可以在第一个“大”响应之前到达客户端(它们甚至可以被交织)。
你上面提到的问题的图表以图形的方式解释了它。
Ilya在他的回应中,不是指TCP数据包,而是指HTTP“数据包”,当他说它们可能会出现故障时。设想一个由HTTP报头组成的“数据包”,以及一个由将上传到服务器的POST数据组成的“数据包”(或者,在响应中,由要下载到客户端的数据组成的“数据包”)。在HTTP1.x中,这些HTTP“数据包”必须是有序的(首先是请求1的所有HTTP“数据包”,然后是请求2的所有HTTP“数据包”;或者首先是响应1的所有HTTP“数据包”,然后是response2的所有HTTP“数据包”),而在SPDY和HTTP 2中,它们可能是无序的,甚至是交错的。
在SPDY和HTTP 2中缺乏这种HOLB使得这些协议比HTTP1.x更有效。
TCP重传引起的HOLB影响任何基于TCP的协议,包括SPDY和HTTP 2等多路复用协议和HTTP1.x等双工协议。
https://stackoverflow.com/questions/25221954
复制相似问题