赶尽杀绝TCP

长肥管道

一个连接的时延带宽积可表示为:capacity(b)=bandwidth(b/s)×round-triptime(s)。也可称它为两端的管道大小。

具有大的带宽时延乘积的网络被称为长肥网络(LongFatNetwork,即LFN),而一个运行在LFN上的TCP连接被称为长肥管道。使用长肥管道会遇到多种问题。
  1. TCP首部中窗口大小为16bit,因此窗口大小最大为65535字节,这就将发送方发送但未被确认的数据的总长度限制到了65536字节。对于LFN管道,这可能会出现所有的数据都还未到达接收方,但是发送方已受限于窗口大小而不能继续发送的情形,这就极大的降低了网络的吞吐量。扩大窗口选项可以解决这个问题。
  2. 根据TCP的拥塞控制,丢失分组会导致连接进行拥塞控制,即便是由于冗余ACK而进入了快速恢复,也会使得拥塞窗口降低一半,而如果是由于超时进入了慢启动,则拥塞窗口会变为1,无论是哪一种情形,发送方允许被发送的数据量都大量减小了,这会导致网络吞吐量降低。选择确认(SACK)可以用来部分避免该问题,采用该技术使得接收方可以有选择的对无序到达的报文段进行确认而不是采用累积确认,这样被确认的报文段就不会超时,也不会有冗余的ACK。
  3.  TCP并不对每个报文段进行RTT测量。在一个长肥网络LFN上需要更好的RTT测量机制。
  4. TCP对每个字节数据使用一个32bit无符号的序号来进行标识。TCP定义了最大的报文段生存时间(MSL)来限制报文段在网络中的生存时间。但是在LFN网络上,由于序号空间是有限的,在已经传输了4294967296个字节以后序号会被重用。如果网络快到在不到一个MSL的时候序号就发生了回绕,网络中就会有两个具有相同序号的不同的报文段,接收方将无法区分它们的顺序。在一个千兆比特网络(1000Mb/s)中只需要34秒就可以完成4294967296个字节的发送。使用TCP的时间戳选项的PAWS(ProtectionAgainstWrappedSequencenumbers)算法(保护回绕的序号)可以解决该问题。


猜你喜欢

转载自blog.csdn.net/fly_as_tadpole/article/details/80551535
tcp