- 连接:TCP 是面向连接的传输层协议,传输数据前先要建立连接;UDP 是不需要连接,即刻传输数据。
- 首部开销:TCP 首部长度较长,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的;UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
- 传输方式:TCP是基于字节流传输数据的,消息之间没有边界,若数据过大在TCP层面就会进行按MSS大小进行分片,一片数据组成一个TCP报文;UDP按包进行传输,不会对数据分片,这就是说应用层一次交给UDP多长的数据,UDP就将其组成一个UDP报文交给IP层,若报文过长超过MTU大小,则IP层会进行分片,一片丢失则对于接收端整个UDP报文就丢失了,这也是UDP丢包率高的原因之一。
- 可靠性:TCP通过重传等机制保证数据的可靠交付和按序到达,而UDP不保证可靠交付数据。
- 流量/拥塞控制:TCP会通过流量控制和拥塞控制应对网络和服务器的波动;而UDP没有这些机制,有数据就发,大量的UDP数据可能会导致网络信道拥塞,因此部分运营商可能会对UDP进行限制,导致UDP丢包率进一步增加。
- 通信对象:TCP是一对一通信,UDP 支持一对一、一对多、多对多的交互通信。
- 应用场景:TCP用于要保证数据可靠交付的场景,如FTP文件传输、HTTP网络通信等;UDP不保证可靠交付,但是简单高效,通常用于对时效性有要求但是丢包率容忍度高的场景,如音视频媒体直播,或者用于数据量小的场景,如DNS协议等,或者作为基础的传输协议在这上面做功能封装,如QUIC协议就是基于UDP开发的。
引申阅读:数据包在哪些层面可能会丢失?