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

你们好啊,我是老杨。

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

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

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

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

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

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

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

01 为什么UDP比TCP快?

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

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

01 TCP到底是个啥?

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

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

为啥?

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

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

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

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

02 啥是UDP?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

《假如用TCP和UDP送快递》

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

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

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

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

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

UDP不靠谱啊。

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

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

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

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

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

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

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

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

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

TCP如此,工作亦如是。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/229833.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

复杂gRPC之go调用go

1. 复杂的gRPC调用 我们使用了一个较为复杂的proto文件,这个文件的功能主要是用来定位的,详细内容可以看代码中的注解 syntax "proto3"; //指定生成的所属的package,方便调用 option go_package "./"; package route…

KaiwuDB 通过中国信通院“可信数据库”性能与稳定性评测

11月29日,中国信通院 2023 年下半年“可信数据库”评估评测结果正式发布,由 KaiwuDB研发的开务数据库系统 KaiwuDB V2.0 达到信通院时序数据库性能、稳定性测试标准。 至此,KaiwuDB已完成时序数据库基础能力、性能、稳定性全项评测&#xff…

Python Tacacs故障诊断记录

背景:客户现场说我们的设备在3A鉴权时失败,没有认证成功 第一步,先看下我们log 没有明显的错误记录,貌似认证成功了但是确提示认证失败,有点迷 第二步,家里搭建和现场一致的环境,模拟登录发现是…

《文存阅刊》期刊发表简介

《文存阅刊》以“深研文化创新,崇尚科学真理,坚持双百方针,打造学术精品”为办刊宗旨,涵盖艺术、文学、社科等多项内容,适应了文化市场需求,很好的回应了广大文化理论工作者的关切,为下一步打造…

cuda lib 线程安全的要义

1, 概述 cuda lib 线程安全的几个多线程的情景: 单卡多线程; 多卡多线程-每卡单线程; 多卡多线程-每卡多线程; 需要考虑的问题: 每个 cublasHandle_t 只能有一个stream么? 每个cusolverHandle_t 只能有一…

DTS认证

一、什么叫DTS DTS 是“Digital Theatre System“的缩写,是”数字化影院系统“的意思。是一种音频格式,从技术上讲,把音效数据存储到另外的CD-ROM中,使其与影像数据同步。这样不但空间得到增加,而且数据流量也可以相对…

如何运用gpt改写出高质量的文章 (1)

大家好,今天来聊聊如何运用gpt改写出高质量的文章 (1),希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 如何运用GPT改写出高质量的文章 一、引言 随着人工智能技术的飞速发展,自然…

HHDESK右键管理简介

在HHDESK管理文件,除了基本的打开、删除、复制、粘贴、重命名外,还有多种便捷编辑方式。 可以分别以下列模式打开文档: 文本模式即是以文本编辑器打开文档。 1 二进制模式 可进行二进制编辑。 2 JSON模式 可对JSON文件进行直观的解析…

b样条原理与测试

为了保留贝塞尔曲线的优点,同时克服贝塞尔曲线的缺点,b样条在贝塞尔曲线上发展而来,首先来看贝塞尔曲线的定义: 对于贝塞尔中的基函数而言,是确定的,全局唯一的,这导致了如果控制点发生变换将会…

软件测试--selenium安装使用

安装selenium不少人使用pip命令来安装selenium,辛辛苦苦安装完之后,还是不能使用。所以我们可以是直接使用编译器,pycharm直接安装selenium扩展包。 file中点击settings 在Settings中点击Project Interpreter,点击加号就可以安装各种需要的扩…

11.30BST理解,AVL树操作,定义;快速幂,二分求矩阵幂(未完)

完全二叉树结点的度可能有1,满二叉树的度只能为0或2 BST构建 BST是左孩子都比根节点小,右孩子都比根节点大 二叉搜索树的插入,删除,调整 平衡树理解 任何一个平衡二叉树,它的中序遍历都是一样的,都是有…

PRCD-1229 : An attempt to access configuration of database

今天维护oda一体机时,发现无法在grid用户下面关闭数据库实例,如下 ASM1:/home/gridoda0>srvctl stop database -d orcl -o immeidate PRCD-1229 : An attempt to access configuration of database orcl was rejected because its version 11.2.0.4.…

SpringBoot Seata 死锁问题排查

现象描述:Spring Boot项目,启动的时候卡住了,一直卡在那里不动,没有报错,也没有日志输出 但是,奇怪的是,本地可以正常启动 好吧,姑且先不深究为什么本地可以启动而部署到服务器上就无…

【代码随想录刷题】Day20 二叉树06

文章目录 1.【654】最大二叉树1.1 题目描述1.2 解题思路1.3 java代码实现1.4 总结 2.【617】合并二叉树2.1 题目描述2.2 解题思路2.3 java代码实现 3.【700】二叉搜索树中的搜索3.1 题目描述3.2 解题思路3.3 java代码实现 4.【98】验证二叉搜索树4.1 题目描述4.2 解题思路4.3 j…

卷积神经网络18种有效创新方法汇总,涵盖注意力机制、空间开发等7大方向

作为深度学习中非常重要的研究方向之一,卷积神经网络(CNN)的创新不仅表现在提升模型的性能上,还更进一步拓展了深度学习的应用范围。 具体来讲,CNN的创新架构和参数优化可以显著提高模型在各种任务上的性能。例如&…

如何跑AI模型—ultralytics

这里以跑 ultralytics 为示例,记录了如何从 0-1 跑个简单的模型,包括环境搭建。我的是 Window 系统,其他系统也类似。 主要流程是环境搭建,找个官网的 demo,收集好所需素材(模型,图片等&#x…

Python入门第1篇

前言 很久之前就知道有python这个东西,当时也想的学学,不过一直没做行动派。 那时候就听说用python进行Excel数据分析处理、爬虫等很是厉害,但是始终没有与python的关系更进一步。 Python简介 用我自己的话说,python也是一门面…

k8s上安装KubeSphere

安装KubeSphere 前置环境安装nfs-server文件系统配置nfs-client配置默认存储创建了一个存储类metrics-server集群指标监控组件 安装KubeSphere执行安装查看安装进度 前置环境 下载配置我都是以CentOS 7.9 安装 k8s(详细教程)文章的服务器作为示例,请自行修改为自己的…

【评测脚本】机器信息评测(初版)

背景 QA的实际工作过程中,除了业务相关的测试外,也会涉及到一些评测相关的工作,甚至还要做多版本、多维度的评估分析。尤其是现在火热的大模型,相关的评测内容更是核心中的核心。当然本文的内容只是做一些初级的机器相关的评测信息,更多更广的评测需要更多时间的积累和总…

插入排序——直接插入排序和希尔排序(C语言实现)

文章目录 前言直接插入排序基本思想特性总结代码实现 希尔排序算法思想特性总结代码实现 前言 本博客插入排序动图和希尔排序视频参考大佬java技术爱好者,如有侵权,请联系删除。 直接插入排序 基本思想 直接插入排序是一种简单的插入排序法&#xff…
最新文章