当前位置: 首页 > news >正文

TCP 和 UDP哪个更好

传输控制协议 (TCP) 和用户数据报协议 (UDP) 是互联网的基础支柱,支持从网络源到目的地的不同类型的数据传输。TCP更可靠,而UDP优先考虑速度和效率。本文解释了两种协议的工作原理,并详细讨论了 10 个关键差异。

目录

  • 什么是TCP(传输控制协议)?
  • 什么是UDP(用户数据报协议)?
  • TCP 与 UDP:了解 10 个关键差异

什么是TCP(传输控制协议)?

传输控制协议(TCP)被定义为面向连接的通信协议,允许计算设备和应用程序通过网络发送数据并验证其交付,形成全球互联网的关键支柱之一。

 

技术合作计划的功能

TCP 依赖于三次握手(同步、同步确认和最终确认)

通信程序和计算设备利用TCP通过网络交换消息。该协议的任务是通过互联网传输数据包,并确保跨网络成功传递消息和数据。

在发送任何数据之前,客户端和服务器必须建立连接。每当建立连接时,服务器都必须主动侦听客户端请求。TCP 协议是基于连接的,因此当数据在接收方和发送方之间传递时,它会在接收方和发送方之间创建并维护连接。因此,通过互联网传输的任何信息都保证保持不变。

因此,TCP是用于网络的最流行的协议之一。

以下是 TCP 的一些最关键功能:

  • 客户端确认来自服务器的数据传递。
  • 超时期限过后,服务器会尝试重新传输未传送的数据。
  • 在拥塞的网络中,TCP 会延迟数据传输。
  • 它使用三次握手来检查数据传输错误。

然而,虽然TCP是一种本能可靠的协议,但这些反馈机制也会导致更大的开销大小。这意味着它将消耗系统上可用的更多带宽。大多数联机应用程序将用户数据报协议 (UDP) 与 TCP 结合使用来解决此问题。

另请参阅:什么是网络流量分析?定义、重要性、实施和最佳实践

什么是UDP(用户数据报协议)?

用户数据报协议 (UDP) 是一种面向消息的通信协议,它允许计算设备和应用程序通过网络发送数据而无需验证其交付,这最适合实时通信和广播系统。

 

UDP的功能

UDP 可实现连续数据传输(即响应),而无需确认或确认连接

与TCP一样,其目的是发送和接收消息,因此其功能类似于传输控制协议。UDP 的独特之处在于它不是基于连接的。在这种情况下,“无连接”是指在通信发生之前没有建立任何连接的事实。

此外,它不能确保从服务器传递数据包。它通常被称为“即发即弃”协议,因为它不关心客户端是否收到数据。

在大多数情况下,UDP 比 TCP 快,因为它不能像 TCP 那样确保数据包的传递。

UDP 协议不适合发送电子邮件、查看网页或下载文件。但是,它主要用于广播或多任务网络流量等实时应用。UDP的主要功能如下:

  • 它适用于允许数据包丢失的带宽密集型应用程序。
  • 数据传输的延迟将减少。
  • 它用于一次发送大量数据包。
  • 您可能会丢失一些数据。

现在让我们看看TCP和UDP之间的关键区别。

另请参阅: 10 年 2022 大网络流量分析工具

TCP 与 UDP:了解 10 个关键差异

传输控制协议在以下方面与用户数据报协议不同:

TCP和UDP之间的区别

组织 TCP 和 UDP 之间的主要区别

1. TCP 是面向连接的,而 UDP 是无连接的

由于TCP是面向连接的协议,因此它依赖于处于被动打开状态的服务器。被动开放服务器侦听任何尝试与其连接的客户端。客户端必须首先与服务器连接,然后发送或接收数据。连接通过三次握手建立。客户端发送同步请求,服务器发回确认,客户端返回同步确认作为响应。

相比之下,UDP 是一种无连接协议。这种类型的数据传输涉及发送IT信号的网络端点,而不检查接收器是否可用或可用于接收信号。消息被发送出去,没有考虑收件人,也没有考虑目的地。无连接传输协议可能会丢失最少数量的数据包。但是,对于接收客户端来说,这并不总是很明显,例如,在视频通话期间。

