TCP的局限性有哪些?

长肥管道遇到的问题有哪些?

在带宽乘积很大的时候,即处于长肥网络中,容易暴露出问题网络

capacity(b)=bandwidth(b/s) * round-trip time(s)接口

窗口太小的问题。

  • 问题:TCP首部窗口大小为16bit,从而窗口限制在65535个字节,可是当前存在大带宽时延乘积,好比横跨大陆的gigabit线路,能达到7500000字节,为了提高吞吐量,须要更大的窗口。
  • 解决方案:经过定义选项实现对16bit的扩大操做。

只能在SYN报文段中使用这个选项,并且只有主动创建链接的一方发送这个选项后,被动创建链接的一方才能够在SYN中使用这个选项ip

RTT测量不够精确。

  • 问题:TCP的RTT计算是采用的采样方式,好比每一个窗口中有8个报文段时,采样速率为1/8,可是若是有100个报文段时,采样速率为数据速率的1/100,形成采样不精确,容易引发没必要要的重传。
  • 解决方案:使用时间戳选项,在每一个报文段中放置一个时间戳,接收方在确认中返回这个数值,从而容许发送方为每个收到的ACK计算RTT。

只有在主动发送的SYN中设置了这个选项,而且另外一方中收到了这个选项,才能在后续的报文中进行设置内存

报文段标识有可能重复。

  • 问题1:假如网络中有一个被延迟一段时间的报文,它的链接被释放,一个新的链接在两个主机之间创建,这个报文段有可能再次被送达
  • 解决思路:IP首部中的TTL定义每一个IP段的生存时间上线,而且每一个报文段有一个生存时间MSL
  • 问题2:网络很是快,致使再一个MSL的时候序号就反生了回绕
  • 解决方式:复用RTT测量时候的时间戳选项,发送发对这个每一个包使得这个时间戳递增,那么当收到报文时,若是发现时间戳比上次收到的时间戳要大,可是序号要小,就抛弃

TCP的实际运用的限制有哪些?

  1. 不能比最慢的链路运行得更快
  2. 不能比最慢的机器的内存运行的更快
  3. 不可以比由接收方提供的窗口大小除以往返时间所获得的带宽运行的更快

路径MTU是如何影响TCP分段的?

  • 在链接创建时,TCP使用输出接口或对端声明的MSS的最小MTU最为起始的报文段大小,
  • 此后,这个连接上的全部被TCP发送的IP数据报都将设置DF比特,若是某个中间路由器须要对一个设置了DF标志的数据报进行分片,它就丢弃这个数据报,并产生一个ICMP的“不能分片”的报错。
  • 若是收到了这个报错,TCP就减小段大小进行从新传输

设置DF比特是用来发现当前路由器是否须要对正在发送的IP数据报进行分片,若是一个待转发的IP数据报被设置了DF标志,但长度又超过MTU,那么路由器将返回ICMP不可达的差错ci

因为路由是动态变化的,在最后一次减小路径MTU的一段时间以后,能够尝试一个较大的值,RFC 1191推荐10分钟路由

附录

把书读薄(TCP/IP详解 卷一 第二十四章)it