fbpx
维基百科

TCP快速打开

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]

过程 编辑

请求Fast Open Cookie 编辑

  1. 客户端发送SYN数据包,该数据包包含Fast Open选项,且该选项的Cookie为空,这表明客户端请求Fast Open Cookie;
  2. 支持TCP Fast Open的服务器生成Cookie,并将其置于SYN-ACK数据包中的Fast Open选项以发回客户端;
  3. 客户端收到SYN-ACK后,缓存Fast Open选项中的Cookie。

实施TCP Fast Open 编辑

以下描述假定客戶端在此前的TCP連接中已完成請求Fast Open Cookie的過程並存有有效的Fast Open Cookie。

  1. 客户端发送SYN数据包,该数据包包含数据(对于非TFO的普通TCP握手过程,SYN数据包中不包含数据)以及此前记录的Cookie;
  2. 支持TCP Fast Open的服务器会对收到Cookie进行校验:如果Cookie有效,服务器将在SYN-ACK数据包中对SYN和数据进行确认(Acknowledgement),服务器随后将数据递送至相应的应用程序;否则,服务器将丢弃SYN数据包中包含的数据,且其随后发出的SYN-ACK数据包将仅确认(Acknowledgement)SYN的对应序列号;
  3. 如果服务器接受了SYN数据包中的数据,服务器可在握手完成之前发送数据;
  4. 客户端将发送ACK确认服务器发回的SYN以及数据,但如果客户端在初始的SYN数据包中发送的数据未被确认,则客户端将重新发送数据;
  5. 此后的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]

替代品 编辑

TCP快速打开(TFO)类似一项1994年被称作T/TCPRFC 1644)的提议,但由于它未考虑安全原因而存在漏洞,所以未被广泛使用。

参见 编辑

参考文献 编辑

  1. ^ Kerrisk, Michael. TCP Fast Open: expediting web services. LWN.net. 2012-08-01 [2014-12-03]. (原始内容于2014-12-05). 
  2. ^ Radhakrishnan S, Cheng Y, Chu J, Jain A, Raghavan B. TCP Fast Open (PDF). ACM CoNEXT. 2011-12-06 [2014-12-03]. (原始内容 (PDF)于2012-10-29). 
  3. ^ Cheng Y, Chu J, Radhakrishnan S, Jain A. TCP Fast Open. IETF. 2013-01-26. I-D draft-ietf-tcpm-fastopen-06. 
  4. ^ 4.0 4.1 Yuchung Cheng, Jerry Chu, Sivasankar Radhakrishnan, and Arvind Jain. TCP Fast Open. IETF. December 2014 [10 January 2015]. (原始内容于2015-01-01). 
  5. ^ Kerrisk, Michael. TCP Fast Open: expediting web services. LWN.net. 2012-08-01 [2014-12-03]. (原始内容于2014-12-05). The client-side support has been merged for Linux 3.6 
  6. ^ Vaughan-Nichols, Steven J. Linux 3.7 arrives, ARM developers rejoice. Linux and Open Source (ZDNet). 2012-12-11 [2014-12-03]. (原始内容于2014-11-05). Linux 3.7. TCP Fast Open will now be supported on servers 
  7. ^ Linux Kernel 3.13. kernelnewbies.org. 19 January 2014 [11 February 2014]. (原始内容于2014-01-25).  |section=被忽略 (帮助)
  8. ^ Linux Kernel 3.16. kernelnewbies.org. 3 August 2014 [14 September 2014]. (原始内容于2014-12-15).  |section=被忽略 (帮助)
  9. ^ . svnweb.freebsd.org. [2017-08-06]. (原始内容存档于2021-05-27) (英语). 
  10. ^ [base] Revision 292706. svnweb.freebsd.org. [2017-08-06]. (原始内容于2018-02-18) (英语). 
  11. ^ 1188435 - Support TCP fastopen. bugzilla.mozilla.org. [2017-08-06]. (原始内容于2017-09-09) (英语). 
  12. ^ . lists.exim.org. [2017-08-06]. (原始内容存档于2021-05-27) (英语). 
  13. ^ Release Notes for BIND Version 9.11.0. [2016-10-05]. (原始内容于2016-10-21). 
  14. ^ Your App and Next Generation Networks. Apple Inc. 2015 [2016-12-10]. (原始内容于2015-06-15). 
  15. ^ Windows 10 build 14352 - New web platform features. Microsoft. [2016-05-27]. (原始内容于2016-06-30). 

