首页 > 其他分享 >既然UDP更快,为啥这么多年一直用TCP ?

既然UDP更快,为啥这么多年一直用TCP ?

时间:2023-12-08 19:01:56浏览次数:29  
标签:协议 UDP IP TCP 可靠 传输 更快

你们好啊,我是老杨。

有点基本技术常识的粉丝朋友都知道,UDP肯定是比TCP快的。

很多人对TCP和UDP的了解很浅,直到自己真的经历了一些通信项目之后,你才会愿意根据实际情况埋头苦学,企图“速成”一下。

要是问你为什么快,我相信大多数人,也是能从各个角度,说上几句有的没的。

但是,既然如此,为什么TCP仍然占据优势地位,没有被淘汰?

你的心里有些许困惑,看完这篇文章就好说了。


今日文章阅读福利:《 UDP 协议分析实验 》

关于UDP,理解概念肯定是最基础的,但实验肯定能让你更加深入地学习。私信我,发送暗号“UDP”,获取这份实验资料。


01 为什么UDP比TCP快?

再聊这个问题之前,我们先把问题拆解一下,了解两个技术的基本内涵,降低一点小白的阅读门槛。

想直接了解问题答案的,可以往下拉多一点,跳过这段哈。


01 TCP到底是个啥?

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

计算机通信协议是对那些计算机必须遵守以便彼此通信的的规则的描述。TCP是互联网协议之一,也是主要的协议之一。

为啥?

因为它起源于最初的网络实施,在网络实施中,它对互联网协议起到了重要的补充作用。因此,整个套件通常被人称呼为TCP/IP。

它定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。

既然UDP更快,为啥这么多年一直用TCP ?_华为认证

TCP主要是给在用IP网络通信的主机上运行的应用程序之间,提供一种可靠、有序且经过错误检查的八位字节流传递。

TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。


02 啥是UDP?

如果是那种不需要靠数据流服务的应用程序,就可以使用UDP(用户数据报协议),它和TCP(传输控制协议)不同,前者强调降低延迟,后者强调可靠有序。

UDP (User Datagram Protocol)的全称是用户数据电报协议。

它是一种无连接、不可靠、面向报文的协议,提供不可靠的用户数据报服务,1980 年发布的 RFC 768 定义了 UDP 协议。

如果你想给女朋友发一句消息,你会发现通过UDP发,和TCP发,是有两种截然不同的过程。

既然UDP更快,为啥这么多年一直用TCP ?_IP_02

用TCP和女朋友聊天的过程我之前写过,感兴趣的朋友可以戳链接回顾一下:《一台主机上只能保持最多 65535 个 TCP 连接吗?

用UDP的话,会是什么样的画面?

如果你想给女朋友发一句:“我想你了”,UDP只会把这消息消息交给IP层,原封不动。

也就是说,它的目的就是将数据包发出去,尽最大努力的交付。

和TCP的传输的“三次握手”不同,UDP是个直爽性子,争取一步到位。这就会导致消息的不稳定和不确定性。

女朋友到底收到没?不知道。

发消息的时候信号好吗?不知道。

女朋友收到消息之后什么反应?不知道。

一问三不知,所以UDP相对“不那么可靠”。

UDP虽然不可靠,但是它胜在“快”,不需要你谨小慎微的建立连接,然后再发数据,也不需要每一个包都ACK之后再发送下一个。

快,是这个时代的主旋律,从这个角度,UDP还是有很大的用武之地的。

我在看美女直播,想给美女打赏,慢了怎么行?

我在玩游戏放大招,慢了怎么搞?

所以啊,UDP和TCP各有各的好。

再附上一张图,横向对比一下两种协议的区别:

既然UDP更快,为啥这么多年一直用TCP ?_UDP_03

之前在网络上刷到过一个段子,也能很生动形象的区别二者:

《假如用TCP和UDP送快递》

TCP:您好,TCP快递,请问您在家吗,如果在家我现在送过去,请您当面签收一下,如果不在家,我们再约时间哦~

UDP:喂,快递放小区门口了,丢了我不管啊,886。

现在,你能区分这俩兄弟了不?


02 话说回来,为什么TCP仍然占据主要地位?

既然UDP快,为什么不直接都用UDP,这个问题,相信你在看完上半部分,应该会有一个明确的答案,那就是:

UDP不靠谱啊。

是的,虽然不靠谱,但是快,所以对延迟特别敏感的应用,比如视频、语音通话,在线会议等,都会用到UDP技术。

速度快,所以延迟小,这是很多人对UDP的认识。

再加上其实UDP更快不是一个普适性的结论,对于大多数人来说在UDP上搞一个可靠的传输协议绝大多数还不如TCP。

在可靠性非常差的时候,大家都先选择先解决可靠性而已。只能在传输层补齐物理层和链路层的不足。

既然UDP更快,为啥这么多年一直用TCP ?_UDP_04

就像你做一个大型项目,当然,能在ddl之前把项目完美完成并交付给甲方是很体现能力的一件事情,但这个事情的前提是“完美完成”。

