吞吐量和延迟有什么关系

网络工程 通讯协议 潜伏 吞吐量
2021-07-27 11:30:54

查看 TCP 数据包的结构,例如此处讨论的:移动电话呼叫数据包/数据报的内部结构是什么?, 这表示 TCP 数据包大小为 192 字节,不包括数据。

从 StackOverflow 上的答案(https://stackoverflow.com/questions/2613734/maximum-packet-size-for-a-tcp-connection),我看到数据的大小是可变的,最大为 64KB,但实际上不能超过 1500B(根据其中一个答案)-我认为这是在相当不错的网络上。

然后在 Wikipida ( https://en.wikipedia.org/wiki/Maximum_segment_size ) 上,我看到出于实际原因,限制为较小尺寸的 TCP 数据包将避免 IP 碎片 - 我想这对于较差的网络质量是可取的。

如果我在具有高延迟 (400 毫秒) 的网络上使用移动设备,是否可以估算传输 1MB 的 HTTP 有效负载所需的 TCP 数据包数量?

我对网络的理解是,您可以计算通过这种连接传送所有数据包所需的时间。

即 1000 个数据包 * 400 毫秒延迟(即 400 毫秒 RTT - 我理解的延迟通常是指 RTT)= 至少需要 400 秒才能传送 HTTP 负载。

但这并没有考虑到吞吐量。如果该计算(至少在原则上)是正确的,那么增加吞吐量(即将连接从 1mbps 升级到 10mbps)将如何影响 1MB HTTP 有效负载的交付?

它会允许增加 TCP 段大小吗?如果是这样,这是通过 TCP 应用程序自动完成的吗?

1个回答

即 1000 个数据包 * 400 毫秒延迟(即 400 毫秒 RTT - 我理解的延迟通常是指 RTT)= 至少需要 400 秒才能传送 HTTP 负载。

好吧,只有当每个单独的 TCP 段都被确认时,这才是正确的。(有人记得 TFTP 吗?跨 64k WAN 链接?...那是耐心的日子...)

这里的关键概念是带宽*延迟积 (“BDP”,有时也称为“传输中的字节数”)和TCP 窗口大小(及其缩放)TCP 发言人应该考虑到这一点。

https://www.switch.ch/network/tools/tcp_throughput/是一种(当然是众多)基于网络的工具,用于处理带宽、延迟、损耗因素。

这是 1Mbps、400 毫秒 RTT、1300 字节减少的 MSS(最大 TCP 有效负载大小)的结果屏幕截图。计算产生约 50kBytes 的 BDP。

switch.ch 吞吐量计算器,400ms,1Mbit/s

这与 10Mbits 相同,BDP 约为 500kBytes:

switch.ch 吞吐量计算器,400ms,10Mbit/s

400ms 是一个相当“长”的管道,通过处理这些数字,您会发现 64kByte 的未缩放 TCP 窗口大小远远不足以达到 10Mbit/s 的吞吐量。

回答您的问题:在 400 毫秒的 RTT 时,不太需要 TCP 窗口缩放(假设未缩放时最大 64k 默认值)“填充 1Mpbs 管道”。

对于 400 毫秒 RTT 的 10Mpbs 管道,TCP 扬声器必须实现 TCP 窗口缩放。

我可能不是程序员,但近年来我遇到的当代 TCP 堆栈和应用程序(通过在无数 Wireshark 跟踪中观察它们的行为)都默认进行 TCP 窗口缩放。