tcp快速打开, 英語, fast, open, 简称tfo, 是对计算机网络中传输控制协议, 连接的一种简化握手手续的拓展, 用于提高两端点间连接的打开速度, 它通过握手开始时的syn包中的tfo, cookie, 一个tcp选项, 来验证一个之前连接过的客户端, 如果验证成功, 它可以在三次握手最终的ack包收到之前就开始发送数据, 这样便跳过了一个绕路的行为, 更在传输开始时就降低了延迟, 这个加密的cookie被存储在客户端, 在一开始的连接时被设定好, 然后每当客户端连接时, 这个cookie被重复返回,. 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 目录 1 过程 1 1 请求Fast Open Cookie 1 2 实施TCP Fast Open 2 实现 3 替代品 4 参见 5 参考文献过程 编辑请求Fast Open Cookie 编辑 客户端发送SYN数据包 该数据包包含Fast Open选项 且该选项的Cookie为空 这表明客户端请求Fast Open Cookie 支持TCP Fast Open的服务器生成Cookie 并将其置于SYN ACK数据包中的Fast Open选项以发回客户端 客户端收到SYN ACK后 缓存Fast Open选项中的Cookie 实施TCP Fast Open 编辑 以下描述假定客戶端在此前的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 的提议 但由于它未考虑安全原因而存在漏洞 所以未被广泛使用 参见 编辑SPDY SYN cookies TCP Cookie 传输参考文献 编辑 Kerrisk Michael TCP Fast Open expediting web services LWN net 2012 08 01 2014 12 03 原始内容存档于2014 12 05 Radhakrishnan S Cheng Y Chu J Jain A Raghavan B TCP Fast Open PDF ACM CoNEXT 2011 12 06 2014 12 03 原始内容存档 PDF 于2012 10 29 Cheng Y Chu J Radhakrishnan S Jain A TCP Fast Open IETF 2013 01 26 I D draft ietf tcpm fastopen 06 4 0 4 1 Yuchung Cheng Jerry Chu Sivasankar Radhakrishnan and Arvind Jain TCP Fast Open IETF December 2014 10 January 2015 原始内容存档于2015 01 01 Kerrisk Michael TCP Fast Open expediting web services LWN net 2012 08 01 2014 12 03 原始内容存档于2014 12 05 The client side support has been merged for Linux 3 6 Vaughan Nichols Steven J Linux 3 7 arrives ARM developers rejoice Linux and Open Source ZDNet 2012 12 11 2014 12 03 原始内容存档于2014 11 05 Linux 3 7 TCP Fast Open will now be supported on servers Linux Kernel 3 13 kernelnewbies org 19 January 2014 11 February 2014 原始内容存档于2014 01 25 section 被忽略 帮助 Linux Kernel 3 16 kernelnewbies org 3 August 2014 14 September 2014 原始内容存档于2014 12 15 section 被忽略 帮助 base Revision 292823 svnweb freebsd org 2017 08 06 原始内容存档于2021 05 27 英语 base Revision 292706 svnweb freebsd org 2017 08 06 原始内容存档于2018 02 18 英语 1188435 Support TCP fastopen bugzilla mozilla org 2017 08 06 原始内容存档于2017 09 09 英语 exim Exim 4 88 released lists exim org 2017 08 06 原始内容存档于2021 05 27 英语 Release Notes for BIND Version 9 11 0 2016 10 05 原始内容存档于2016 10 21 Your App and Next Generation Networks Apple Inc 2015 2016 12 10 原始内容存档于2015 06 15 Windows 10 build 14352 New web platform features Microsoft 2016 05 27 原始内容存档于2016 06 30 取自 https zh wikipedia org w index php title TCP快速打开 amp oldid 71685758, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。