声明:此文章仅是作者自学整理的内容,并非原创,因思否无法设置转载多篇文章只能选择原创。参考文章见文章末尾,文章引用形式不严谨,敬请见谅。
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 发送的包是否完整到达。
面向无连接
不需要像 TCP 一样进行三次握手,指搬运数据,不对数据做任何处理。
可单播、多播、广播
可以一对一、多对一、多对多
面向报文
对应用层(这里指的是四层模型的应用层)下放的数据报文,只添加首部就交给 IP 层,不做其他处理
不可靠
不需要建立连接;不关心接收方是否收到;不处理数据,想发什么就发什么;不备份;不做拥塞控制,不控制传输速率
头部开销小
只有 8 个字节(1 字节 8 位),比 TCP 头部至少 20+ 字节开销小很多,见下图👇
TCP
全称 Transfer Control Protocal (传输控制协议),是面向连接的、可靠的、面向字节流的传输层通信协议。
根据 RFC 793 的『连接』定义,用于保证传输可靠和流量控制维护的状态信息,这些信息的组合,包括序列号、Socket、窗口大小,被称为连接。因此,TCP 连接即为满足上述定义的,包括用于确定来源和出处的Socket(IP 和 port)、确定排序的序列号和确定流量控制的窗口大小等状态信息组成的连接。下图👇能看出,TCP 头部确实包含了这些信息。
面向连接
发送数据前必须进行的『三次握手』进行连接确认
单播
只能进行端对端的连接,不能实现广播
面向字节流
不保留报文边界,以字节流传输
可靠
判断丢包、误码,依靠序列号和确认号。超时重传
- 拥塞控制
- 全双工通信
小结
TCP | UDP | |
---|---|---|
是否连接 | 连接 | 无连接 |
是否可靠 | 可靠,流量控制,拥塞控制 | 不可靠,没有流量控制和拥塞控制 |
连接对象数 | 单播 | 单播,多播,广播 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 8字节 | 20-60 字节 |
使用场景 | 实时应用,视频等 | 对内容可信度要求高,文件传输等 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。