TCP 的那些事 | TCP Fast Open

目录

 

TCP Fast Open定义

起源

详解

流程

TFO与Wireshark

开启TFO

示例代码

TFO性能

页面加载时间

Server CPU

安全性

结论

参考资料


TCP Fast Open定义

TCP Fast Open(TFO)是用来加速连续TCP连接的数据交互的TCP协议扩展,原理如下:在TCP三次握手的过程中,当用户首次访问Server时,发送SYN包,Server根据用户IP生成Cookie(已加密),并与SYN-ACK一同发回Client;当Client随后重连时,在SYN包携带TCP Cookie;如果Server校验合法,则在用户回复ACK前就可以直接发送数据;否则按照正常三次握手进行。

 

起源

由Google于2011年的论文(http://conferences.sigcomm.org/co-next/2011/papers/1569470463.pdf)中提出,IPV4的TFO已经合入Linux Kernel Mainline,Client内核版本为3.6;Server内核版本为3.7。

Google研究发现TCP三次握手是页面延迟时间的重要组成部分,所以他们提出了TFO:在TCP握手期间交换数据,这样可以减少一次RTT。根据测试数据,TFO可以减少15%的HTTP传输延迟,全页面的下载时间平均节省10%,最高可达40%。

目前互联网上页面平均大小为300KB,单个object平均大小及中值大小分别为7.3KB及2.4KB。所以在这种情况下,多一次RTT无疑会造成很大延迟。

2011年6月,对Google webServer进行连续7天数十亿次针对80端口的请求分析,包括搜索、Gmail、图片等多个服务。其中cold requests为:新连接上的请求;warm requests为已有连接上的请求;All requests为所有连接上的请求(cold requests + warm requests)。cold requests及all requests中TCP握手时间在整个延迟时间中的占比如图 1 所示

图 1 Cold Req及All Req的三次握手在整个连接生命周期的时间百分比

 

分析结果显示,在cold requests中,TCP握手时间占延迟时间的8%-28%;即使统计所有的请求,TCP握手时间也占到了延迟时间的5%-7%。

谷歌对谷歌浏览器的进行了28天的连续数据分析(通过了用户授权):数据不仅仅是针对谷歌服务,也涉及到所有网站的请求。通过对上十亿条记录的分析,发现即使使用了Http1.1的keep-alive功能,依然有33%的请求是在新连接上发起的。可能原因:为了加快下载速度,新建数10个连接;主机和NAT也会主动断开闲置的keep-alive连接;为了省电,手机浏览器关闭闲置的连接。

为了理解TCP的三次握手对整个连接交互的影响,将分析数据进行绘图,如图 2所示

 

图 2 Http请求延时的累积分布函数图(CDF)

 

其中,X轴为网络交互延时(单位为s), Y轴为以百分比表示的HTTP请求的累积分布;All Req为三次握手在所有请求中的时间占比; Cold Req为新连接上的三次握手的时间占比; Cold Req no Hsk代表去除了三次握手时间的Cold Req的时间占比。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值