使用TCP Fast Open加快TCP连接建立过程 - kernel panic

使用TCP Fast Open加快TCP连接建立过程

以及v2ray的EarlyData新功能降低Websocket的Rtt

上学期,某个企业来这边推销课程(实训),有一天来讲怎么选择企业,先说深圳是硬的(整硬件),成都是软的(写代码)。然后又说有一个学生去面试 面试官突然提到三次握手,然后那个学生不会。我在想三次握手那不很简单233
虽然已经免修了网络技术,除了因为不想上课而快乐(误),事实上网络本身很多东西比课本上有趣得多
三次握手其实没有书上那么难懂:
A:听得见我讲话吗
B:听见了,那你听得见我讲话吗
A:听见了,我们来聊天吧
[聊天内容省略]

传统三次握手
握手

需要第三次握手的原因是B需要知道A能不能听到自己的消息
之前也讲到我用树莓派当软路由用,配合V2ray做了透明代理,但是即使是CERNET也跨太平洋才到洛杉矶,一来一回一个RTT也是要花不少时间。
转接
另一个原因是运营商之间如果没有交易,也就是没有Peer,即使近在咫尺也会绕到美西免费互联点进行数据交换。
绕路

TCP Fast Open(以下简写为TFO)原理简述:
原本需要三次握手才能开启TCP连接,这是建立在连接双方都不认识的情况下。如果说连接双方之前认识呢?那就可以少一次握手
A(小明):小红,你能听到我讲话吗,我跟你说我昨天….[聊天内容]
B(小红):小明,我听到了..
[聊天内容省略]
不需要第三次握手是因为连接双方都知道了对方的情况,包括身份信息cookie,MSS(TCP每个包内容的最大值)。
cookies

开启TCP Fast Open

/etc/sysctl.conf中添加

net.ipv4.tcp_fastopen = 3

然后执行sysctl -p即可
查看效果 抓包结果:
TFO
连接流程
流程

结合v2ray的earlyData还可以更快访问Google

如果你是用ws协议,即使是使用了TFO
示例
昨天在偶然翻阅v2的手册看到这样一段
手册
但写得不清不楚,只能去看源码和Github上的讨论,大概的意思是说把隧道的第一个数据包当成请求路径给发到服务器。

相当于第一个数据包的内容是 [SYN_with_fast_open+ws的握手请求+请求路径里放第一个数据包]

请输入图片描述

修改配置同时开启earlyData和TFO
同时

添加新评论

电子邮件地址不会被公开,评论内容可能需要管理员审核后显示。