TCP 协议概述

TCP 协议概述

TCPTransmission Control Protocol)是传输层协议之一,提供可靠的、面向连接的数据传输服务。TCP 协议确保了从发送方到接收方的数据传输是可靠的,且能够在网络中发生丢失、乱序或错误时,自动进行重传和排序,以确保接收方收到的数据是完整和准确的。

TCP 是基于 IP 协议Internet Protocol)之上的,因此 TCP/IP 协议族中的其他协议(如 HTTP、FTP、SMTP 等)大多数都是在 TCP 协议之上进行通信的。

TCP 协议的核心特点

  1. 可靠性

    • 错误校验:每个数据包都有校验和,用于验证数据的完整性。
    • 确认机制:接收方在收到数据后会发送确认(ACK)信息。如果发送方没有收到确认,就会重新发送数据。
    • 重传机制:如果数据包在传输过程中丢失,发送方会重新发送数据包,直到收到确认。
  2. 面向连接

    • 在传输数据之前,TCP 会先进行连接的建立,保证双方能够相互通信。连接的建立是通过“三次握手”(Three-Way Handshake)实现的。
    • 在通信结束时,TCP 会执行四次挥手Four-Way Handshake)来关闭连接,确保双方都不再发送数据。
  3. 流量控制

    • TCP 会根据接收方的接收能力来调节发送方的数据发送速率,避免接收方因处理不过来而丢失数据。
  4. 拥塞控制

    • TCP 会根据网络的当前状况(如网络拥塞)来调整发送数据的速度,避免过多的数据造成网络过载。
  5. 数据有序

    • TCP 会对数据包进行编号并确保它们按顺序到达接收方。即使数据包在网络中乱序,TCP 也会将它们重新排序。

TCP 连接的建立:三次握手(Three-Way Handshake)

建立一个 TCP 连接时,需要经过三次握手的过程:

  1. 客户端发送 SYN

    • 客户端向服务器发送一个 SYN(同步)报文,表示客户端希望建立连接。此时客户端处于 SYN_SENT 状态。
  2. 服务器响应 SYN-ACK

    • 服务器收到客户端的 SYN 后,回应一个 SYN-ACK(同步-确认)报文,表示同意建立连接。此时,服务器处于 SYN_RECEIVED 状态。
  3. 客户端确认 ACK

    • 客户端收到服务器的 SYN-ACK 后,向服务器发送一个 ACK(确认)报文,表示客户端已准备好进行数据传输。此时,客户端进入 ESTABLISHED(已建立)状态,连接建立成功。

通过这三次握手,客户端和服务器双方确认了对方的接收和发送能力,确保连接的可靠性。

TCP 连接的关闭:四次挥手(Four-Way Handshake)

TCP 连接的关闭过程是四次挥手:

  1. 主动关闭方发送 FIN

    • 一方(例如客户端)通过发送一个 FIN(结束)报文,表示它已经没有数据要发送了,并希望关闭连接。此时,客户端进入 FIN_WAIT_1 状态。
  2. 对方确认 ACK

    • 服务器收到 FIN 后,发送一个 ACK(确认)报文,表示已收到客户端的关闭请求。此时,服务器处于 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。
  3. 服务器发送 FIN

    • 服务器准备好关闭连接后,发送一个 FIN(结束)报文,表示它也没有数据要发送了,准备关闭连接。
  4. 客户端确认 ACK

    • 客户端收到服务器的 FIN 后,发送一个 ACK(确认)报文,确认连接关闭。此时,客户端进入 TIME_WAIT 状态,等待足够时间确保服务器收到最后的 ACK 报文后,连接完全关闭。

完成四次挥手后,连接关闭。

TCP 数据传输流程

TCP 连接建立并处于 ESTABLISHED 状态时,双方可以开始进行数据传输。数据传输过程中,TCP 会做以下几件事情:

  1. 数据分段

    • TCP 会将要发送的数据拆分为大小合适的数据段(称为 segment)。每个数据段都会包含一个头部,其中包括序列号、确认号、数据校验和等信息。
  2. 流量控制

    • 在数据传输过程中,接收方会告知发送方它的接收窗口大小,发送方根据接收窗口的大小来控制发送数据的量,防止接收方缓冲区溢出。
  3. 确认和重传

    • 发送方每发送一个数据段后,接收方会发送一个确认报文(ACK),确认已收到的数据段。如果发送方没有收到确认报文,或者确认报文的序列号不正确,它将重新发送该数据段。
  4. 顺序传输

    • 如果数据在网络中发生了乱序,接收方会根据 TCP 数据包中的序列号重新排序数据,保证应用层收到的是有序的数据。

TCP 滚动窗口与流量控制

  • 滑动窗口(Sliding Window):在 TCP 中,滑动窗口是一个动态变化的机制,表示可以发送多少字节的数据而不需要等待对方的确认。它允许发送方在没有收到确认的情况下发送多个数据包,从而提高效率。

  • 接收方的流量控制:接收方通过 窗口大小 告知发送方它能够接受的最大数据量,发送方只能发送接收方指定窗口大小的数据量。

拥塞控制

TCP 的拥塞控制算法通过监控网络的状况(如网络延迟和丢包情况)来动态调整数据发送速率,避免过多的数据涌入导致网络拥塞。常见的拥塞控制算法有 慢启动(Slow Start)拥塞避免(Congestion Avoidance)快速重传(Fast Retransmit)快速恢复(Fast Recovery) 等。

TCP 协议中,以下是常见控制位的全称:

  1. SYNSynchronize):同步控制位,用于建立连接时的同步阶段。客户端向服务器发送 SYN 报文时,表示希望与服务器建立连接。

  2. ACKAcknowledge):确认控制位,用于确认收到的数据包。当接收到的数据包是有效的时,接收方会发送一个 ACK 报文,表示确认收到数据。

  3. FINFinish):结束控制位,用于连接关闭阶段。当一方没有数据要发送时,会发送 FIN 报文,表示关闭连接,准备终止通信。

这些标志位在 TCP 协议的报文头部中用于表示连接的状态和控制信号。

总结

  • TCP 是一个可靠的、面向连接的协议,在数据传输时通过三次握手建立连接,四次挥手关闭连接。
  • 流量控制、拥塞控制和数据顺序保证TCP 的三大核心特性,确保数据在复杂网络环境下可靠传输。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。