很多人做项目很难做到完美,能完成就很难得。而越大的项目就越不可控,越不可控就越要细分颗粒度,把控到位,这样才具有“稳定”输出细节,得到相对理想的完成项目的结果。

UDP明显不具备“稳定”的功能,而相反,TCP的“谨慎”,才是它一直处于主流地位的真正原因。

加上由于TCP有拥塞控制、流量控制。网络设备和运营商更喜欢TCP。

在互联网时代,快速是一个很重要很亮眼的标签,但稳定输出,才是根本基石和一切之本。

TCP如此,工作亦如是。

最后,想要系统学习TCP/IP的小友,也欢迎私聊我,网络基础其实在HCIA/CCNA认证课程中就有系统涉及到。

既然UDP更快,为啥这么多年一直用TCP ?_华为认证_05


原创:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

标签:协议,UDP,IP,TCP,可靠,传输,更快
From: https://blog.51cto.com/u_15281548/8741275

相关文章

  • Redis报错:WARNING: The TCP backlog setting of 511 cannot be enforced because /pro
    报错内容:1:C08Dec202305:47:33.348#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oo1:C08Dec202305:47:33.348#Redisversion=7.0.5,bits=64,commit=00000000,modified=0,pid=1,juststarted1:C08Dec202305:47:33.348#Configurationloaded1:M08De......
  • 构建用于复杂数据处理的高效UDP服务器和客户端
    title:构建用于复杂数据处理的高效UDP服务器和客户端banner_img:https://cdn.studyinglover.com/pic/2023/12/334c0c129076533308cbc7e03f8c55be.pngdate:2023-12-723:03:00tags:-踩坑构建用于复杂数据处理的高效UDP服务器和客户端引言在当今快速发展的网络通信世界......
  • 网络通信、UDP通信、TCP通信、BS架构模拟、URL了解
    网络编程可以让程序与网络上的其他设备中的程序进行数据交互所以,我们学习网络编程的主要目的就是为了实现网络通信网络通信网络通信基本模式常见的通信模式有如下2种形式:Client-Server(Cs)、Browser/Server(Bs)Client-Server(Cs)主要是客户端与服务端之间的联系(就是相应的App和后......
  • .Net ——TCP/IP
    TCP/IP是什么,可以用来干什么:TCP/IP是一种网络通信协议,它是互联网基础设施的核心,用于在计算机之间进行可靠的数据传输。在.NET中,也提供了丰富的类库和工具来支持TCP/IP协议的应用开发。使用TCP/IP协议,可以完成以下一些常见的任务:网络通信:通过TCP/IP协议,客户端和服务器......
  • HTTP/3 抛弃 TCP 后
    HTTP/3抛弃TCP后,基于UDP实现的可靠传输QUIC协议,带来了以下好处:降低连接耗时:在客户端有缓存的情况下实现0-RTT建立连接更灵活的拥塞控制:在用户态可以为每个请求配置不同的拥塞控制策略无队头阻塞的多路复用:每个请求流独立拥有滑动窗口,互不影响连接迁移:网络切换不会中断数据传......
  • TCP协议的流量控制与拥塞控制
    TCP协议的秘密武器:流量控制与拥塞控制合集-计算机网络(19) 1.网络协议的重要性与应用:理解进程间通信和网络分层结构(上)09-172.网络协议的重要性与应用:理解进程间通信和网络分层结构(下)09-183.深入理解HTTP的基础知识:请求-响应过程解析09-194.深入解析HTTP请求:了解请求特征......
  • 【小沐学前端】Node.js实现UDP通信
    1、node简介Node.js是一个开源的、跨平台的JavaScript运行时环境。Node.js是一个开源和跨平台的JavaScript运行时环境。它是几乎任何类型项目的流行工具!Node.js在浏览器之外运行V8JavaScript引擎(GoogleChrome的内核)。这使得Node.js非常高效。Node.js应用在......
  • TCP粘包/拆包,如何解决
    TCP粘包(TCPPacketStickiness):TCP粘包指的是发送方发送的多个小数据包被接收方一次性接收,形成一个大的数据包。这种情况可能会导致接收方难以正确解析消息的边界,因为多个消息被粘合在一起。TCP是面向流的协议,它不保留消息的边界信息,而是将数据流划分为小的数据块进行传输。TCP拆......
  • 视频监控平台LiteCVR启动时打印starting server:listen tcp的原因排查
    近年来,随着人工智能与行业领域深度融合理念的持续推动,安防行业作为AI技术落地应用较为领先的领域,率先受益于AI技术的成熟发展和应用。传统视频监控行业也面临着全新的挑战和机遇。将LiteCVR部署到其本地服务器上,但无法正常启动,出现了报错,请求协助。今天我们以此为案例,来介绍下排查......
  • Qt之UDP多播(组播)的使用
    UdpSocket::UdpSocket(QObject*parent):QObject(parent){//本机IPQStringlocal_ip="192.168.101.11";m_udp_socket=newQUdpSocket(this);connect(m_udp_socket,&QUdpSocket::readyRead,this,&UdpSocket::received_data);......