Networking 计算链路吞吐量的正确方法
我在网上读了一些文章,对TCP和UDP有了一个很好的了解。不过,我仍然有一些疑问,我相信我并不完全清楚 计算吞吐量的正确方法是什么 (Networking 计算链路吞吐量的正确方法,networking,tcp,udp,Networking,Tcp,Udp,我在网上读了一些文章,对TCP和UDP有了一个很好的了解。不过,我仍然有一些疑问,我相信我并不完全清楚 计算吞吐量的正确方法是什么 (我们不能将接收的字节总数除以所用的总时间吗?) TCP的关键特性是什么,使其具有更高的性能 吞吐量比UDP高 更新: 我知道TCP使用的是windows,而windows只不过是在实际等待确认之前可以发送很多段。但我怀疑的是,在UDP中,数据段是连续发送的,甚至不用担心确认。因此UDP中没有额外的开销。那么,为什么TCP的吞吐量远远高于UDP呢 最后, 这是真的吗
我们不能将接收的字节总数除以所用的总时间吗?
)
TCP的关键特性是什么,使其具有更高的性能
吞吐量比UDP高
更新:
我知道TCP使用的是windows,而windows只不过是在实际等待确认之前可以发送很多段。但我怀疑的是,在UDP中,数据段是连续发送的,甚至不用担心确认。因此UDP中没有额外的开销。那么,为什么TCP的吞吐量远远高于UDP呢
最后,
这是真的吗
TCP throughput = (TCP Window Size / RTT) = BDP / RTT = (Link Speed in Bytes/sec * RTT)/RTT = Link Speed in Bytes/sec
如果是这样,那么TCP吞吐量总是等于已知的链路速度。由于RTT相互抵消,TCP吞吐量甚至不依赖于RTT
我在一些网络分析工具(如iperf、passmark性能测试等)中看到,TCP/UDP吞吐量随块大小而变化
吞吐量如何依赖于块大小?
块大小等于TCP窗口还是UDP数据报大小
计算吞吐量的正确方法是什么?
有多种方法,具体取决于您想要测量的内容。正如您所提到的,它们都可以归结为将一些位数(或字节)除以某个持续时间;不同的是,您正在计算哪些位,或者(很少)您正在考虑哪些时刻来测量持续时间
您需要考虑的因素包括:
您在网络堆栈的哪一层测量吞吐量?
如果在应用程序层进行测量,那么重要的是将哪些有用的数据传输到另一个端点。例如,如果要传输6KB的文件,则在测量吞吐量时计算的数据量为6KB(即6000字节,而不是位,请注意乘数为1000,而不是1024;这些约定在网络中很常见)
这通常被调用,它可能与传输层(如TCP或UDP)实际发送的内容不同,原因有二:
1.头文件导致的开销
网络中的每一层都会向数据添加一个报头,由于其传输时间,这会带来一些开销。此外,传输层将数据分为多个段;这是因为网络层(如IPv4或IPv6)有一个称为的最大数据包大小,在以太网中通常为1500 B。该值包括网络层标头大小(例如IPv4标头,长度可变,但通常为20B)和传输层标头(对于TCP,长度也可变,但通常为40B)。这导致最大段大小(一个段中不带头的数据字节数)为1500-40-20=1440字节
因此,如果我们想要发送6KB的应用层数据,我们必须将其分成6段,每段1440字节中有4段,240字节中有一段。然而在网络层,我们最终发送了6个数据包,每个数据包4个1500字节,一个300字节,总共6.3KB
在这里,我没有考虑到链接层(如中所示)添加了自己的头,也可能添加了后缀,这进一步增加了开销。对于以太网,以太网报头为14个字节,VLAN标签为4个字节,然后CRC为4个字节,间隙为12个字节,每个数据包总共36个字节
如果你考虑一个固定速率的链路,比如说10 Mb/s,取决于你所测量的,你将得到不同的吞吐量。通常情况下,您需要以下选项之一:
- 如果您想要衡量的是应用程序性能,那么goodput,即应用程序层吞吐量。对于本例,将6KB除以传输持续时间
- 如果您想测量的是网络性能,那么链路层吞吐量。对于本例,将6KB+TCP开销+IP开销+以太网开销=6.3KB+5*36B=6516B除以传输持续时间
TCP throughput = (TCP Window Size / RTT)
TCP throughput = BDP / RTT = (Link Speed in Bytes/sec * RTT)/RTT = Link Speed in Bytes/sec