2. TCP 利用比 UDP 更多的错误检查机制

传输控制协议使用三种不同的机制来检查错误并确保交付时的数据完整性。这使得它非常可靠。TCP 通过以下方式检查错误:

  • 超时后限制连接:连接具有指定的超时期限。如果服务器或客户端在此时间段内未收到确认消息,则连接将关闭,并且必须重新建立,然后才能传输数据。
  • 在标头中包含校验和字段:数据包在标头中包含 16 位值,称为校验和字段。TCP 包括每个数据段的校验和字段,它在传输过程中评估其完整性。
  • 发送和接收确认:建立连接或发送数据时,服务器会发送确认或 ACK 消息。客户端接收确认,并通过向 ACK 消息值添加一个来发回其消息。

这三种措施确保通过TCP传输正确的数据流,而不会丢失或损坏,而是通过TCP传输。相比之下,UDP 仅使用校验和运行基本错误检查。

3. TCP按特定顺序发送数据,而UDP协议没有固定的顺序

为了确定需要将数据段传递给哪个应用程序进程,TCP 使用端口号。此外,它还使用序列号将自身与远程主机同步。每个数据段都使用序列号发送和接收。这允许系统跟踪数据传输的特定顺序,保持所需的顺序。

UDP 不遵循排序机制。数据包是独立发送的,没有固定的顺序,并在接收方应用程序中重新拼接在一起。请记住,它们将按照接收顺序重新拼接在一起 - 即,协议无法判断哪些数据包应该首先出现,以及它们是否以错误的顺序接收。应用程序将错误地接收数据包。UDP 还会丢弃它无法处理的任何数据包。

4. UDP比TCP更快,更高效

UDP如此受欢迎的关键原因之一是它的速度和效率,尽管它有内在的缺陷。用户数据报协议不需要已建立的连接即可开始发送数据包。因此,它节省了打开服务器并将其置于“被动打开”侦听状态通常需要的时间。它允许数据传输更快地开始,而不会延迟或延长延迟时间。也无需按顺序放置数据包或发送和接收确认,从而节省时间。

除了延迟,UDP在带宽方面也更有效率。一旦数据从服务器移动到客户端,TCP 就会参与许多错误检查机制、确认过程和排序措施,这些机制会占用大量带宽。相比之下,UDP 可以快速将数据流从一个计算位置获取到另一个计算位置,而无需进行大量检查和平衡。这使得它适用于低性能的网络、移动设备和其他连接条件,在这些情况下,资源可能不那么容易获得。

传输控制协议比 UDP 慢,并且更占用资源。如果数据序列损坏,TCP将重新重新启动连接,要求服务器发送和接收确认,建立三向握手等。 UDP只是丢弃丢失或损坏的数据包,然后继续下一个数据包,使其效率大大提高。

5. 与 UDP 不同,TCP 不能用于组播或广播服务

TCP 是真正的端到端连接。这意味着在一个通信端点和另一个通信端点之间建立连接,并采取准确的记录保存措施来跟踪正在发送的数据包和字节。同步和确认消息将上一条消息的值加 1,使其易于跟踪和跟踪。数据包标头还包含排序段,以保持数据流的顺序。这些使其成为点对点传输系统的理想选择,而不是将数据广播到多个端点的场景。

在多播或广播方案中,服务器面向多个收件人。它中继数据而无需等待确认或任何交付确认,这正是UDP的工作方式。UDP 的核心架构使其成为将数据包广播到整个端点(或子网)组的理想选择,无论它们处于“被动打开”还是“侦听”状态。在这种情况下,数据传输不会将特定的网络主机指定为目标,而是针对一组主机。

另请参阅: 什么是网络映射?2022 年的定义、流程、重要性和最佳实践

6. TCP 利用流量控制,而 UDP 不利用

流量控制是一种机制,通过该机制,服务器首先检查接收方的能力,以了解它可以接受多少数据以及以什么速度接受。传输控制协议通过滑动窗口方法实现流量控制。接收方授予发送器发送数据的权限,直到滑动窗口中的窗口已满。一旦发生这种情况,发射器必须等到收件人澄清有更大的窗口可用。

