👉先直白给结论,下面细细讲
(1)TCP 是面向连接的,udp 是无连接的即发送数据前不需要先建立链接。
(2)TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据,无差错,不丢失,
不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付。 并且因为 tcp 可靠,
面向连接,不会丢失数据因此适合大数据量的交换。
(3)TCP 是面向字节流,UDP 面向报文,并且网络出现拥塞不会使得发送速率降低(因
此会出现丢包,对实时的应用比如 IP 电话和视频会议等)。
(4)TCP 只能是 1 对 1 的,UDP 支持 1 对 1,1 对多。
(5)TCP 的首部较大为 20 字节,而 UDP 只有 8 字节。
(6)TCP 是面向连接的可靠性传输,而 UDP 是不可靠的
⭐UDP没有握手,TCP才有握手
两种协议都是传输层协议,为应用层提供信息载体。
如果读者对比一下 UDP 的通信流程和 TCP 的通信流程, 可以发现, 在 UDP 协议中, 是没有握手这个操作的。
这里就引出了 TCP 与 UDP 的一个基本区别, TCP 是可靠通信协议, 而 UDP 是不可靠通信协议。
- TCP 可靠性的含义: 接收方收到的数据是完整, 有序, 无差错的。
- UDP 不可靠性的含义: 接收方接收到的数据可能存在部分丢失, 顺序也不一定能保证。
UDP 和 TCP 协议都是基于同样的互联网基础设施, 且都基于 IP 协议实现, 互联网基础设施中对于数据包的发送过程是会发生丢包现象的, 为什么 TCP 就可以实现可靠传输, 而 UDP 不行?
TCP 协议为了实现可靠传输, 通信双方需要判断自己已经发送的数据包是否都被接收方收到, 如果没收到, 就需要重发。 为了实现这个需求, 很自然地就会引出序号(sequence number) 和 确认号(acknowledgement number) 的使用。
发送方在发送数据包(假设大小为 10 byte)时, 同时送上一个序号( 假设为 500),那么接收方收到这个数据包以后, 就可以回复一个确认号(510 = 500 + 10) 告诉发送方 “我已经收到了你的数据包, 你可以发送下一个数据包, 序号从 510 开始” 。这样发送方就可以知道哪些数据被接收到,哪些数据没被接收到, 需要重发。
📉TCP传输效率比UDP低
tcp协议是基于连接的可靠协议,有流量控制和差错控制,也正因为有可靠性的保证和控制手段,所以传输效率比UDP低
UDP协议 是基于无连接的不可靠协议,没有控制手段,仅仅是将数据发送给对方,因此效率比tcp要高。
❓那如果让你做一个视频聊天软件,你用 tcp 还是 udp ?为什么?
TCP 和 UDP 协议在传输上有很多的差别,首先 TCP 面向连接,而 UDP 是无连接的。
//这里再详细说一下面向连接和面向无连接的区别:
//面向连接举例:两个人之间通过电话进行通信;
//面向无连接举例:邮政服务,用户把信函放在邮件中期待邮政处理流程来传递邮政包裹。
而 TCP 注重提供可靠的服务。能保证连接传送的数据,无差错,不丢失,不重复,且按序到达。而 UDP 是尽最大努力交付,即不保证可靠交付。
因此传统的 TCP 协议并不是为实时媒体传输设计的,这就导致了它在弱网环境下的产生的延时相当大。因此在音视频传输时需要对网络协议进行优化。
UDP 协议就比较适合用于实时音视频通讯,首先它是允许端到端的全链条信道策略控制,可以保证弱网环境下播放的流畅性。在丢包方面 UDP 协议也更加灵活,方便我们在视频流畅与画质之间做好平衡。
再者是网络优化 CDN 业务,CDN 可以将视频内容分发至全网加速节点,让用户可以就近获取需要的内容,降低视频延迟。
🔗引用
【亡羊补牢】计算机网络灵魂之问 第9期 如果让你做一个视频聊天软件,你用tcp还是udp?为什么?_超逸の学习技术博客-CSDN博客