从文章ip网络的时延:传输时延(发送时延),传播时延,处理时延,排队时延我们已经知道了发送时延(传输时延)的定义: 传输时延=数据帧长度(b)/信道带宽(b/s),所以可知传输时延(发送时延)和带宽成反比。
所以我们可以将一个不丢包,不抖动,不误码(出错误包),没有排队时延,没有处理时延的理想网络模型简化为二个特征:
时延带宽积=传播时延*带宽
可以将TCP的长肥管道理解为高速公路,而每个被传输的数据包都是一辆行驶的小汽车,如果一辆接一辆的排满汽车,并且所有汽车都以相同的速度开行,则高速公路上可以容纳很多的小汽车,但如果高速公路很长,每个小汽车从起点到终点还是要花费很多时间。
长肥管的带宽延时积很大(发送很快,传播到另外一端需要很长时间),
导致会有大量的数据包正在传输途中,我们都知道,TCP流控算法会在窗口变成0时停止发送。但原始的TCP头部的窗口大小字段是16位的,因此窗口大小最大为65535字节,这就将发送方发送但未被确认的数据的总长度限制到了65536字节。参考计算 65535*8/1024/1024 = 0.5Mbps,那么假设发送速度足够快的前提下,在传播时延为100毫秒的网络里,只要5Mbps的带宽就可以做到在第一个bit还没有到达接收端时,发送端就已经发送完了最后一个bit, 然后窗口变成0,停止发送数据,还要等待至少100毫秒发送端才能收到接收端发回来的接收窗口通告,然后才能打开窗口继续发送,意味着最多只能使用到5Mbps的带宽,因此不能充分利用网络。------由此提出了窗口扩大选项以声明更大的窗口.
长肥管的延时较高
据TCP的拥塞控制,丢失分组会导致连接进行拥塞控制,即便是由于冗余ACK而进入了快速恢复,也会使得拥塞窗口降低一半,而如果是由于超时进入了慢启动,则拥塞窗口会变为1,无论是哪一种情形,发送方允许被发送的数据量都大量减小了,这会会使得管道枯竭(即网络通信速度急剧下降), 采用快重传快恢复算法可以部分解决这个问题。
提高长肥管的吞吐量, 长肥管一般声明很大的窗口值, 而这样不利于RTT的测量
按TCP协议,每个TCP连接只有一个RTT计时器, 同一时间,只有一个报文做RTT测量,启动RTT计时的数据在没有被ACK前, TCP无法进行下一次RTT的测量。而在长肥管道中,传播时延很大,这意味着RTT的测试周期很大。-----引入时间戳选项提高测试RTT的频率
长肥管的发送速度非常快(发送时延)
TCP对每个字节数据使用一个32bit无符号的序号来进行标识。TCP定义了最大的报文段生存时间(MSL)来限制报文段在网络中的生存时间。但是在LFN网络上,由于序号空间是有限的,在已经传输了4294967296个字节以后序号会被重用。如果网络快到在不到一个MSL的时候序号就发生了回绕,网络中就会有两个具有相同序号的不同的报文段,接收方将无法区分它们的顺序。在一个千兆比特网络(1000Mb/s)中只需要34秒就可以完成4294967296个字节的发送。------引入TCP的时间戳选项的PAWS(ProtectionAgainstWrappedSequencenumbers)算法(保护回绕的序号)。
现在的网络,通常是大带宽的,如果有中间一些设备产生的延时,则很容易产生长肥管道的问题,通过本文,我们已经知道了TCP长肥管道中,TCP的性能很差,很难充分利用网络带宽,那么如果要对这样的网络进行测试,得到网络的最大吞吐量,我们应该如何设置iperf3的参数呢。
其实逻辑很简单,主要就是二个思路: