TCP输入 之 快速路径和慢速路径

概述

快速路径:用于处理预期的,理想情况下的数据段,在这种情况下,不会对一些边缘情形进行检测,进而达到快速处理的目的;

慢速路径:用于处理那些非预期的,非理想情况下的数据段,即不满足快速路径的情况下数据段的处理;

首部预测字段格式:首页预测字段,实际上是与TCP首部中的【头部长度+保留字段+标记字段+窗口值】这个32位值完全对应的;进行快速路径判断的时候,只需要将该预测值与TCP首部中的对应部分进行比对即可,具体见tcp_rcv_established;

源码分析

tcp_fast_path_check完成对是否满足快速路径条件的检查,当没乱序队列中没有乱序数据段,接收窗口不为0,接收缓存足够,且没有紧急数据的情况下,才可以开启快速路径标记;不满足上述情况需要执行慢速路径;

 

tcp_fast_path_on对含有扩大因子的窗口值进行还原,之后调用__tcp_fast_path_on;

 

__tcp_fast_path_on则是构造与tcp头部【头部长度+保留字段+标记字段+窗口值】对应的字段;其中标记字段为含有ACK标记;

 

tcp_rcv_established在处理已连接状态下的数据段接收时,会使用tcp_flag_word(th) & TCP_HP_BITS) == tp->pred_flags将tcp首部中的字段值与预测字段进行比对,若一致,才能进入快速路径进行处理,否则执行慢速路径;

 

tcp_flag_word则是取TCP首部中的第4个32位字段,实际上就是上面说的【头部长度+保留字段+标记字段+窗口值】;

 

对于保留字段和PSH标记,需要在比对之前屏蔽掉,它们不该影响快慢路的判断;

 

本文链接:TCP输入 之 快速路径和慢速路径

转载声明:转载请注明来源:Linux TCP/IP Stack,谢谢!


发表评论

电子邮件地址不会被公开。 必填项已用*标注