Linux fast open,TFO(tcp fast open)简介

一直以来对内核没有太多研究,最近国外业务扩展较快,国外没有节点。所以         国外用户访问国内服务器时,延时比较大。为了解决这个问题,在香港上了一个proxy,通过proxy回国内节点获取数据,最后返回客户端。为提高回源性能,有人提出TFO解决方案,以前没有听说过。所以来学习一下。

1. TFO(tcp fast open)简介

为了改善web应用相应时延方面的一个工作,google通过修改TCP协议利用三次握手时进行数据交换的TFO。和TCP相比TFO在3次握手期间也会传输数据。TFO是GOOGLE发布的。目前chrome已经支持TFO,但默认是关闭的,因为它有一些特定的使用场景。

TFO:

1.首先HTTP请求需要TCP三次握手,尽管开启keepalive(长连接),可以依然有35%的请求是重新发起一条连接。而三次握手会造成一个RTT(Round Trip Time)的延时,因此TFO的目标就是去除这个延时,在三次握手期间也能交换数据。RTT在比较低时,客户端页面加载时间优化大约在4%~5%;RTT越长,好处越大,平均大约在25%。

3b457da5fc6c8caa9f16da3ac7197530.png

除了页面加载变快改善了用户体验之外,TFO给服务器也带来了一些好处。由于每个请求都节省了一个RRT,相应地也减少了服务器端Cpu消耗。经过测试TFO每秒食物数有2876.5提升到3548.7.

2. TFO工作原理

> 客户端发送SYN包,包尾加一个FOC请求,只有4个字节。

> 服务端受到FOC请求,验证后根据来源ip地址声称cookie(8个字节),将这个COOKIE加载SYN+ACK包的末尾发送回去。

> 客户端缓存住获取到的Cookie 可以给下一次使用。

> 下一次请求开始,客户端发送SYN包,这时候后面带上缓存的COOKIE,然后就是正式发送的数据。

> 服务器端验证COOKIE正确,将数据交给上层应用处理得到相应结果,然后在发送SYN+ACK时,不再等待客户端的ACK确认,即开始发送相应数据。

02ab5e1a8a3f2d235daa610fd94b47d3.png

3.环境搭建

TFO环境搭建

1内核升级到2.6.32-916.358.23.2包括服务端和客户端

2确认开启FTO,tcp_fastopen服务端建议=3, 客户端建议=1

3安装lighttpd,lighttpd.conf配置文件加入最后server.tcp-fastopen="ensable",

如果启动失败可以配置server.use-ipv6="disable"

4用opfen.c 进行测试

5测试环境Server Ip:10.58.241.155 client IP:10.58.241.154(局域网),65.255.32.123

(北美服务器)

测试结果

编号测试项测试结果操作命令

1kernel开启,关闭TFO是否生效验证通过sysctl -w net.ipv4.tcp_fastopen=3

2服务端lighttpd开启,关闭TFO是否生效验证通过server.tcp-fastopen = "enable"

3client端开启,关闭TFO是否生效验证通过sysctl -w net.ipv4.tcp_fastopen=1

4数据包是否可以接收验证通过(HTTP/1.1 200 ok)./fopen_new -h 10.58.241.155 -p 80 -c 1024 -d

5数据包内容是否正确验证通过(两种模式下均匀 Content-Length:844)./fopen -h 10.58.241.155 -p 80 -c 1024 -d

6TCP与TFO局域网对比测试2edf117006206e30c2ab6047ed297369.png

----------------------------------------------------

普通模式下1024次请求耗时:272微秒

TFO模式下1024次请求耗时:198微秒

1024次请求性能: (272/198-1)*100 ~=37%./fopen -h 10.58.241.155 -p 80 -c 1024 -f

./fopen -h 10.58.241.155 -p 80 -c 1024 -d

7TCP与TFO北美与大陆对比测试a72bbfe67d934a4dab8281888f9f270f.png

-------------------------------------------

普通模式下1024次请求耗时:588584微秒

TFO模式下1024次请求耗时:288504微秒1024次请求性能:(588584/288504-1)*100~=104%./fopen -h 10.58.241.155 -p 80 -c 1024 -f

./fopen -h 10.58.241.155 -p 80 -c 1024 -n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值