服务器入门必看

锐一网络为您解答服务器的疑难杂症

服务热线:400-920-4021

TCP的三次握手
1742017-12-01

所有TCP连接一开始都要经过三次握手。客户端与服务器在交换应用数据之前,必须就起始分组序列号,以及其他一些连接相关的细节达成一致。出于安全考虑,序列号由两端随机生成。

①SYN:客户端选择一个随机序列号x,并发送一个SYN分组,其中可能还包括其他TCP标志和选项。

②SYNACK:服务器给x加1,并选择自己的一个随机序列号y,追加自己的标志和选项,然后返回响应。

③ACK:客户端给x和y加1并发送握手期间的最后一个ACK分组。

三次握手完成后,客户端与服务器之间就可以通信了。客户端可以在发送ACK分组之后立即发送数据,而服务器必须等接收到ACK分组之后才能发送数据。这个启动通信的过程适用于所有TCP连接,因此对所有使用TCP的应用具有非常大的性能影响,因为每次传输应用数据之前,都必须经历一次完整的往返。

TCP的三次握手

举个例子,如果客户端在纽约,服务器在伦敦,要通过光纤启动一次新的TCP连接,光三次握手至少就要花56ms:向伦敦发送分组需要28ms,响应发回纽约又要28ms。在此,连接的带宽对时间没有影响,延迟完全取决于客户端和服务器之间的往返时间,这其中主要是纽约到伦敦之间的传输时间。三次握手带来的延迟使得每创建一个新TCP连接都要付出很大代价。而这也决定了提高TCP应用性能的关键,在于想办法重用连接。

遗憾的是,连接并不是想重用就可以重用的。事实上,由于非常短的TCP连接在互联网上随处可见,握手阶段已经成为影响网络总延迟的一个重要因素。为解决这个问题,人们正在积极寻找各种方案,其中TFO(TCPFastOpen,TCP快速打开)就是这样一种机制,它致力于减少新建TCP连接带来的性能损失。经过流量分析和网络模拟,谷歌研究人员发现TFO平均可以降低HTTP事务网络延迟15%、整个页面加载时间10%以上。在某些延迟很长的情况下,降低幅度甚至可达40%。

Linux3.7及之后的内核已经在客户端和服务器中支持TFO,因此成为了客户端和服务器操作系统选型的有力候选方案。即便如此,TFO并不能解决所有问题。它虽然有助于减少三次握手的往返时间,但却只能在某些情况下有效。比如,随同SYN分组一起发送的数据净荷有最大尺寸限制、只能发送某些类型的HTTP请求,以及由于依赖加密cookie,只能应用于重复的连接。要了解有关TFO容量及局限性的更多细节,请参考IETF最新的“TCPFastOpen”草案。

TCP传输,三次握手

关注我们

关于我们

  • 400热线:400-920-4021
  • 电话:0755-33076677
  • 邮箱:info@a166.com
  • 地址:深圳市福田区彩莲路天隆大厦1507

产品销售

售后服务

  • 售后 锐一售后客服
  • 售后 锐一售后客服

增值服务

  • 证书 SSL
收缩