【协议开发系列】梳理关于TCP和UDP两种协议的区别和使用场景

起源

前二天项目上在核对外部对接服务的五元组列表的时候,有一位客户提问对于同样的服务同时支持tcp和udp二种方式,有什么优点和缺点,应该如何选择?这个问题突然让我愣了一下,确实好久没有“温故”了,相关的概念都有些模糊了,于是,我整理了一下相关的知识体系,秉承分享的精神,重新复习记录如下,供各位同学有需要的时候参考。

从RFC上来看

从RFC上截的图,UDP(RFC768 User Datagram Protocol)只有源端口和目的端口,长度和校验和,接下来就是数据部分。对比TCP(RFC 9293 Transmission Control Protocol),没有相关的面向连接管理的各种控制字段和标志位。所以,UDP的特点就是快,实时性好,但是不保证传输的可靠性和连接性。
在这里插入图片描述
RFC768只有3 pages, RFC9293有98 pages.

关键特性对比列表

这个表格对TCP和UDP协议进行了更详细的对比,包括可靠性、连接性、速度、数据包大小以及应用场景,及这两种协议的特点和差异。

TCP(传输控制协议)UDP(用户数据报协议)
可靠性TCP提供可靠的数据传输服务。它使用序列号对发送的数据包进行排序,确保数据按照正确的顺序到达接收端。同时,TCP还通过确认和重传机制确保每个数据包都被成功接收,如果数据包在传输过程中丢失或损坏,TCP会重新发送丢失的数据包。UDP不保证可靠传输。它仅仅将数据封装成数据报并发送出去,不会进行数据包的校验和重传。因此,UDP可能会出现数据包的丢失、乱序或重复等问题,适用于对数据传输可靠性要求不高的场景。
连接性TCP是面向连接的协议。在数据传输之前,发送方和接收方需要建立连接,包括三次握手过程,以建立可靠的通信通道。数据传输结束后,双方还需要通过四次挥手来释放连接。这种连接方式使得TCP能够控制数据传输的流量和速度,并提供更好的数据传输质量。UDP是无连接的协议。发送方在发送数据之前不需要与接收方建立连接,直接发送数据报即可。这种方式减少了建立连接的开销和延迟,使得UDP更适用于实时通信或广播通信等场景。然而,由于没有连接状态的管理,UDP无法提供流量控制和拥塞控制等功能。
速度由于TCP需要建立连接、进行数据包确认和重传等操作,相对于UDP来说,其传输速度可能会稍慢一些。尤其是在网络状况不佳或数据包丢失率较高的情况下,TCP的传输效率可能会受到较大影响。UDP的传输速度较快。由于不需要建立连接和进行复杂的控制操作,UDP的数据报可以直接发送到网络中,减少了传输延迟。这使得UDP适用于对实时性要求较高的应用场景,如视频流传输、实时游戏等。
数据包大小TCP在传输数据时,会根据网络状况动态调整数据包的大小,以适应不同的网络环境。TCP会将数据分割成较小的数据块进行传输,并在接收端进行组装,以确保数据的完整性和顺序性。UDP没有数据包大小的限制。发送方可以根据需要自由设置数据报的大小,并直接发送到网络中。然而,过大的数据包可能会导致网络拥塞或数据包丢失,因此在实际应用中需要根据网络状况和数据传输需求来合理选择数据包的大小。
应用场景TCP适用于需要可靠、有序的数据传输的场景。例如,文件传输、网页浏览、电子邮件等应用都依赖于TCP协议来确保数据的完整性和顺序性。UDP适用于对实时性要求较高,且对数据的完整性要求不高的场景。例如,实时视频流传输、在线游戏、VoIP(网络电话)等应用常使用UDP协议,因为它们更注重传输速度和实时性,而不是数据的完整性。

RFC协议原文本链接参考

UDP链接: RFC768
TCP链接: RFC9293

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商业新闻|当我们在讨论卖车时我们在讨论什么?

‍‍今天是2024年第22周 这是Yura「输出倒逼输入」计划的第10篇文章 全年进度:10/52 01 投资人为什么不断入局烧钱又亏损的新能源? 造车的烧钱速度超乎想象。除了最近的小米,这些年国内大大小小的玩家好像都在以不同的形式或直接或间接的参与…

【视频创作思维流程】教你从0培养视频创作思维

【视频创作思维流程】教你从0培养视频创作思维 1.创作认知2.培养自己的想象力2.1通过音乐辅助闭上眼睛想象2.2多看多见多模仿 3 视频脚本3.1简单的脚本3.2复杂脚本 4.拍摄预见能力4.1拍摄预见力思维用于转场4.2拍摄预见力思维给特效制作留住空间4.2拍摄预见力思维给字幕制作留住…

src挖掘-记一次付费资源的sign绕过

0x01 前言 最近都没怎么挖到过细小的漏洞,一直纠结于一些比较难以实现的点,天天在各种测试、上线服务器里面fuzz找遗漏的点(bushi) 大概上周突破了一处付费资源免费调用,定级了,故发出来水水文 0x02 绕过过程 逛着逛着主站&…

