TCP连接的三次握手与四次挥手详解

TCP(传输控制协议)是实现可靠数据传输的重要协议之一。TCP协议的设计之初就考虑到了数据在传输过程中的可靠性和完整性,而三次握手和四次挥手就是实现这一目的的基础机制。

TCP的基本概念

TCP是一种面向连接的协议,这意味着在数据传输之前,通信的双方必须首先建立一条连接。TCP协议还保证了数据的顺序传输和完整性控制,这些特性使得TCP被广泛应用于需要高可靠性的场合,如网页浏览、文件传输和电子邮件等。

三次握手

三次握手的流程

三次握手是指在建立TCP连接时,通信的双方需要进行三次数据交换。其具体流程如下:

第一步 - 客户端发送SYN

  • 客户端发送一个SYN(同步序列编号)包给服务器,用于请求建立连接。此时,客户端进入SYN_SEND状态。该包中的序列号(seq)为x。

第二步 - 服务器响应SYN-ACK

  • 服务器收到SYN包后,发送一个SYN-ACK包来确认连接请求,同时也向客户端请求建立连接。此时,服务器进入SYN_RECV状态。该包的序列号为y,确认号为x + 1。

第三步 - 客户端发送ACK

  • 客户端收到服务器的SYN-ACK包后,发送一个ACK包进行确认,进入ESTABLISHED状态。此时,确认号为y + 1。

三次握手的目的

三次握手的主要目的包括:

  • 确认双方可通信:通过交换SYN和ACK包保证双方能力和状态均善,有助于后续的数据传输。
  • 建立初始序列号:双方在建立连接时确定初始序列号,这对于后续的数据传输至关重要,确保数据的顺序和完整性。
  • 防止重复连接请求:在连接的建立过程中,当服务器的SYN-ACK包发出后,如果因某种原因未能及时收到ACK,可能会导致重复的连接请求,这一过程保证在网络故障后的有效重传。

四次挥手

四次挥手的流程

四次挥手是指在关闭TCP连接时,通信的双方需要进行四次数据交换。其具体步骤如下:

第一步 - 客户端发送FIN

  • 当客户端希望终止连接时,发送一个FIN(结束)包,告诉服务器它已经没有数据要发送了。此时,客户端进入FIN_WAIT_1状态。

第二步 - 服务器响应ACK

  • 服务器收到FIN包后,发送一个ACK包确认。此时,服务器进入CLOSE_WAIT状态,客户端进入FIN_WAIT_2状态。确认号为u + 1。

第三步 - 服务器发送FIN

  • 服务器完成数据传输后,发送一个FIN包给客户端,表示服务器也没有数据要发送了。此时,服务器进入LAST_ACK状态。

第四步 - 客户端响应ACK

  • 客户端收到FIN包后,发送一个ACK包确认,进入TIME_WAIT状态。将确认号设置为w + 1。经过一段时间后,客户端最终关闭连接,进入CLOSED状态。

四次挥手的目的

四次挥手的主要目的有:

  • 确保数据的完整性:在关闭连接之前,确保双方已完成所有数据的传输,防止数据丢失。
  • 有序的关闭连接:通过四次挥手的机制,保证双方都能有序地终止连接。
  • 资源的释放:在双方确认完数据传输后,才能释放各自的资源,以免造成资源的浪费。

TCP的状态转换

连接建立阶段状态

  • CLOSED:没有连接,初始化状态。
  • SYN_SENT:客户端已经发送SYN并等待ACK。
  • SYN_RECEIVED:服务器已接收到SYN并发送ACK。

连接终止阶段状态

  • FIN_WAIT_1:客户端发送FIN并等待ACK。
  • FIN_WAIT_2:客户端收到ACK,等待服务器的FIN。
  • CLOSE_WAIT:服务器收到FIN并发送ACK,等待应用程序关闭连接。
  • LAST_ACK:服务器发送FIN等待最后的ACK。
  • TIME_WAIT:客户端等待足够的时间,以确保数据和确认被正确传输,避免数据冲突。

三次握手与四次挥手的区别

三次握手 四次挥手
目的 建立TCP连接 终止TCP连接
操作次数 三次 四次
初始状态 从CLOSED到ESTABLISHED 从ESTABLISHED到CLOSED
包的类型 SYN, SYN-ACK, ACK FIN, ACK, FIN, ACK
控制权 客户端首次发起连接请求,服务器回应 客户端和服务器都可以主动关闭连接
连接的完整性 确保双方可以互相通信,建立有效的连接 确保双方都能完成数据传输,之后安全关闭连接

TCP的优势与局限

优点:

  • 可靠性:TCP通过数据包的确认、重发机制,确保数据的可靠性。
  • 有序传输:TCP会根据序列号管理数据的发送顺序,避免数据乱序的问题。
  • 流量控制:TCP使用滑动窗口的机制进行流量控制,有效管理发送者的传输速率。
  • 拥塞控制:能够动态调整数据传输速率,根据网络状态控制拥塞。

局限:

  • 延迟增加:在高延迟的网络中,TCP的握手和挥手机制会增加连接建立和终止的时间。
  • 资源消耗:由于要求维护连接状态,TCP对系统资源的占用较大。
  • 不适用于实时传输:如视频流、语音通信等对延迟要求极高的应用场合,TCP可能无法满足需求。

上一篇:幸存者游戏(类)


下一篇:芋道前端utils文件夹-三、constants.ts