关闭

TFO (tcp fast open) 简介

289人阅读 评论(0) 收藏 举报
分类:

Nginx 刚刚发布了 1.5.8 版本,其中 listen 指令支持 fastopen 参数。网上找来一篇文章介绍这个TCP_FASTOPEN 参数。

注意:TCP_FASTOPEN 只在 3.7.1 以及更新的 Linux 内核版本才支持。

以下内容来自:http://www.pagefault.info/?p=282

这个是google的几个人提交的一个rfc,是对tcp的一个增强,简而言之就是在3次握手的时候也用来交换数据。这个东西google内部已经 在使用了,不过内核的相关patch还没有开源出来,chrome也支持这个了(client的内核必须支持). 要注意,TFO默认是关闭的,因为它有一些特定的适用场景,下面我会介绍到。

相关的rfc:
http://www.ietf.org/id/draft-cheng-tcpm-fastopen-00.txt

相关的ppt:
http://www.ietf.org/proceedings/80/slides/tcpm-3.pdf

我来简单的介绍下这个东西.想了解详细的设计和实现还是要去看上面的rfc。

1 http的keepalive受限于idle时间,据google的统计(chrome浏览器),尽管chrome开启了http的 keepalive(chrome是4分钟),可是依然有35%的请求是重新发起一条连接。而三次握手会造成一个RTT的延迟,因此TFO的目标就是去除 这个延迟,在三次握手期间也能交换数据。

2 RFC793允许在syn数据包中带数据,可是它要求这些数据必须当3次握手之后才能给应用程序,这样子做主要是两个原因,syn带数据可能会引起2个问 题。第一个是有可能会有前一个连接的重复或者老的数据的连接(syn+data的数据),这个其实就是三次握手的必要性所决定的。第二个就是最重要的,也 就是安全方面的,为了防止攻击。

3 而在TFO中是这样解决上面两个问题的,第一个问题,TFO选择接受重复的syn,它的观点就是有些应用是能够容忍重复的syn+data的(幂等的操 作),也就是交给应用程序自己去判断需不需要打开TFO。比如http的query操作(它是幂等的).可是比如post这种类型的,就不能使用TFO, 因为它有可能会改变server的内容. 因此TFO默认是关闭的,内核会提供一个接口为当前的tcp连接打开TFO。为了解决第二个问题,TFO会有一个Fast Open Cookie(这个是TFO最核心的一个东西),其实也就是一个tag。

4 启用TFO的tcp连接也很简单,就是首先client会在一个请求中(非tfo的),请求一个Fast Open Cookie(放到tcp option中),然后在下次的三次握手中使用这个cookie(这个请求就会在3次握手的时候交换数据).

下面的张图就能很好的表示出启用了TFO的tcp连接:


0
0
查看评论

Linux TCP_FASTOPEN的作用

Linux TCP_FASTOPEN
  • for_tech
  • for_tech
  • 2017-01-08 23:28
  • 5969

TCP Fast Open by Google 浅析

You are here: Home » 计算机 » IT杂谈 » TCP Fast Open by Google 浅析 TCP Fast Open by Google 浅析 2011-11-10 Google 将在今年 12 月的 ACM...
  • liangxiaozhang
  • liangxiaozhang
  • 2013-12-23 18:04
  • 1117

linux TCP Fast Open开启和测试

linux上要开启TCP Fast Open,内核版本至少为3.7.0, 且需要设置 /proc/sys/net/ipv4/tcp_fastopen 为3. 开启后,如果有连接进来,使用如下命令查看: grep ‘^TcpExt:’ /proc/net/netstat | cut -d ’ ’ ...
  • n5
  • n5
  • 2017-05-12 11:11
  • 3792

Linux内核3.7 TCP Fast Open验证实例

Linux内核在3.6和3.7合入了TCP Fast Open特性,在3.7.3版本上验证了一下,I did it! 以下是C语言实例(LWN介绍): server端代码: #include #include /* See NOTES */ #include #...
  • hanhuili
  • hanhuili
  • 2013-01-25 00:25
  • 9249

8.6 TCP Fast Open(TFO)

TFO(TCP Fast Open)是一种能够在TCP连接建立阶段传输数据的机制。使用这种机制可以将数据交互提前,降低应用层事务的延迟。其基本步骤如下: 1、客户端发送一个SYN包到服务器,这个包中携带了Fast Open Cookie请求的TCP选项; 2、服务器生成一个cookie,这个coo...
  • u011130578
  • u011130578
  • 2015-03-21 13:09
  • 3052

TFO(tcp fast open)简介

pagefault on the program road 首页关于我 首页 > 协议 > TFO(tcp fast open)简介 TFO(tcp fast open)简介 2011年5月9日Simon Liu 发表评论阅读评...
  • liangxiaozhang
  • liangxiaozhang
  • 2013-12-23 18:04
  • 1433

TCP Fast Open(TFO)

http://www.vants.org/?post=210 【说在之前】: 我在之前的博客文章《非标准TCP三次握手建立连接过程一例》一文中提到了非标准的TCP三次握手行为,今天在微博上看到有人转发有关TCP Fast Open(TFO)的文章,大致看了一下,了解到所谓的TCP...
  • larryliuqing
  • larryliuqing
  • 2014-04-22 14:59
  • 982

升级CentOS6.5内核,开启Nginx的fastopen和reuseport特性

1. 导入public keyrpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org2. 安装ELRepo到Centos6.5中rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.e...
  • jamal117
  • jamal117
  • 2016-12-31 18:52
  • 546

tcp fast open

TFO[1]是Linux 内核3.6版本引入的新特性,相关标准由Google提出,仍旧是RFC的草案[2],非正式标准。作者是Yuchung Cheng,Google工程师,他从加州大学圣迭戈分校获得博士学位,从国立台湾大学[3](NTU,新加坡也有一个NTU[4],美国好像也有一个)获得学士学位,...
  • ztsinghua
  • ztsinghua
  • 2016-06-12 16:27
  • 474

ss-libev 源码解析local篇(4): server_recv_cb之STAGE_STREAM

继续探索server_recv_cb,我们已经来到了STAGE_STREAM状态。如果在0.05秒的timer来之前客户端就有数据过来,server_recv_cb被调用,此时已经在stream状态就会读入数据到remote的buf中;如果timer先到了就是直接调用的server_recv_cb,...
  • n5
  • n5
  • 2017-06-14 10:21
  • 899
    个人资料
    • 访问:164408次
    • 积分:2356
    • 等级:
    • 排名:第18664名
    • 原创:48篇
    • 转载:181篇
    • 译文:0篇
    • 评论:0条
    文章分类