如何理解 UDP 和 TCP
什么是 UDP
一句话描述:UDP 是一种无连接的协议。在发送数据之前,不需要建立连接。此外,UDP 不保证数据包的顺序或是否会到达,这意味着数据包可能会丢失或乱序。
特点
- 无连接:UDP 在发送数据之前,不需要建立连接
- 不可靠:UDP 不保证数据包的顺序或是否会到达,这意味着数据包可能会丢失或乱序
- 速度快:由于 UDP 不需要进行连接建立和确认,因此通常比 TCP 更快
- 实时性:UDP 的无连接和快速特性使其非常适合需要实时性的应用,如视频会议、流媒体和在线游戏
- 无拥塞控制:因此,网络出现拥塞不会使源主机的发送速率降低(对实时应用有利)
- 报头短:UDP 的报头只有 8 字节,比 TCP 的报头短,因此开销小(包含字段:源端口号、目标端口号、长度、校验和)
- 一次发送一个报文:无论应用层交给 UDP 多长的报文,它统统发送,一次发送一个报文
- 接收方处理简单:对接收方,接到后直接去除首部,交给上面的应用层就完成任务
- 支持广播和多播:支持一对一、一对多、多对一和多对多的交互通信
什么是 TCP
一句话描述:TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议(数据视为无结构的字节流),它提供了数据的有序传输、错误检查和拥塞控制等功能。
特点
面向连接:在数据传输之前,发送方和接收方必须建立一个连接。
可靠性:TCP 提供了一种可靠的服务,它确保数据包将按照其发送的顺序到达。如果数据包丢失或损坏,TCP 将重新发送数据包。
有序性:如果 TCP 报文段在传输过程中发生乱序,TCP 将重新排序,保证接收方接收的数据是有序的。
控制拥塞:当网络出现拥塞时,TCP 会降低数据的发送速率,尽量避免丢包。
流量控制:TCP 通过滑动窗口机制控制数据的发送速率,防止接收方处理不过来。
数据完整性:TCP 提供校验和机制来检查数据在传输过程中是否有错误。
TCP 与 UDP 区别
特性 | TCP | UDP |
---|---|---|
可靠性 | 可靠 | 不可靠 |
连接性 | 面向连接 | 无连接 |
报文 | 面向字节流 | 面向报文 |
效率 | 传输效率低 | 传输效率高 |
双共性 | 全双工 | 一对一、一对多、多对一、多对多 |
流量控制 | 滑动窗口 | 无 |
拥塞控制 | 慢开始、拥塞避免、快重传、快恢复 | 无 |
传输效率 | 慢 | 快 |
具体描述:
- TCP 是面向连接的协议,建立连接 3 次握手、断开连接四次挥手,UDP 是面向无连接,数据传输前后不连接连接,发送端只负责将数据发送到网络,接收端从消息队列读取
- TCP 提供可靠的服务,传输过程采用流量控制、编号与确认、计时器等手段确保数据无差错,不丢失。UDP 则尽可能传递数据,但不保证传递交付给对方
- TCP 面向字节流,将应用层报文看成一串无结构的字节流,分解为多个 TCP 报文段传输后,在目的站重新装配。UDP 协议面向报文,不拆分应用层报文,只保留报文边界,一次发送一个报文,接收方去除报文首部后,原封不动将报文交给上层应用
- TCP 只能点对点全双工通信。UDP 支持一对一、一对多、多对一和多对多的交互通信
使用场景
TCP 使用场景:
Web 应用:HTTP 和 HTTPS 协议都是基于 TCP 的,因为它们需要可靠的数据传输。
邮件传输:SMTP、POP3 和 IMAP 协议都是基于 TCP 的,因为邮件需要完整且有序的传输。
文件传输:FTP 和 SFTP 协议都是基于 TCP 的,因为文件传输需要数据的完整性和可靠性。
UDP 使用场景:
实时应用:例如 VoIP(网络电话)和视频会议,它们需要快速的数据传输,而且可以容忍一些数据丢失。
广播和多播应用:例如 IPTV 和在线游戏,它们需要快速的数据传输,并且可以同时发送给多个接收者。
简单查询:例如 DNS 查询,它只需要发送一小部分数据,并且不需要建立连接。