前言

计算机网络模型在传输层定义了两种常见的传输协议:TCP 和 UDP 。这里从 10 个方面比较这两种协议。

TCP:传输控制协议,Transmission Control Protocol。
UDP:用户数据报协议,User Datagram Protocol

比较

连接

  • TCP 是面向连接的协议。
  • UDP 是无连接的协议,UDP更加适合消息的多播发布,从单个点向多个点传播消息。

可靠性

  • TCP 提供交付保证,如果传输过程中发生丢失,将会重发。
  • UDP 不可靠,不提供任何的交付保证,只是尽最大可能交付。

有序性

  • TCP 保证了消息的有序性,即使到达客户端的顺序不同,TCP 也会排序。
  • UDP 并不保证消息的有序性。

速度

  • TCP 由于包含握手和挥手,所以速度慢。
  • UDP 速度快。

报头大小

  • TCP 报头较大。
    • TCP 数据报头的为 20 字节。
    • TCP 报头中包含序列号,ACK 号,数据偏移量,保留,控制位,窗口,紧急指针,可选项,填充项,校验位,源端口和目的端口。
image.png
  • UDP 报头较小。

    image.png
    • UDP 数据报头大小为 8 字节,只包含长度,源端口号,目的端口号和校验和。

拥塞和流量控制

  • TCP 有流量控制。

    在任何用户数据可以被发送之前,TCP 需要三数据包来设置一个套接字连接。TCP 处理的可靠性和拥塞控制。

  • UDP 不能进行流量控制。

数据边界

  • TCP 不保存数据边界。

    虽然 TCP 也将在收集所有字节之后生成一个完整的消息,但是这些信息在传给传输给接受端之前将储存在 TCP 缓冲区,以确保更好的使用网络带宽。

  • UDP 保证数据边界。

    在 UDP 中,数据包单独发送的,只有当他们到达时,才会再次集成。包有明确的界限来哪些包已经收到,这意味着在消息发送后,在接收器接口将会有一个读操作,来生成一个完整的消息。

发送消耗

  • TCP 发送消耗为重量级。
  • UDP 发送消耗低,为轻量级。

    因为 UDP 传输的信息中不承担任何间接创造连接,保证交货或秩序的的信息。从报头大小也可以发现。

应用

  • TCP 提供的可靠性和有序性证明它适合需要高可靠并且对传输时间要求不高的应用。
  • UDP 无状态的特点,适合需要快速且高效传输的应用,如服务器端需要对大量客户端产生的少量请求进行应答。
  • 在实践中,TCP 被用于金融领域,如 FIX 协议是一种基于 TCP 的协议,而 UDP 大量使用在游戏中。

上层协议

  • 基于 TCP 协议的应用层协议:Telnet,FTP 以及 SMTP 协议。
  • 基于 UDP 协议的应用层协议:DHCP、DNS、SNMP、TFTP、BOOTP。

参考

  1. 计算机网络-传输层,CS-Note
  2. TCP和UDP面试总结,掘金
  3. 一文搞定 UDP 和 TCP 高频面试题,知乎