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

news2024/11/17 3:49:16

起源

前二天项目上在核对外部对接服务的五元组列表的时候,有一位客户提问对于同样的服务同时支持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.coloradmin.cn/o/1716995.html

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

相关文章

【哈希】用哈希桶封装unordered_map unordered_set

🎉博主首页: 有趣的中国人 🎉专栏首页: C进阶 🎉其它专栏: C初阶 | Linux | 初阶数据结构 小伙伴们大家好,本片文章将会讲解 用哈希桶封装 unordered_map & unordered_set 的相关内容。 如…

pdf拆分成有图和无图的pdf(方便打印)

pdf拆分成有图和无图的pdf(方便打印) 原因 打印图片要彩印,每次都要手动弄,打印的时候很麻烦; 随着打印次数的增加,时间就越来越多 为解决此问题,使用python写一个exe解决这个问题 历程 找一个python的GUI界面找到 t…

USART串口外设

USART介绍 USART:另外我们经常还会遇到串口,叫UART,少了个S,就是通用异步收发器,一般我们串口很少使用这个同步功能,所以USART和UART使用起来,也没有什么区别。 其实这个STM32的USART同步模式&a…

MySQL 索引的使用

本篇主要介绍MySQL中索引使用的相关内容。 目录 一、最左前缀法则 二、索引失效的场景 索引列运算 字符串无引号 模糊查询 or连接条件 数据分布 一、最左前缀法则 当我们在使用多个字段构成的索引时(联合索引),需要考虑最左前缀法则…

基于物理的分析模型,用于具有场板结构的GaN HEMT的输入、输出及反向电容

Physics-Based Analytical Model for Input, Output, and Reverse Capacitance of a GaN HEMT With the Field-Plate Structure(TPE 17年) 摘要 该论文提出了一种分析模型,用于描述带有场板结构的常开型AlGaN/GaN高电子迁移率晶体管&#x…

多屏多机同控!天途首发瑶光智控地面站

瑶光智控地面站全新发布!高性能处理器,高亮三屏显示。内置天途云控系统,融合图传、控制、存储和数据处理等功能与一体,强大算力,高度集成无人机、无人船、无人车和机械狗等多种无人装备进行云控云算。 内置4G公网通讯模…

RabbitMQ-发布/订阅模式

1、发布/订阅模式介绍 在普通的生产者、消费者模式,rabbitmq会将消息依次传递给每一个消费者,一个worker一个,平均分配,这就是Round-robin调度方式,为了实现更加复杂的调度,我们就需要使用发布/订阅的方式…

现货白银的交易时间有多连贯?

国际市场上的现货白银优势很多,它除了具备国内同类型品种所不具备的数十倍资金杠杆外,也基本上实现了全天24小时不间断的交易时间,所以投资者可以在全天候连贯的行情中,寻找属于自己的交易获利机会。 但对于内地的投资者来说&…

【香橙派 AIpro】新手保姆级开箱教程:Linux镜像+vscode远程连接

香橙派 AIpro 开发板 AI 应用部署测评 写在最前面一、开发板概述官方资料试用印象适用场景 二、详细开发前准备步骤1. 环境准备2. 环境搭建3. vscode安装ssh插件4. 香橙派 AIpro 添加连接配置5. 连接香橙派 AIpro6. SSH配置 二、详细开发步骤1. 登录 juypter lab2. 样例运行3. …

HQChart使用教程100-uniapp如何在vue3运行微信小程序

HQChart使用教程100-uniapp如何在vue3运行微信小程序 症状原因分析解决思路解决步骤1. 修改vender.js2. 修改HQChartControl.js 完整实例HQChart代码地址 症状 HQChart插件在uniappvue3的项目编译成小程序以后, 运行会报错,见下图。 原因分析 查了下…

从了解到掌握 Spark 计算框架(二)RDD

文章目录 RDD 概述RDD 组成RDD 的作用RDD 算子分类RDD 的创建1.从外部数据源读取2.从已有的集合或数组创建3.从已有的 RDD 进行转换 RDD 常用算子大全转换算子行动算子 RDD 算子综合练习RDD 依赖关系窄依赖宽依赖宽窄依赖算子区分 RDD 血统信息血统信息的作用血统信息的组成代码…

【C语言回顾】预处理

前言1. 简单概要2. 预处理命令讲解结语 上期回顾: 【C语言回顾】编译和链接 个人主页:C_GUIQU 归属专栏:【C语言学习】 前言 各位小伙伴大家好!上期小编给大家讲解了C语言中的编译和链接,接下来我们讲解一下预处理! …

k8s自定义资源你会创建吗

创建自定义资源定义 CustomResourceDefinition 当你创建新的 CustomResourceDefinition(CRD)时,Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的,也可以是集群作用域的…

接口测试工具:Postman的下载安装及使用

1 Postman 介绍 1.1 Postman 是什么 Postman 是一款功能超级强大的用于发送 HTTP 请求的 测试工具 做 WEB 页面开发和测试的人员常用工具 创建和发送任何的 HTTP 请求(Get/Post/Put/Delete...) 1.2 Postman 相关资源 1.2.1 官方网站:https://www.postman.com/ …

算法(七)插入排序

文章目录 插入排序简介代码实现 插入排序简介 插入排序(insertion sort)是从第一个元素开始,该元素就认为已经被排序过了。然后取出下一个元素,从该元素的前一个索引下标开始往前扫描,比该值大的元素往后移动。直到遇到比它小的元…

【Uniapp小程序】自定义导航栏uni-nav-bar滚动渐变色

效果图 新建activityScrollTop.js作为mixins export default {data() {return {navBgColor: "rgba(0,0,0,0)", // 初始背景颜色为完全透明navTextColor: "rgba(0,0,0,1)", // 初始文字颜色};},onPageScroll(e) {// 设置背景const newAlpha Math.min((e.s…

elasticsearch7.15实现用户输入自动补全

Elasticsearch Completion Suggester(补全建议) Elasticsearch7.15安装 官方文档 补全建议器提供了根据输入自动补全/搜索的功能。这是一个导航功能,引导用户在输入时找到相关结果,提高搜索精度。 理想情况下,自动补…

手机站怎么推广

随着手机的普及和移动互联网的快速发展,越来越多的人开始使用手机进行在线购物、社交娱乐、阅读资讯等,同时也催生了越来越多的手机站的出现。但是,在海量的手机站中,要让自己的手机站脱颖而出,吸引更多用户访问和使用…

β-烟酰胺单核苷酸(NMN)功能不断得到验证 市场规模呈增长态势

β-烟酰胺单核苷酸(NMN)功能不断得到验证 市场规模呈增长态势 β-烟酰胺单核苷酸(β-Nicotinamide mononucleotide,NMN)是一种生物活性分子,是一种辅酶Ⅰ(NAD)的前体,也是…

Python魔法之旅-魔法方法(04)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…