TCP(Transmission Control Protocol)传输控制协议

TCP(传输控制协议)是一个面向连接、可靠的传输层协议,广泛用于互联网和局域网中。TCP 在保证数据准确性、完整性和顺序的基础上,提供可靠的数据传输。它常用于需要高可靠性的数据传输应用,例如网页浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP、POP3)等。

TCP 的核心特性:

1.面向连接(Connection-Oriented):

  • 在数据传输前,客户端和服务器必须建立连接,连接的建立过程称为“握手”。
  • 在数据传输完成后,连接需要被“关闭”。

2.可靠性:

  • TCP 确保数据的可靠传输。它通过确认机制(ACK)来确保数据包的到达,丢失的数据包会被重新传输。
  • 发送方发送数据包时,接收方会发送确认消息(ACK)给发送方,确认收到的数据包。如果发送方没有收到确认,它会重新发送数据包。

3.数据顺序:

  • TCP 保证数据包按顺序到达接收方。如果数据包乱序到达,接收方会重新排序。

4.流量控制:

  • TCP 使用滑动窗口机制控制数据流量。接收方可以告知发送方它的接收缓冲区大小,避免接收方因无法处理数据而丢包。

5.拥塞控制:

  • TCP 具有拥塞控制机制,可以根据网络的拥堵情况动态调整发送数据的速度,防止网络过载。

6.全双工通信:

  • TCP 支持全双工通信,即双方可以同时发送和接收数据。

7.差错检查:

  • 每个数据包都包含校验和,接收方通过校验和验证数据是否发生错误。

8.流量控制与拥塞控制:

  • 流量控制:通过滑动窗口调整发送速率,确保接收方能够处理数据。
  • 拥塞控制:使用如慢启动、拥塞避免、快速重传等机制来调节发送速率,避免网络拥塞。

TCP 的工作流程:

1. 三次握手(建立连接)

TCP 连接的建立使用三次握手的方式,确保双方准备好建立连接,并同步双方的序列号。

  • 第一次握手:客户端发送一个 SYN 包(同步请求)给服务器,请求建立连接,客户端进入 SYN_SENT 状态。
  • 第二次握手:服务器收到 SYN 包后,发送一个 SYN-ACK 包作为回应,表示同意建立连接,并进入 SYN_RECEIVED 状态。
  • 第三次握手:客户端收到服务器的 SYN-ACK 包后,发送一个 ACK 包,表示确认收到并完成连接的建立。此时,客户端和服务器都进入 ESTABLISHED 状态,连接建立成功。

2. 数据传输(可靠数据传输)

  • 在连接建立后,TCP 会开始传输数据。每个数据包都有一个序列号,用于标识数据包的顺序。
  • 接收方通过 ACK 包确认每个收到的数据包。如果某个数据包没有收到确认,发送方会重新发送该数据包。
  • 通过流量控制,接收方能够告知发送方它的缓冲区大小,防止数据溢出。

3. 四次挥手(断开连接)

当传输完成后,TCP 连接需要被关闭。这个过程叫做四次挥手:

  • 第一次挥手:主动关闭连接的一方(例如客户端)发送一个 FIN 包,表示不再发送数据。
  • 第二次挥手:接收方(服务器)收到 FIN 包后,发送一个 ACK 包,确认收到关闭连接的请求,客户端进入 FIN_WAIT_2 状态。
  • 第三次挥手:接收方(服务器)准备关闭连接时,发送一个 FIN 包给客户端,表示它也不再发送数据。
  • 第四次挥手:客户端收到 FIN 包后,发送 ACK 包确认关闭,连接彻底关闭。

TCP 的重要机制:

1. 序列号与确认机制(Reliability)

  • 序列号:TCP 将数据拆分成小的段进行传输,每个段都有一个序列号。序列号保证了接收方能按顺序重组数据。
  • 确认(ACK):接收方在收到数据后,发送 ACK 包,告诉发送方自己已经收到数据并确认。确认包会携带下一个期望接收的序列号。

2. 滑动窗口(Flow Control)

滑动窗口是流量控制的一种机制,允许接收方动态调整接收窗口的大小,告诉发送方自己能够处理多少数据。这样可以防止接收方的缓冲区溢出,避免丢包。

3. 拥塞控制(Congestion Control)

TCP 使用多种算法来应对网络拥塞问题:

  • 慢启动:初始时发送数据的速率较低,每收到一次 ACK,发送方就将发送窗口大小增加。
  • 拥塞避免:当发生拥塞时,TCP 会减慢数据发送速率。
  • 快速重传与快速恢复:当发送方发现数据包丢失时,会立即重传,并快速恢复数据传输。

4. 超时与重传(Timeout and Retransmission)

  • 当发送方发送数据包后,如果没有收到接收方的 ACK 确认,发送方会设定一个超时值,超时后会重新发送数据包。

TCP 应用实例:

  1. HTTP/HTTPS(网页浏览):网页的请求和响应都基于 TCP 进行。由于需要可靠性和数据完整性,TCP 是 HTTP 的基础协议。
  2. FTP(文件传输协议):文件的上传和下载通常使用 TCP 协议,确保文件的传输过程可靠且按顺序。
  3. SMTP(邮件传输协议):电子邮件的发送过程使用 TCP 协议,保证邮件的顺利到达。
  4. SSH(安全外壳协议):远程登录服务通常使用 TCP 连接,确保数据的安全与可靠传输。
  5. Telnet:用于远程管理系统的协议,依赖 TCP 保证交互式会话的可靠性。

TCP 与 UDP 的对比:

连接方式

面向连接(需要握手)

无连接(直接发送数据)

可靠性

可靠,保证数据按顺序传输且不丢失

不可靠,可能丢包或乱序

顺序保证

保证顺序(通过序列号和重传机制)

不保证顺序

流量控制

有流量控制(滑动窗口机制)

无流量控制

拥塞控制

有拥塞控制机制

无拥塞控制

数据包大小

包头较大(至少 20 字节)

包头较小(8 字节)

传输效率

较低,因确认、重传等操作增加了开销

较高,适合需要低延迟的应用

适用场景

需要可靠传输、数据完整性的场景

需要低延迟、实时性的场景

总结

TCP 是一种可靠、面向连接的协议,适用于需要高可靠性、顺序性的数据传输场景。它通过三次握手建立连接、通过确认机制确保数据传输的可靠性、通过滑动窗口控制流量并且通过拥塞控制调整数据传输速率。在数据传输时,TCP 保证数据包的顺序和完整性,使其成为大多数应用(如 Web、文件传输、电子邮件等)的首选协议。

全部评论

相关推荐

05-25 10:45
门头沟学院 Java
Frank_zhang:没实习一个项目肯定不够,可以再做一个轮子,技术栈再补一个mq,微服务,整体再换个简历模板,暑期尽量再找一个日常实习
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务