TCP利用流量控制信息来校准数据传输的速度。根据接收方主机的不同,传输控制协议可以调整数据包的传输速度,避免使接收方不堪重负。但是,这也意味着服务器将在发送每个数据包之前等待流量控制信息,使其速度变慢且效率更低。

UDP 不使用任何流控制技术。它以最适合原始服务器的速度发送数据,因此,强大的服务器可能会用多个连续的数据流轰炸接收设备。组织可以部署路由器来干预 UDP 数据流,并校准通过流量管制策略发送数据包的速度。当UDP发送数据的速度太快,并且接收者不堪重负时,它只会丢弃接收方无法接受的数据包。

7. UDP 不控制拥塞,而 TCP 实现拥塞避免算法

在流控制中,TCP 根据接收方的接受窗口大小调整数据传输。在这里,TCP考虑了网络基础设施的容量。除了接收者之外,网络还决定数据移动的速度或速度。因此,将传输速度校准到网络可接受的水平至关重要。TCP 通过拥塞避免算法和策略实现这一点。

加法增加/乘法减少(AIMD)是使用的关键算法之一。它结合了拥塞窗口的线性增长和指数减少,以防止网络流量累积高度复杂但有效的过程。TCP将等待拥塞的网络路径清除,然后恢复传输,确保数据包不会丢失。

事实上,拥塞控制是TCP消耗如此多计算资源的主要原因。传输控制协议可以使用10+拥塞避免机制,具体取决于网络配置。这可以包括TCP Tahoe(在发生数据丢失时以缓慢启动的方式重新建立连接),TCP Reno(启动快速重新传输以进行拥塞后恢复)和其他几个。

相比之下,UDP 无法控制网络拥塞。如果路径上的流量过多,UDP 将丢弃接下来等待的数据包并发送剩余的数据包。组织可以使用专门配置的路由器来保留丢失的数据包,但此功能不是用户数据报协议固有的。

8. TCP比UDP更可靠

两种协议都有其优点和缺点,TCP的最大优势是其高可靠性。这可以归因于:

  • 传输控制协议是基于连接的。它只会将数据发送到正在侦听它的客户端。
  • 它使用三向握手系统来保持连接,同时数据一致地传输。如果连接中断,传输也会停止,并且不会丢失数据包。
  • TCP 使用排序机制以正确的顺序发送数据。这意味着通过此协议发送的图像、网页、数据文件和其他信息类型将以未损坏的状态到达。
  • TCP 保证数据将被传送。它为收到的每个数据包获取确认,并仅在客户端发送 ACK 消息后发送下一个数据包。
  • TCP 使用流量和拥塞控制机制来确保数据不会丢失、损坏、重复或无序传递。

相比之下,用户数据报协议本身并不可靠。其体系结构旨在连续向一个或多个接收客户端发送数据包,而无需等待“侦听”状态或确认。在具有挑战性的网络条件下,TCP 和 UDP 可能会导致数据包丢失。不同之处在于TCP将识别丢失并识别丢失的数据包以重新传输信息。UDP 无法判断数据包是否在传输中丢失、哪些数据包丢失或如何重新发送它们。这使得UDP的可靠性降低,尽管效率更高。

使用 UDP 协议的应用程序必须单独配置可靠性机制。例如,它可以单独配置数据传输的超时期限,并在规定时间内没有收到来自接收方的信号时主动切断UDP协议。

9. TCP 标头与 UDP 标头不同

任何通信协议都允许以字节串交换信息。这些“位字符串”由多个字段组成,每个字段包含与特定协议相关的一些信息。位字符串由两部分组成:标头和有效负载。有效负载包含消息的主体,而标头用于标识和支持通信协议的操作。TCP 和 UDP 数据传输利用两种不同类型的标头。

首先,TCP使用可变长度标头来支持更复杂的数据传输,而不会影响可靠性。标头可以包含 20 到 60 个字节之间的任何位置。相比之下,UDP 具有固定长度的标头,该标头快速高效,但通用性较差。UDP 标头只能有八个字节。

