Skip to content

TCP 和 UDP 的区别

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种常用的传输层协议,分别适用于不同的应用场景。

知识点

  1. TCP 的三次握手

    • 三次握手用于建立连接,确保双方都能发送和接收数据。
    • 过程涉及同步和确认序列号,保证连接的可靠性。
  2. TCP 的四次挥手

    • 四次挥手用于关闭连接,确保数据的完整性并安全关闭连接。
    • 过程包括发送和确认 FIN 数据包,完成数据传输并释放资源。
  3. UDP 的特点

    • UDP 不保证数据的可靠性,适合实时通信或流量较高但对丢包容忍的场景。
    • 没有握手和挥手过程,因此传输速度较快。
  4. TCP 与 UDP 的比较

    • TCP 用于需要高可靠性和数据顺序的场合,而 UDP 用于实时性要求较高的应用。

TCP 详解

TCP(传输控制协议)是一种面向连接、可靠的协议。它通过一系列机制来确保数据的准确无误地传输。

特点

  • 面向连接:传输数据前需要三次握手建立连接,结束后通过四次挥手释放连接。
  • 提供可靠传输:支持顺序控制、重传机制和流量控制。
  • 数据以字节流形式传输,无数据边界。

三次握手(建立连接)

在 TCP 数据传输前,必须先通过三次握手来建立连接,以确保数据能够可靠地发送和接收。

  • SYN:客户端向服务器发送连接请求,发送一个带有 SYN 标志的数据包,并选择一个序列号 a
  • SYN + ACK:服务器收到客户端的 SYN 数据包后,回复一个带有 SYN 和 ACK 标志的数据包,确认客户端请求,序列号为 b,确认号为 a+1
  • ACK:客户端收到服务器的 SYN + ACK 数据包后,回复一个带有 ACK 标志的数据包,确认号为 b+1,序列号为 a+1

通过这三次交互,确保双方都准备好开始数据传输。

  1. 客户端发送 SYN 包:
    • 表示发起连接请求。
    • 包含序号(Seq=a)。
  2. 服务端返回 SYN+ACK 包:
    • 确认接收客户端请求并发起响应请求。
    • 包含序号(Seq=b),确认号(Ack=a+1)。
  3. 客户端返回 ACK 包:
    • 确认服务端响应。
    • 包含序号(Seq=a+1),确认号(Ack=b+1)。
    • 至此,连接建立成功。

数据传输中的重传机制

在 TCP 数据传输过程中,如果接收方没有收到数据包或数据包丢失,发送方会重传丢失的数据包。这样可以确保数据准确无误地传送到接收方。

四次挥手(关闭连接)

数据传输完成后,TCP 连接需要通过四次挥手来确保数据传输的完整性和关闭连接的过程。

  • FIN + ACK:主动关闭连接的一方(如客户端)发送一个带有 FIN 标志的数据包,表示数据发送完成,同时确认序列号 a,确认号为 b
  • ACK:另一方(如服务器)收到 FIN 数据包后,回复一个带有 ACK 标志的数据包,确认号为 a+1,序列号为 b
  • FIN:关闭连接的另一方(如服务器)也发送一个带有 FIN 标志的数据包,表示自己的数据也已发送完毕,确认号为 a+1,序列号为 b+1
  • ACK:主动关闭连接的一方(如客户端)收到 FIN 数据包后,回复一个带有 ACK 标志的数据包,确认号为 b+1,序列号为 a+1。此时,连接关闭。

通过这四次挥手,确保双方都完成数据传输,并且连接被安全地关闭。

  1. 客户端发送 FIN 包:
    • 请求断开连接。
    • 包含序号(Seq=a)。
  2. 服务端返回 ACK 包:
    • 确认断开请求。
    • 包含确认号(Ack=a+1)。
  3. 服务端发送 FIN 包:
    • 通知客户端其数据传输完成。
    • 包含序号(Seq=b)。
  4. 客户端返回 ACK 包:
    • 确认断开。
    • 包含确认号(Ack=b+1)。
    • 至此,连接释放成功。

典型应用场景

  • HTTP(S):用于网页浏览。
  • FTP:文件传输协议。
  • 邮件传输:如 SMTP、IMAP、POP3。

UDP 详解

UDP(用户数据报协议)是一种无连接、不可靠的协议。与 TCP 相比,UDP 更注重传输效率,并不保证数据的可靠性。UDP 的数据传输不进行连接建立或连接关闭过程,数据发送后没有确认,也没有重传机制。

特点

  1. 无连接:UDP 不需要先建立连接,数据可以直接发送给接收方。
  2. 不保证可靠性:UDP 不对数据进行校验和重传,因此不能保证数据的完整性。发送的数据包可能丢失,接收方也可能收到重复的数据包。
  3. 效率高:由于没有连接管理和重传机制,UDP 比 TCP 更加高效,适用于实时性要求较高的应用,如视频流、语音通信等。

典型应用场景

  • DNS 查询:快速解析域名。
  • 视频流传输:如在线视频。
  • 实时通信:如语音通话、在线游戏。

TCP 与 UDP 的比较

特性TCPUDP
连接类型面向连接无连接
数据传输可靠性提供可靠传输,确保数据完整性不可靠,可能发生数据丢失或无序
数据包顺序保证数据包的顺序不保证数据包的顺序
错误校验有错误检测和重传机制有错误检测,但无重传机制
传输速度较慢,因为需要建立连接、确认和重传(带有流量控制和拥塞控制)快速,适用于实时应用,延迟低
传输形式面向字节流,无边界面向数据报,有边界
应用场景文件传输、网页浏览、邮件等需要可靠性的应用流媒体、语音通信等对速度要求高的应用

总结

  • TCP:提供可靠的数据传输,适用于对数据完整性有较高要求的应用,如文件传输、网页浏览和电子邮件等。
  • UDP:提供快速的传输,不保证可靠性,适用于实时性要求较高、对丢包容忍的应用,如视频流、语音通信等。
  • 选择合适的协议取决于具体应用需求:可靠性 vs 实时性,是否需要可靠性保障,或是对速度的要求更高。