feisky

云计算、虚拟化与Linux技术笔记
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

tcpip详解笔记(21) TCP的路径MTU探测与长肥管道

Posted on 2012-10-24 21:37  feisky  阅读(1875)  评论(0编辑  收藏  举报


1. TCP的路径MTU探测

(1)根据自身MTU及对方SYN中携带的MSS确定发送报文数据部分的最大容量(如果对方没有指定MSS,则默认为536);
(2)在IP头部打开DF标志位;
(3)如果收到ICMP错误信息告知需要分片, 如果ICMP信息中包含下一跳MTU的信息, 那么根据这个值调整数据的最大容量, 如果ICMP信息中不支持这种新协议(下一跳MTU值为0), 那么调整数据的最大容量至下一个可能的大小;
(4)DF标志位会一直打开, 以保证能够测量得到正确的Path MTU;
(5)超时后会重新探询Path MTU以保证链路改变也能用到正确的Path MTU.

TCP Path MTU探询的好处是:
(1)避免在通过MTU小于576的中间链路时进行分片;
(2)防止中部链路的某些网络的MTU小于通信两端所在网络的MTU时进行分片;
(3)充分利用链路的吞吐量.

2. 长肥管道

带宽延时积很大的网络叫做长肥网络(LFN, long fat network,单位为字节), 在LFN上建立的TCP链接叫做长肥管.

长肥管道带来的一些问题:

(1)长肥管的带宽延时积很大, TCP头部的窗口大小字段只能最多声明65535(2^16)字节大小的窗口, 因此不能充分利用网络, 由此提出了窗口扩大选项以声明更大的窗口.

(2)由于长肥管的延时较高, 出现丢包的情况会使得管道枯竭(即网络通信速度急剧下降), 快重传快恢复算法就是用以削弱这一问题的影响, SACK选项也有使用.

(3)为了提高长肥管的吞吐量, 长肥管一般声明很大的窗口值, 而这样不利于RTT的测量(因为TCP只有一个RTT计时器, 启动RTT计时的数据在没有被ACK前, TCP无法进行下一次RTT的测量, 而由于发送延时一般大于传播延时, 所以TCP往往是发送完一个窗口的数据计算一次RTT), 所以需要引入时间戳选项提高测试RTT的频率.

(4)由于长肥管的发送速度非常快, 所以导致很短时间内数据的序号就会重复(在gigabit网络只需要34秒就会出现序号重复). 因此引入PAWS算法应对这种情况.

3. 窗口扩大选项

使用窗口扩大选项需要链接的两端同时启用这个选项(双方的), 并且链接双方声明的扩大偏移量不需要相等(不对称), 并且声明后偏移量不能改变(固定).

TCP遇到自己不支持的选项时, 那么它会忽略这个选项, 这么做是为了向一些老版本的TCP提供兼容. 所以如果一方A向另外一方B发送了窗口扩大选项, 如果B不支持这个选项, 那么在B的回应中就不会包含这个选项, 而A就只能沿用老的窗口大小声明方法.

4. 时间戳选项

时间戳选项的工作原理是向对方发送一个随着时间单调递增的值, 对方收到后在后续的ACK中的时间戳选项中的回应段回应相同的值, TCP记录发送时间戳和收到回应的时间, 从而获得RTT.

时间戳选项需要占用12个字节, 因为选项本身是10个字节, 另外还要补充两个nop使得协议长度为4的倍数(12).

时间戳选项的建议增长速度为1ms~1000ms/次.

时间戳的记录方式为记录第一个未被顺序ACK的报文的时间戳的值, 在下一个ACK回应这个值. 这么做的好处有二:
(1)正确估算延迟ACK(这个是必须考虑的);
(2)这确处理传输过程中出现的乱序和丢包问题时RTT的计算.


5. PAWS 防止回绕的序号

PAWS算法的本质就是利用时间戳选项的单调递增性来判断相同报文的先后. PAWS算法不需要在发送方和接收方之间进行任何形式的时间同步。接收方所需要的就是时间戳的值单调递增,并且每个窗口至少增加1。

6. T/TCP:为事务用的TCP扩展

7. 链路, 内存带宽, 接收窗口大小都会影响到网络的性能, 但是最终决定网络速度的是窗口的大小和光的速度(也就是往返时间).


参考资料:

《TCP/IP详解》
http://www.cnblogs.com/cenhao/archive/2011/08/07/2130129.html
http://zenhumany.blog.163.com/blog/static/1718066332010827104959433/

无觅相关文章插件,快速提升流量