阅读 60

TCP的局限性有哪些?

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

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

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

窗口过小的问题。

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

只能在SYN报文段中使用这个选项,而且只有主动建立连接的一方发送这个选项后,被动建立连接的一方才可以在SYN中使用这个选项

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不可达的差错

由于路由是动态变化的,在最后一次减少路径MTU的一段时间之后,可以尝试一个较大的值,RFC 1191推荐10分钟

附录

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