参考文章:
https://www.geeksforgeeks.org/tcp-3-way-handshake-process/
https://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml
传输控制协议中的TCP三向握手(也称为TCP握手;三消息握手和/或SYN-SYN-ACK)是TCP通过基于Internet协议的网络建立TCP / IP连接的方法。 TCP的三向握手技术通常称为“ SYN-SYN-ACK”(或更准确地说是SYN,SYN-ACK,ACK),因为TCP传输了三种消息来协商和启动两台计算机之间的TCP会话。 TCP握手机制经过设计,因此,尝试进行通信的两台计算机可以在传输SSH和HTTP Web浏览器请求之类的数据之前,协商网络TCP套接字连接的参数。
这也可以看作是建立TCP连接的一种方式。 在进入细节之前,让我们看一些基础知识。 TCP代表传输控制协议,该协议表示它做了一些事情以可靠的方式控制数据的传输。
互联网上设备之间的通信过程根据当前的TCP/IP套件模型(OSI参考模型的精简版)进行。 应用程序层是TCP/IP模型的顶层堆栈,在该层中,网络引用的应用程序(如客户端上的Web浏览器)与服务器建立连接。 信息从应用程序层传输到传输层,在这里我们的主题成为现实。 该层的两个重要协议是TCP,UDP(用户数据报协议),而TCP在其中很普遍(因为它为建立的连接提供了可靠性)。 但是,您可以在查询DNS服务器中找到UDP的应用程序,以获取与该网站使用的域名的二进制等效项。
TCP通过称为“带重传的肯定确认”(PAR)的方式提供可靠的通信。 传输层的协议数据单元(PDU)称为段。 现在,使用PAR的设备重新发送数据单元,直到它收到确认为止。 如果在接收器端接收的数据单元已损坏(它使用用于错误检测的传输层的校验和功能检查数据),则接收器将丢弃该段。 因此,发送方必须重新发送未收到肯定确认的数据单元。 通过上述机制,您可以实现在发送方(客户端)和接收方(服务器)之间交换三个段,以建立可靠的TCP连接。 让我们研究一下这种机制是如何工作的:
- 步骤1(SYN):第一步,客户端要与服务器建立连接,因此它发送带有SYN(同步序列号)的段,该段通知服务器客户端可能开始通信以及以什么序列号开始段。
- 步骤2(SYN + ACK):服务器通过设置SYN-ACK信号位来响应客户端请求。 Acknowledgement(ACK)表示接收到的段的响应,SYN表示可能以哪个序列号开始的段,ack是在接收到的seq上加1。
- 步骤3(ACK):在最后一部分,客户端确认服务器的响应,并且它们都建立了可靠的连接,通过它们它们将开始实际的数据传输。
步骤1、2建立一个方向的连接参数(序列号),并确认该参数。 步骤2、3为另一个方向建立连接参数(序列号),并确认该参数。 利用这些,建立了全双工通信。
注:在客户端和服务器之间建立连接时,会随机选择初始序列号seq,在TCP头中可以设置SYN和ACK位,设置为1。