网站首页 > 文章精选 正文
为什么会提出TCP Fast Open(TFO)?
在传统的TCP连接建立过程中,客户端首先发送一个SYN包给服务器,服务器回复一个SYN-ACK包,然后客户端再回复一个ACK包,这样就完成了三次握手,建立了TCP连接。这种方式的缺点在于,连接建立的时间取决于RTT(Round-Trip Time,往返时间),在网络延迟较大的情况下,建立连接的时间就会较长。
TFO的目的就是为了加速TCP连接建立的过程,允许客户端在发送SYN包时,就将应用层数据一并发送给服务器,服务器收到后就可以立即开始处理数据,而不必等待客户端再发送ACK包。这样就可以减少一次RTT的时间,加快连接建立的速度。
如何开启TFO?
首先我们看看TCP的头部格式:
其中选项这个属性包含了许多种提高TCP性能的方法,我们今天要说的TFO也是在这个地方开启。先看看选项包含了哪些功能:
也就是说,要开启TFO功能,客户端发送的TCP包需要启用选项功能。
开启TFO之后是如何建立链接的?
在客户端首次建立连接时的过程:
- 客户端发送 SYN 报文,该报文需要启动Options,且包含 Fast Open 选项,该选项的 Cookie 为空,这表明客户端请求开启TFO。
- 支持 TCP Fast Open 的服务器生成 Cookie,并将其置于 SYN-ACK 数据包中的 Fast Open 选项以发回客户端。
- 客户端收到 SYN-ACK 后,本地缓存 Fast Open 选项中的 Cookie。
第一次发起请求的时候,需要正常的三次握手流程。
之后客户端再次向服务器建立连接时的过程:
- 客户端发送 SYN 报文,该报文可以包含应用层数据以及首次建立链接时缓存记录的 Cookie。
- 服务器收到 SYN 报文后,会校验 Cookie 的有效性:如果有效,服务器会在 SYN-ACK 报文中确认 SYN 和数据,并将数据递送至相应的应用程序;如果无效,服务器将丢弃 SYN 报文中包含的数据,并仅在 SYN-ACK 报文中确认 SYN。
- 如果服务器接受了 SYN 报文中的数据,则可以在握手完成之前发送数据,从而减少一个 RTT 的时间。
- 客户端会发送 ACK 报文来确认服务器发回的 SYN 和数据,如果数据未被确认,则客户端会重新发送数据。
- 随后,TCP 连接的数据传输过程就和正常情况下的 TFO 一致。
风险
TFO的建立连接的过程比传统的三次握手快,因为减少了一次RTT的时间。但是,TFO还存在一些风险,如服务器端开启TFO后,在收到SYN包时就开始处理应用层数据,如果客户端发送的数据是恶意数据,服务器就会受到攻击。为了防止这种情况的发生,TFO还有一些额外的安全机制,比如Cookie机制,来确保连接的安全性
猜你喜欢
- 2025-02-03 「ModbusTCP协议详解」内容有点多,但讲得很详细
- 2025-02-03 tcpdump抓udp包示例 及IP、TCP、UDP协议格式
- 2025-02-03 网络隐蔽通道构建关键技术研究综述
- 2025-02-03 为什么TCP要做成流式协议,而非包?
- 2025-02-03 计算机网络中MSS和MTU的区别(mss与mtu区别及对应关系)
- 2025-02-03 存储FC 网络(简述存储网络引入fc后的优点有哪些)
- 2025-02-03 苹果iphone12充电器品牌选择哪个 充电器功率推荐
- 2025-02-03 作为一名架构师,需要掌握的一些基础网络知识
- 2025-02-03 计算机网络参考模型(计算机网络参考模型有哪些)
- 2025-02-03 关于TCP协议的基础知识(关于tcp/ip协议)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)