五种最新算法求解柔性作业车间调度问题(Flexible Job Shop Scheduling Problem,FJSP),提供MATLAB代码

一、WSA求解FJSP FJSP:波搜索算法(Wave Search Algorithm, WSA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码-CSDN博客 二、SBOA求解FJSP FJSP:蛇鹫优化算法(Secretary bird optimization algorithm&a…

模糊小波神经网络(MATLAB 2018)

模糊系统是一种基于知识或规则的控制系统,从属于智能控制,通过简化系统的复杂性,利用控制法来描述系统变量之间的关系,采用语言式的模糊变量来描述系统,不必对被控对象建立完整的数学模型。相比较传统控制策略&#xf…

WIN系统 -> 以太网未识别的网络问题

1.方法1 2. 3. 根据诊断提示解决问题。 方法2. 右键以太网属性

GiantPandaCV | 浅谈分辨率对模型影响以及训练方法

本文来源公众号“GiantPandaCV”,仅用于学术分享,侵权删,干货满满。 原文链接:浅谈分辨率对模型影响以及训练方法 一、前言 最近几个人在讨论模型训练的时候,提到了一个尺度对于模型的影响以及训练方法的收益&#…

一天挣几十元的网上兼职副业有哪些?推荐几个适合普通人做的兼职副业,有线上的也有线下的,建议收藏哦~

一天几十的兼职,不是几百的,这个会更容易实现。 相比网络上充斥着各种五花八门的兼职,教你轻松月入过万,一年几十万的...... 对于绝大多数没有一技之长的普通人,网络小白的话刚开始会很难的,慢慢来就可以…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branches: [[nam…

自然语言处理(NLP)—— 置信度(Confidence)

1. 置信度(Confidence)的概念 置信度(Confidence)在机器学习和统计中通常指一个模型对其做出的预测是正确的确信程度。在分类任务中,置信度通常由模型赋予特定类别的概率值来表示。例如,在文本分类或实体识…

阿里云短信服务使用(Java)

文章目录 一、流程1.打开短信服务2.提交材料申请资质3.资质通过后,申请短信签名并设置短信模板4.右上角设置AccessKey5.充值 二、参考官方文档调用API1.引入maven依赖2.调用API补充 一、流程 1.打开短信服务 登陆注册阿里云 搜索“短信服务”,点击“免…

WHAT - 容器化系列(一)

这里写目录标题 一、什么是容器与虚拟机1.1 什么是容器1.2 容器的特点1.3 容器和虚拟机的区别虚拟机(VM):基于硬件的资源隔离技术容器:基于操作系统的资源隔离技术对比总结应用场景 二、容器的实现原理1. Namespace(命…

TVS管的功率计算与选型

“选择多大功率的TVS管才算合适?”。关于TVS功率的选择,不晓得之前你考虑过没。反正我这边是感觉网上关于TVS管参数、选型等文章比较多,但关于TVS管功率计算及功率选型的文章比较少。但往往在这些点上更能体现面试者的功力。 研究过TVS规格书…

go语言linux安装

下载:https://go.dev/dl/ 命令行使用 wget https://dl.google.com/go/go1.19.3.linux-amd64.tar.gz解压下载的压缩包,linux建议放在/opt目录下 我放在/home/ihan/go_sdk下 sudo tar -C /home/ihan/go_sdk -xzf go1.19.3.linux-amd64.tar.gz 这里的参数…

【LeetCode热题100总结】239. 滑动窗口最大值

题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,5,3,6,7]…

Vue3-Ref Reactive toRef toRefs对比学习、标签ref与组件ref

响应式数据: Ref 作用:定义响应式变量。 语法:let xxx ref(初始值)(里面可以是任何规定内类型、数组等)。 返回值:一个RefImpl的实例对象,简称ref对象或ref,ref对象的value属性是响应式的。 注意点&am…

python安装pystan教程

简介 PyStan是Stan编程语言的Python接口,Stan是一种用于统计建模和数据分析的概率编程语言。PyStan使用户能够在Python环境中定义、编译和采样Stan模型。 安装步骤 首先,需要先安装 Cython pip install Cython -i https://mirrors.aliyun.com/pypi/sim…

三十三篇: 解锁决策之门:专家系统深度探索与未来展望

解锁决策之门:专家系统深度探索与未来展望 在今天这个日益复杂的世界中,我们对决策的速度和质量提出了更高的要求。在众多解决方案中,专家系统作为人工智能的一大分支,扮演着不可或缺的角色。它不仅是技术创新的产物,…

React常见的一些坑

文章目录 两个基础知识1. react的更新问题, react更新会重新执行react函数组件方法本身,并且子组件也会一起更新2. useCallback和useMemo滥用useCallback和useMemo要解决什么3. react的state有个经典的闭包,导致拿不到最新数据的问题.常见于useEffect, useMemo, useCallback4. …

【激光雕刻机上位机的成品软件】核心功能 - 参考wecreat

Software | WeCreat MakeIt! https://wecreat.com/pages/software 体验软件如上,自行下载体验。 价格5W,本人为 wecreat 创立之初上位机软件开发的核心员工,详细内容私信我。 由于该公司快3个月未给我竞业补偿了,对我不仁那我…