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的原因。

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

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

相关文章

ChunJun: 自定义插件

序言 Chunjun的版本兼容可能会有问题,在我们了解了自定义插件后,在修改源码以应对不同的场景就会得心应手了,针对Chunjun1.12.Release版本说明cuiyaonan2000163.com 自定义插件整体流程 从数据流的角度来看ChunJun,可以理解为不同数据源的数据流通过对应的ChunJu…

单元测试 —— JUnit 5 参数化测试

JUnit 5参数化测试 目录 设置我们的第一个参数化测试参数来源 ValueSourceNullSource & EmptySourceMethodSourceCsvSourceCsvFileSourceEnumSourceArgumentsSource参数转换参数聚合奖励总结 如果您正在阅读这篇文章,说明您已经熟悉了JUnit。让我为您概括一下…

使用原生html<table>构造复杂table表

<table border data-sort"sortDisabled" align"center" class"table"><tbody><tr class"textarea1"><td rowspan"1" colspan"2" class"background-gray"><label>日期<…

Fiddler抓取Https请求配置

官网&#xff1a;https://www.telerik.com/fiddler 配置抓取https包 1.Tools->Options->Https&#xff0c;勾选下面。 2.Actions ->Trust Root Certificate.安装证书到本地 3.在手机端设置代理&#xff1a;本机ip如&#xff1a;192.168.1.168 端口号:8888。 4.手机…

Vue中的自定义指令详解

文章目录 自定义指令自定义指令-指令的值&#xff08;给自定义指令传参数&#xff09;自定义指令- v-loading指令封装 自定义指令 自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom 操作&#xff0c;扩展额外功能&#xff08;自动聚焦&#xff0c;自动加载&a…

@DateTimeFormat 和 @JsonFormat 的详细研究

关于这两个时间转化注解&#xff0c;先说结论 一、介绍 1、DateTimeFormat DateTimeFormat 并不会根据得到其属性 pattern 把前端传入的数据转换成自己想要的格式&#xff0c;而是将前端的String类型数据封装到Date类型&#xff1b;其次它的 pattern 属性是用来规范前端传入…

el-select 下拉框全选、多选的几种方式组件

组件一、基础多选 适用性较广的基础多选&#xff0c;用 Tag 展示已选项 <template><el-select v-model"value1" multiple placeholder"请选择"><el-optionv-for"item in options":key"item.value":label"item.la…

深入理解C#中委托的使用及不同类型委托的应用示例

在C#中&#xff0c;委托是一种强大而灵活的机制&#xff0c;可以引用一个或多个方法&#xff0c;并允许以类似函数指针的方式进行调用。委托在事件处理、回调函数和多线程编程等场景中非常有用。本文将深入探讨C#中委托的使用&#xff0c;并介绍不同类型委托的应用示例。 目录…

基于改进莱维飞行和混沌映射的粒子群优化BP神经网络预测股票价格研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基于Java+SpringBoot+Vue3+Uniapp前后端分离考试学习一体机设计与实现2.0版本(视频讲解,已发布上线)

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

ChatGPT降温背后:大模型发展迎来真正转折点?

作为目前AI领域的“神级产品”&#xff0c;ChatGPT的诞生&#xff0c;即吹响了AI革命的号角&#xff0c;随后包括谷歌、微软、Meta在内的国外科技公司&#xff0c;以及百度、华为、阿里、商汤科技、360、科大讯飞等在内的国内大厂&#xff0c;纷纷在短时间内推出了自家大模型产…

LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】

文章目录 2.大语言模型基础2.1、编码器和解码器架构2.2、注意力机制2.2.1、注意力机制&#xff08;Attention&#xff09;2.2.2、自注意力机制&#xff08;Self-attention&#xff09;2.2.3、多头自注意力&#xff08;Multi-headed Self-attention&#xff09; 2.3、transforme…

Crypto:一眼就解密

题目 根据题目给出的信息可知&#xff0c;flag的为base64编码&#xff0c;数字后面的可以知道为base64编码&#xff0c;解码可得

oracle 根据分号分割为多个列

oracle 没有split 函数&#xff0c;因此没法直接使用&#xff0c;但是时间上会遇到需要分割的时候&#xff0c;可以使用正则表达式 SELECT REGEXP_SUBSTR(administration, [^;], 1, 1) AS SKILL1, REGEXP_SUBSTR(administration, [^;], 1, 2) AS SKILL2, REGEXP_SUBSTR(admini…

Cpp/Qt-day050921Qt

目录 实现使用数据库的登录注册功能 头文件&#xff1a; registrwidget.h: widget.h: 源文件&#xff1a; registrwidget.c: widget.h: 效果图&#xff1a; 思维导图 实现使用数据库的登录注册功能 头文件&#xff1a; registrwidget.h: #ifndef REGISTRWIDGET_H #de…

【Kafka系列】(二)Kafka的基本使用

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 文章更新计划[2] 系列文章地址[3] Kafka 线上集群部署方案怎么做 操作系统 先说结论&#xff0c;Kafka 部署在 Linux 上要比 Window…

[网鼎杯 2020 朱雀组]Nmap 通过nmap写入木马 argcmd过滤实现逃逸

这道题也很好玩 啊 原本以为是ssrf 或者会不会是rce 结果是通过nmap写入木马 我们来玩一下 传入木马 映入眼帘是nmap 我们首先就要了解nmap的指令 Nmap 相关参数-iL 读取文件内容&#xff0c;以文件内容作为搜索目标 -o 输出到文件-oN 标准保存-oX XML保存-oG Grep保存-oA…

北工大汇编——综合题(2)

题目要求 编写一个比赛得分程序。共有7 个评委&#xff0c;按百分制打分&#xff0c;计分 原则是去掉一个最高分和一个最低分&#xff0c;求平均值。要求&#xff1a; 评委的打分以十进制从键盘输入。成绩以十进制给出&#xff0c;并保留 1位小数。输入输出时屏幕上要有相应提…

分治算法求解:逆序对,Max Sum,棋盘覆盖,a-Good String——中山大学软件工程学院算法第四次实验课 必做+选做题

写英文注释不是要“秀英文”&#xff0c;而是因为鄙人正在准备雅思&#xff0c;顺手练习 逆序对 题目描述 完整代码 #include<iostream> using namespace std; int num[500010]; // input numbers int tmp[500010]; // sequence after merging left and right part lon…

鼠标不动了怎么办?3招解决问题!

“这是怎么回事呢&#xff1f;我的鼠标怎么会用着用着就突然不动了呢&#xff1f;现在有一些比较重要的工作要处理。请问有什么方法可以快速解决这个问题吗&#xff1f;” 随着电脑在我们日常生活和工作中的广泛应用&#xff0c;鼠标是我们操作电脑不可或缺的工具之一。但是&am…