热门问题
时间线
聊天
视角
TCP快速打开
是对传输控制协议连接的一种用于提高两终点间连续连接打开速度的一种拓展。 来自维基百科,自由的百科全书
Remove ads
TCP快速打开(英語:TCP Fast Open,简称TFO)是对计算机网络中传输控制协议(TCP)连接的一种简化握手手续的拓展,用于提高两端点间连接的打开速度。
它通过握手开始时的SYN包中的TFO cookie(一个TCP选项)来验证一个之前连接过的客户端。如果验证成功,它可以在三次握手最终的ACK包收到之前就开始发送数据,这样便跳过了一个绕路的行为,更在传输开始时就降低了延迟。这个加密的Cookie被存储在客户端,在一开始的连接时被设定好。然后每当客户端连接时,这个Cookie被重复返回。[1]
此Cookie通常采用一种分组密码,私钥由服务器根据客户端的IP地址保存,生成一个第三方难以仿冒的訊息鑑別碼标签,即便第三方可以伪造源IP地址或从其他IP地址制造到同一个服务器的连接。尽管使用了加密技术来生成cookie,但TFO并不着眼于提供比它所替换的三次握手有更多的安全性,并且不对所产生的TCP连接提供任何形式的加密保护或端点身份认证。它的目的不是为了抵挡中间人攻击。
这个协议最早提出于2011年[2] 并在2012年2月时已为一个IETF互联网草案,[3] 这项规范最终在2014年12月作为RFC 7413发布。[4]
Remove ads
过程
- 客户端发送SYN数据包,该数据包包含Fast Open选项,且该选项的Cookie为空,这表明客户端请求Fast Open Cookie;
- 支持TCP Fast Open的服务器生成Cookie,并将其置于SYN-ACK数据包中的Fast Open选项以发回客户端;
- 客户端收到SYN-ACK后,缓存Fast Open选项中的Cookie。
以下描述假定客戶端在此前的TCP連接中已完成請求Fast Open Cookie的過程並存有有效的Fast Open Cookie。
- 客户端发送SYN数据包,该数据包包含数据(对于非TFO的普通TCP握手过程,SYN数据包中不包含数据)以及此前记录的Cookie;
- 支持TCP Fast Open的服务器会对收到Cookie进行校验:如果Cookie有效,服务器将在SYN-ACK数据包中对SYN和数据进行确认(Acknowledgement),服务器随后将数据递送至相应的应用程序;否则,服务器将丢弃SYN数据包中包含的数据,且其随后发出的SYN-ACK数据包将仅确认(Acknowledgement)SYN的对应序列号;
- 如果服务器接受了SYN数据包中的数据,服务器可在握手完成之前发送数据;
- 客户端将发送ACK确认服务器发回的SYN以及数据,但如果客户端在初始的SYN数据包中发送的数据未被确认,则客户端将重新发送数据;
- 此后的TCP连接和非TFO的正常情况一致。
注:客户端在请求并存储了Fast Open Cookie之后,可以不断重复TCP Fast Open直至服务器认为Cookie无效(通常为过期)。[4]
实现
TFO的实现包括:
- TFO的IPv4支持在3.6(客户端)和3.7(服务端)版本中被合并进Linux内核主线[5][6][7]。IPv6服务器的TFO支持被合并进入3.16版本。[8]
- FreeBSD自10.3版本[9](支援服務端)和12.0版本(支援用戶端)开始支持TFO[10]。
- Mozilla Firefox 56支持TFO。[11]
- Google Chrome和Chromium浏览器在Linux上提供TFO支持,包括Chrome OS和Android。
- Exim(邮件传输代理)从4.88开始启用TFO。[12]
- BIND自9.11.0开始启用。[13]
- 苹果公司的iOS 9和OS X 10.11支持TCP快速打开,但并未为各连接默认启用。[14]
- Microsoft Edge从Windows 10 Preview build 14352开始支持TFO。[15]
替代品
TCP快速打开(TFO)类似一项1994年被称作T/TCP(RFC 1644)的提议,但由于它未考虑安全原因而存在漏洞,所以未被广泛使用。
参见
参考文献
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads