声明:此文章仅是作者自学整理的内容,并非原创,因思否无法设置转载多篇文章只能选择原创。参考文章见文章末尾,文章引用形式不严谨,敬请见谅。

1. TCP/IP 协议族

首先,TCP 和 UDP 同属于 TCP/IP 协议族,这个协议族内还包括其他诸如 HTTP, SMTP, FTP, IP, ICMP, IPX 等等协议。

作者之前整理的另一篇文章《计算机网络分层结构归纳》中有提到过 TCP/IP 四层结构参考模型。这个模型也可以视为上述协议的总称,协议分成了四层。其中传输层就包含了两个重要的协议,TCP 和 UDP。

2. TCP 和 UDP 的区别

UDP

全称 User Data Protocal (用户数据报协议),是一种无连接的协议。有不提供数据包分组、组装和重排序的特点。所以,无法得知 UDP 发送的包是否完整到达。

UDP 数据发送示意图

  • 面向无连接

    不需要像 TCP 一样进行三次握手,指搬运数据,不对数据做任何处理。

  • 可单播、多播、广播

    可以一对一、多对一、多对多

  • 面向报文

    对应用层(这里指的是四层模型的应用层)下放的数据报文,只添加首部就交给 IP 层,不做其他处理

  • 不可靠

    不需要建立连接;不关心接收方是否收到;不处理数据,想发什么就发什么;不备份;不做拥塞控制,不控制传输速率

  • 头部开销小

    只有 8 个字节(1 字节 8 位),比 TCP 头部至少 20+ 字节开销小很多,见下图👇

    UDP 头部格式

TCP

全称 Transfer Control Protocal (传输控制协议),是面向连接的、可靠的、面向字节流的传输层通信协议。

TCP数据发送示意图

根据 RFC 793 的『连接』定义,用于保证传输可靠和流量控制维护的状态信息,这些信息的组合,包括序列号、Socket、窗口大小,被称为连接。因此,TCP 连接即为满足上述定义的,包括用于确定来源和出处的Socket(IP 和 port)、确定排序的序列号和确定流量控制的窗口大小等状态信息组成的连接。下图👇能看出,TCP 头部确实包含了这些信息。

TCP头部格式

  • 面向连接

    发送数据前必须进行的『三次握手』进行连接确认

  • 单播

    只能进行端对端的连接,不能实现广播

  • 面向字节流

    不保留报文边界,以字节流传输

  • 可靠

    判断丢包、误码,依靠序列号和确认号。超时重传

  • 拥塞控制
  • 全双工通信

小结

TCPUDP
是否连接连接无连接
是否可靠可靠,流量控制,拥塞控制不可靠,没有流量控制和拥塞控制
连接对象数单播单播,多播,广播
传输方式面向报文面向字节流
首部开销8字节20-60 字节
使用场景实时应用,视频等对内容可信度要求高,文件传输等

参考文章

  1. 一文搞懂TCP与UDP的区别 - Fundebug - 博客园 (cnblogs.com)
  2. 硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题 (qq.com)

brlink
1 声望1 粉丝