TCP 和 UDP 的区别

Oct 9 · 1 min

TCPUDP 都是传输层协议,他们都属于 TCP/IP 协议族。

#TCP

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

#TCP 的特点

  • 面向连接

面向连接指的是在发送数据之前必须通过“三次握手”建立连接,这样能够建立可靠连接,为数据传输提供稳定的字节流服务。

  • 仅支持单播传输

每条 TCP 连接都必须是一对一的。

  • 面向字节流

字节流服务是指,为了方便传输,将大块数据分割成以报文段 segment 为单位的数据包进行管理。

  • 可靠传输

对于可靠传输,判断丢包,误码靠的是客户端和服务端发出的 TCP 序号和确认号 ACKTCP 为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认 ACK;如果发送端实体在合理的往返时延 2MSL 内未收到确认,那么对应的丢失的数据将会被重传。

  • 拥塞控制

TCP 能够计算当前网络的传输速率,根据它去调整数据包的传输速率,丢包概率小。

  • TCP 提供全双工通信

TCP 允许通信双方的应用程序在任何时候都能发送数据。TCP 连接的两端都设有发送缓存接收缓存,用来临时存放双向通信的数据。

#UDP

用户数据报协议 (UDP,User Datagram Protocol)是一种面向无连接的协议。

#UDP 特点

  • 面向无连接

UDP 不像 TCP 是基于连接才能发送数据的,UDP 发送数据不需要建立连接,所以 UDPTCP 的速度更快。

  • 有单播,多播,广播的功能

多播、广播是指,服务器接收多个数据包,其数据包在发送时不需要等待回应,因此多播、广播发送的数据是不稳定且容易丢失的。

  • 面向报文

UDP 发送数据包时不像 TCP 会将数据包拆分成数据片段 segmentUDP 对于应用端交下来的报文既不合并也不拆分,而是将报文主体发送给服务端,发送时,UDP 是无序发送数据包,服务端并不知道哪个数据先来。

  • 不可靠性

首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。

并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。

再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如直播、视频会议)就需要使用 UDP 而不是 TCP

  • 传输数据高效性

UDP 的头部开销小,只有8字节,相比 TCP 的至少20-60字节要少得多,在传输数据报文时是很高效的

#TCP和UDP的比较

对比TCPUDP
连接方式面向连接无连接
是否可靠可靠传输,使用流量控制和拥塞控制不可靠传输,不使用流量控制和拥塞控制
连接对象个数只能是一对一通信支持一对一,一对多,多对一和多对多交互通信
首部开销首部最小20字节,最大60字节首部开销小,仅8字节
适用场景适用于要求可靠传输的应用,例如文件传输直播,视频聊天

#参考

tcp-vs-udp
TCP 和 UDP 的特点、区别和使用场景