TCP 和 UDP 标头(即它们的字段)也不同。TCP 标头包含序列号、校验和、ACK 编号、控制位、滑动窗口信息、源端口、目标端口等多个指定字段。相比之下,UDP 标头更短、更简单,因为它们只包含校验和、源端口、目标端口和一些其他元素的字段。

10. UDP适用于TCP无法支持的实时数据传输

尽管UDP本质上不可靠,但它仍然是在线操作的主要内容。这是因为它非常适合实时数据传输,其中丢失几个数据包并不重要。

例如,在在线游戏中,丢失的数据包只会跳过几帧,并可能导致玩家损失几分。用户数据报协议会继续发送后续的数据包,用户可以继续播放。但是,如果单个数据包丢失,TCP 将识别。它将重新启动连接并重新传输数据,这将冻结游戏。在这种情况下,传输控制协议可能会对用户体验产生负面影响。

TCP 最适合数据完整性比传输速度更重要的用例。它将确保文件和网页完好无损地到达,甚至可以对实时分析和内容交付网络有所帮助,在这些网络中,丢弃的数据包会捏造结果。相比之下,UDP 适用于媒体传输,例如:

  • 视频通话:UDP可以支持每秒30帧或更高的视频刷新率。数据传输速度如此之快,以至于几个丢弃的数据包不会影响用户体验。
  • 在线游戏:TCP的许多清单和余额将显着影响游戏体验。如果没有完美的网络条件,帧将经常冻结,如果使用TCP,连接将重新启动。这就是推荐UDP的原因。

相关文章:

TCP 和 UDP哪个更好

传输控制协议 (TCP) 和用户数据报协议 (UDP) 是互联网的基础支柱,支持从网络源到目的地的不同类型的数据传输。TCP更可靠,而UDP优先考虑速度和效率。本文解释了两种协议的工作原理,并详细讨论了…...

Spring Boot 如何实现单点登录(SSO)

当今的应用程序越来越多地采用了微服务架构,这就引出了一个重要的问题:如何实现单点登录(Single Sign-On,简称SSO)来确保用户在多个微服务之间无需重复登录。Spring Boot是一个流行的Java框架,它提供了一些…...

C#中的(++)和(--)运算符

目录 背景: 的前加 效果展示:​ 的后加 效果展示 :​ 总结: 背景: 自增和自减运算符存在于C/C/C#/Java等高级语言中,它的作用是在运算结束前(前置自增自减运算符 )或后(后置自增自减运算符 )将 变量的值加(或减)1。 在C#中,和--是自增和自减运…...

SVG鼠标漫游

鼠标漫游 鼠标漫游就是通过移动光标和滚轮,完成画布缩放、移动的交互过程。 svg 绘图使用原点在左上角的坐标系统,一个单位代表一像素。这里的像素不能简单理解为屏幕像素,是一个用户单位。svg 的 width 和 height 属性决定图像在用户系统的…...

关于Github报SSL_ERROR_SYSCALL的解决方案

最近在运行RN项目的时候发现,在我pod install命令安装pod包时产生了 SSL_ERROR_SYSCALL 的错误,如下所示。 [!] Error installing CocoaAsyncSocket [!] /usr/bin/git clone https://github.com/robbiehanson/CocoaAsyncSocket.git /var/folders/v0/2435fl9178sd4r2_1mdgk_r…...

Redis 集群搭建教程

一、介绍 Redis 集群有着高可用、易扩展、更好的性能等优势,本文主要是实战搭建一个三主三从的 Redis 集群。 正常来说,搭建 Redis 集群需要 6 台服务器。为了简单一点,本文通过一台服务器,6 个端口,搭建一个 Redis …...

图形处理软件Photoshop Elements 2020 mac中文版 ps简化版

Photoshop Elements 2020 mac是一款非常实用的图形处理工具。ps elements 2020 mac中文版可以帮助您自动生成照片和视频作品的功能,采用Adobe Sensei AI技术可进行图像组织、编辑和创建等。Photoshop Elements 2020 for Mac激活版可以帮助您轻松整理照片和视频&…...

opencv for unity package在unity中打开相机不需要dll

下载OpenCV for Unity 导入后,里面有很多案例 直接打开就可以运行 打开相机...

