Networking 计算链路吞吐量的正确方法

Networking 计算链路吞吐量的正确方法,networking,tcp,udp,Networking,Tcp,Udp,我在网上读了一些文章,对TCP和UDP有了一个很好的了解。不过,我仍然有一些疑问,我相信我并不完全清楚 计算吞吐量的正确方法是什么 (我们不能将接收的字节总数除以所用的总时间吗?) TCP的关键特性是什么,使其具有更高的性能 吞吐量比UDP高 更新: 我知道TCP使用的是windows,而windows只不过是在实际等待确认之前可以发送很多段。但我怀疑的是,在UDP中,数据段是连续发送的,甚至不用担心确认。因此UDP中没有额外的开销。那么,为什么TCP的吞吐量远远高于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的情况下,数据包丢失由传输层纠正;对于UDP,没有这样的机制,这意味着要么应用程序不关心数据的某些部分是否未被传递,要么应用程序在UDP之上自行实现重传

由于两个原因,重传降低了输出:

a。一些数据需要再次发送,这需要时间。这引入了一个延迟,该延迟与发送方和接收方之间网络中最慢链路的速率成反比(也称为瓶颈链路)。 B如果检测到某些数据未送达,则需要从接收方反馈给发送方。由于传播延迟(有时称为延迟;由电缆中的光速有限引起),发送方只能在一定的延迟时间内接收反馈,这会进一步降低传输速度。在大多数实际情况下,这是导致重新传输造成额外延迟的最重要因素

显然,如果您使用UDP而不是TCP,并且不关心数据包丢失,您当然会获得更好的性能。但对于许多应用程序来说,数据丢失是不能容忍的,因此这种测量是没有意义的

有些应用程序确实使用UDP传输数据。一种是BitTorrent,它可以使用TCP或他们设计的协议,该协议在UDP的基础上模拟TCP,但旨在通过许多并行连接提高效率。通过UDP实现的另一个传输协议是,它也模拟TCP,并提供在单个连接上多路复用多个并行传输,以及前向纠错以减少重传

我将讨论前向纠错
TCP throughput = (TCP Window Size / RTT)
TCP throughput = BDP / RTT = (Link Speed in Bytes/sec * RTT)/RTT = Link Speed in Bytes/sec