区别
- 基于连接 VS 无连接
TCP是面向连接的协议,而UDP是无连接的协议。这意味着当一个客户端和一个服务器通过TCP发送数据钱,必须先建立连接,建立连接的过程也被称为TCP三次握手 - 可靠性TCP
提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的,如果消息在传输过程中丢失,那么它将重发。UDP是不可靠的,它不提供任何交付的保证,一个数据包在运输过程中可能会丢失 - 有序性
消息到达网络的另一端时可能是无序的,TCP协议将会为你排好序。UDP不提供任何有序性的保证 - 速度
TCP速度比较慢,而UDP速度比较快,因为TCP必须创建连接,以保证消息的可靠交付和游戏性,它需要做比UDP多的事。这就是为什么UDP更适用于对速度比较敏感的应用。TCP适合传输大量数据,UDP适合传输少量数据 - 重量级 VS 轻量级
TCP是重量级的协议,UDP协议则是轻量级的协议。一个TCP数据报的报头大小最少是20个字节,UDP数据报的报头固定是8个字节。TCP报头中包含序列号、ACK号、数据偏移量、保留、控制位、窗口、紧急指针、可选项、填充想、校验位,源端口和目的端口。而UDP报头只包含长度、源端口号、目的端口号、校验 - 流量控制和拥塞控制
TCP有流量控制和拥塞控制、UDP没有流量控制和拥塞控制 - TCP是面向字节流,UDP是面向报文
TCP是字节流的协议,无边界记录。
UDP发送的每个数据报是记录型的数据报,所谓的记录型数据报就是接收进程可以识别接收到的数据报的记录边界 - TCP只能单播,不能广播和组播;UDP可以广播和组播
TCP应用场景:效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认,重发、排序等操作,相比之下效率没有UDP高。(eg:文件传输、邮件传输、远程登录)
UDP应用场景:效率要求相对高,对准确性要求相对低的场景(QQ、QQ聊天、QQ视频、网络语音通过(即是通讯。要求速度高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重传机制)、广播通信(广播、多播)
补充
为什么TCP比UDP安全,但是还有很多用UDP?
- UDP无需建立连接(减少延迟)
- 无需维护连接状态
- 头部开销小,一个TCP数据报的报头大小最少是20字节,UDP数据报的报头固定是8个字节
- 应用层能更好地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送频率。某些实时应用要求以稳定的速度发送数据,可以容忍一些数据的丢失,但不允许有较大的延迟,而UDP正好满足这些应用的需求
为何UDP快?
- 不需要建立连接
- 对于收到的数据,不用给出确认
- 没有超时重传机制
- 没有流量控制和拥塞控制