[Linux入门]---进程状态

文章目录 1.进程主要状态进程运行状态进程阻塞状态进程的挂起状态 2.Linux进程状态Linux进程内核源代码①R运行状态②S睡眠状态③D磁盘休眠状态T停止状态④X死亡状态⑤Z僵尸状态⑥孤儿进程 3.总结 1.进程主要状态 进程运行状态 ①内存中有一个运行队列,其中有两个指…...

腾讯mini项目-【指标监控服务重构】2023-08-29

今日已办 Collector 指标聚合 由于没有找到 Prometheus 官方提供的可以聚合指定时间区间内的聚合函数,所以自己对接Prometheus的api来聚合指定容器的cpu_avg、cpu_99th、mem_avg 实现成功后对接小组成员测试完提供的时间序列和相关容器,将数据记录在表格…...

opencv 常用的滤波器及应用技巧

常用滤波器: 标准滤波器(邻域平均法):该滤波器是所有滤波器里最简单的一种,输出的像素值由输入的滤波核所覆盖的像素值均值决定(每个邻域像素对其贡献的权重是相同的)。高斯滤波:该…...

【PyTorch攻略(1/7)】 张量基本语法

一、说明 Tensor 是一种特殊的数据结构,与数组和矩阵非常相似。在 PyTorch 中,我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于 NumPy 和 ndarray,除了张量可以在 GPU 或其他硬件加速器上运行。事实上,张量和…...

什么是Jmeter ?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚…...

Mac 通过 brew安装的 ffmpeg 切换版本

现有版本为 6.x ,想切换至 5.x 版本 先安装 5.x 版本 brew install ffmpeg5安装完成后会出现具体版本号,也可以自己指定例如 brew install ffmpeg5.1.3 配置环境变量 .zshrc vi ~/.zshrc添加如下命令 export PATH/usr/local/Cellar/ffmpeg5/5.1.3/bin:…...

【Spring Boot】实战:实现数据缓存框架

🌿欢迎来到@衍生星球的CSDN博文🌿 🍁本文主要学习【Spring Boot】实现数据缓存框架 🍁 🌱我是衍生星球,一个从事集成开发的打工人🌱 ⭐️喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路⭐️💠作为一名热衷于分享知识的程序员,我乐于在CSDN上与广大开发者…...

MySQL数据类型之JSON

MySQL数据类型之JSON SON类型是MySQL 5.7版本新增的数据类型,用好JSON数据类型可以有效解决很多业务中实际问题。 使用JSON数据类型,推荐用MySQL 8.0.17以上的版本,性能更好,同时也支持Multi-Valued Indexes; JSON数…...

nginx_0.7.65_00截断_nginx解析漏洞

nginx_0.7.65_00截断_nginx解析漏洞 文章目录 nginx_0.7.65_00截断_nginx解析漏洞1 环境搭建1 解压nginx_0.7.652 双击启动,如有闪退,端口占用的情况,在conf文件nginx.conf修改一下端口号3 查看一下进程有nginx4 启动成功访问127.0.0.1:18080…...

建站百科:HTTP返回状态码是什么?

HTTP返回状态码是用于表示HTTP响应状态的三位数字代码。HTTP状态码由6位数字组成,每3位数字代表一种状态,如200表示成功,404表示未找到资源,500表示服务器内部错误等。 常用的状态码包括: 200:正常的网页…...

人像摄影简记

文章目录 光影室外顺光室内顺光室外逆光室内逆光散射光 姿势错误姿势避免摆拍技巧场景互动抓拍利用道具 构图构图目的构图基础概念画幅:横画幅和竖画幅景别:全身、大半身及半身、特写拍摄高度:平拍、俯拍和仰拍拍摄方位:正面、前侧…...

【Java 基础篇】Java 实现模拟斗地主游戏

欢迎阅读本篇博客,在这篇博客中,我们将详细讲解如何使用Java编写一个简单的模拟斗地主游戏。这个项目将帮助您了解Java编程中的一些基本概念,如面向对象编程、集合框架的使用、随机数生成等。 引言 斗地主是一种非常受欢迎的纸牌游戏&#…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...