TCP三次握手过程
字数 824 2025-11-02 08:11:07

TCP三次握手过程

TCP三次握手是建立TCP连接的过程,用于在客户端和服务器之间同步序列号、交换窗口大小等信息,确保双方都能够正常发送和接收数据。这个过程发生在客户端尝试与服务器建立连接时。

第一步:客户端发送SYN报文

  • 客户端选择一个初始序列号(ISN),比如x,并将SYN标志位设置为1,表示这是一个连接请求报文。
  • 客户端将SYN报文发送给服务器,进入SYN_SENT状态。
  • 此时,客户端告诉服务器:“我想建立连接,我的序列号从x开始。”

第二步:服务器回复SYN-ACK报文

  • 服务器收到SYN报文后,如果同意建立连接,会回复一个SYN-ACK报文。
  • 服务器选择自己的初始序列号(ISN),比如y,并将SYN标志位设置为1;同时,将ACK标志位设置为1,确认号设置为x+1(表示期望收到客户端的下一个数据字节序列号为x+1)。
  • 服务器进入SYN_RCVD状态。
  • 此时,服务器告诉客户端:“我同意连接,我的序列号从y开始,并确认了你的序列号x。”

第三步:客户端发送ACK报文

  • 客户端收到SYN-ACK报文后,会发送一个ACK报文作为响应。
  • 客户端将ACK标志位设置为1,确认号设置为y+1(表示期望收到服务器的下一个数据字节序列号为y+1);序列号设置为x+1(因为第一步的SYN报文消耗了一个序列号)。
  • 客户端进入ESTABLISHED状态,表示连接已建立。
  • 服务器收到ACK后,也进入ESTABLISHED状态。
  • 此时,客户端告诉服务器:“我确认了你的序列号y,连接已建立。”

为什么需要三次握手?

  • 主要目的是防止旧的重复连接请求导致连接错误(例如,延迟的SYN报文被误认为是新请求),并确保双方都能确认对方的发送和接收能力正常。两次握手不够,因为服务器无法知道客户端是否收到了自己的SYN-ACK响应;三次握手通过客户端的最终确认,保证了连接的可靠性。

整个过程确保了TCP连接的双向通信基础,序列号同步后,双方即可开始数据传输。

TCP三次握手过程 TCP三次握手是建立TCP连接的过程,用于在客户端和服务器之间同步序列号、交换窗口大小等信息,确保双方都能够正常发送和接收数据。这个过程发生在客户端尝试与服务器建立连接时。 第一步:客户端发送SYN报文 客户端选择一个初始序列号(ISN),比如x,并将SYN标志位设置为1,表示这是一个连接请求报文。 客户端将SYN报文发送给服务器,进入SYN_ SENT状态。 此时,客户端告诉服务器:“我想建立连接,我的序列号从x开始。” 第二步:服务器回复SYN-ACK报文 服务器收到SYN报文后,如果同意建立连接,会回复一个SYN-ACK报文。 服务器选择自己的初始序列号(ISN),比如y,并将SYN标志位设置为1;同时,将ACK标志位设置为1,确认号设置为x+1(表示期望收到客户端的下一个数据字节序列号为x+1)。 服务器进入SYN_ RCVD状态。 此时,服务器告诉客户端:“我同意连接,我的序列号从y开始,并确认了你的序列号x。” 第三步:客户端发送ACK报文 客户端收到SYN-ACK报文后,会发送一个ACK报文作为响应。 客户端将ACK标志位设置为1,确认号设置为y+1(表示期望收到服务器的下一个数据字节序列号为y+1);序列号设置为x+1(因为第一步的SYN报文消耗了一个序列号)。 客户端进入ESTABLISHED状态,表示连接已建立。 服务器收到ACK后,也进入ESTABLISHED状态。 此时,客户端告诉服务器:“我确认了你的序列号y,连接已建立。” 为什么需要三次握手? 主要目的是防止旧的重复连接请求导致连接错误(例如,延迟的SYN报文被误认为是新请求),并确保双方都能确认对方的发送和接收能力正常。两次握手不够,因为服务器无法知道客户端是否收到了自己的SYN-ACK响应;三次握手通过客户端的最终确认,保证了连接的可靠性。 整个过程确保了TCP连接的双向通信基础,序列号同步后,双方即可开始数据传输。