中华街zhshops

首先考虑一下即使是一个简单的互联网网页也是由许

多单独的文档和资产组成的。有 、 CSS 、 JavaScript 、 pix 等。这些文件中的每一个都可以被视为一个简单的“二进制 blob”——浏览器以某种方式解释的零和一的集合。通过网络发送这些文档时,我们不会立即切换所有文件。

相反,它们被细分为较小的块(通常每个块约 1400 字节)并以单独的数据包发送。因此,我们能够将每项援助作为单独的“字节流”来处理,因为随着时间的推移,统计数据会被下载或“流式传输”。

对于 /11 ,资源加载方法非常简单,因为每个报告都有 手机号数据库列表 自己的 TCP 连接并完整下载。例如,如果我们有文档 A 、 B 和 C ,我们可以有 3 个 TCP 连接。第一个将看到 AAAA 字节流,第二个将看到 BBBB 和 033 CCCC (每个字母重复都是一个 TCP 数据包)。然而,由于每个新连接都有一些开销,因此这种方法的效率也非常低。

实际上,浏览器对可以使用的并发连接的数量(以及因此可以并行下载的文档的数量)施加了限制——通常在 6 到 30 个连接之间,以与网页加载保持一致。先前的报告完全传输后,将重新使用该连接来下载全新的文件。这些障碍最终开始阻碍现代页面的网络整体性能,这些页面通常加载 30 多个资源。

改进这个示例是 /2 的所有基本目标之一。该协议通过现在不为每个报告打开新的 TCP 连接,而是通过单个 TCP 连接下载唯一的资源来实现此目的。这是借助“多路复用”不同的字节流来完成的。这是一种华丽的说法,我们在移动时混合来自独特文档的数据。对于我们的三个实例文件,我们将获得一个单一的 TCP 连接,并且传入的信息可能会显示为 ABBCCAABBCC(尽管可能有许多不同的排序方案)。

这看起来很简单,并且毫无疑问可以正常工作,使 /2 通常与 /11 一样快或稍快,但开销要少得多。

让我们更深入地看看差异:

/1 与 /2 和 /3 复用
与 /2 和 /3 不同, /11 不允许复用。 (大预览)
然而,TCP方面存在问题。你看,当你认为 TCP 是一个较旧的协议,它不再设计为加载网页时,它不知道 A 、 B 或 C 。在内部,TCP 认为它只是移动单个文件 X ,但它并不知道无法识别请注意,它所看到的 XXXXXXXXXXXX 确实是级别 AABBCCAABBCC 。

在大多数情况下,这并不依赖(它确实使 TCP 非常灵活!),但是当网络上发生诸如数据包丢失之类的事情时,就会发生交换。


假设 1/3 TCP 数据包丢失(包含文档 B 的主要事实的数据包),但所有不同的记录都已传递。 TCP 通过在全新数据包中重新传输丢失记录的全新副本来处理这种丢失。然而,这一重传可能另外需要一段时间才能到达(至少一个 RTT )。

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册