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

TCP和UDP区别

TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)都是Internet协议套件中的传输层协议,但它们在工作方式、特性和适用场景上有显著区别:

  1. 连接方式

    • TCP 是面向连接的协议。在数据传输前,TCP会先通过三次握手建立连接,确保双方都准备好进行通信,类似于打电话前需要先拨号接通。
    • UDP 是无连接的协议。它不建立正式的连接就可以直接发送数据报,类似于写信并邮寄出去,不确认对方是否在家或能否接收。
  2. 数据传输可靠性

    • TCP 提供可靠的数据传输服务,确保数据包无差错、不丢失、不重复且按序到达。TCP通过序列号、确认应答、重传机制和流量控制等策略来保证数据的可靠性。
    • UDP 不保证数据包的可靠传输,它只是尽可能快地将数据包发送出去,由上层应用负责处理数据完整性、顺序和丢包问题。因此,UDP可能遇到数据丢失、乱序等问题。
  3. 数据结构

    • TCP 是基于字节流的,它将数据看作一个无界的字节流,并没有明确的数据边界,适合连续数据的传输。【需要对字节流进行分割和组装】
    • UDP 是基于数据报的,每个UDP数据报都是一个独立的信息单元,包含完整的源地址、目的地址以及数据,适合一次性传输小块数据。【有明确的数据边界,数据报是独立的实体】
  4. 资源消耗和延迟

    • TCP 需要维护连接状态和执行复杂的错误检测与恢复机制,因此对系统资源的需求更高,可能导致较高的延迟。
    • **UDP 由于无需建立连接和维护连接状态,其头部开销小,处理速度快,延迟较低,更适用于对实时性要求高的应用。
  5. 应用场景

    • TCP 适用于对数据完整性、顺序和可靠性要求高的应用,如Web浏览器、电子邮件、文件传输(FTP)、远程登录(SSH)等。
    • UDP 适用于对实时性要求高、能容忍一定数据丢失的应用,如在线视频、直播、语音通话、在线游戏、DNS查询等。

概念讲解:

错误检查:

假设Alice要通过TCP给Bob发送一连串的数据包,每个数据包都有一个唯一的序列号。

  1. 发送数据:Alice首先发送数据包1,这个数据包包含了序列号1,表示这是第一个数据包。

  2. 等待确认:Bob收到数据包1后,他会向Alice发送一个确认应答(ACK),这个ACK中会包含他期望接下来收到的数据包的序列号。既然Bob已经收到了序列号为1的数据包,他的ACK就会声明他下一个期待接收的是序列号为2的数据包。

  3. 超时重传:如果Alice没有在预期的时间内收到针对数据包1的ACK(可能是因为数据包在网络中丢失了或者ACK在返回途中丢失),Alice会启动一个计时器。当这个计时器到达设定的超时时间后,Alice就会认为数据包1没有成功到达Bob,于是她会重新发送数据包1。

  4. 接收与排序:一旦Bob收到了重新发送的数据包1,他会再次发送ACK确认收到。这样,即使最初的数据包1丢失了,通过重传机制,Bob最终还是能够完整无误地接收到所有数据包,并且按照序列号对它们进行排序。

重传机制:

假设Alice要通过TCP给Bob发送一连串的数据包,每个数据包都有一个唯一的序列号。

  1. 发送数据:Alice首先发送数据包1,这个数据包包含了序列号1,表示这是第一个数据包。

  2. 等待确认:Bob收到数据包1后,他会向Alice发送一个确认应答(ACK),这个ACK中会包含他期望接下来收到的数据包的序列号。既然Bob已经收到了序列号为1的数据包,他的ACK就会声明他下一个期待接收的是序列号为2的数据包。

  3. 超时重传:如果Alice没有在预期的时间内收到针对数据包1的ACK(可能是因为数据包在网络中丢失了或者ACK在返回途中丢失),Alice会启动一个计时器。当这个计时器到达设定的超时时间后,Alice就会认为数据包1没有成功到达Bob,于是她会重新发送数据包1。

  4. 接收与排序:一旦Bob收到了重新发送的数据包1,他会再次发送ACK确认收到。这样,即使最初的数据包1丢失了,通过重传机制,Bob最终还是能够完整无误地接收到所有数据包,并且按照序列号对它们进行排序。

重传类型包括:

  1. 超时重传:TCP为每个发送的数据段设置一个定时器(称为重传定时器或RTO,Retransmission TimeOut)。如果在预期的时间内没有收到对方确认该数据段的ACK(Acknowledgment)报文,就认为数据段丢失或者网络中存在严重延迟,这时会触发超时重传。发送方会重新发送未被确认的数据段。

  2. 快速重传:这是对超时重传的一种补充。当接收方检测到数据包的顺序混乱(比如收到了序列号更高的数据包但期待的是更低序列号的数据包),它会立即发送重复的ACK,告知发送方某个特定序列号的数据包未到达。如果发送方短时间内收到多个重复确认同一个序列号的ACK,不用等待重传定时器超时,TCP会快速反应并重传被认为丢失的数据包,这样可以更快地恢复数据流,减少延迟。

  3. 选择性确认(SACK,Selective Acknowledgment):在某些情况下,接收方可能已经收到了数据流中的某些数据包,而另外一些则丢失了。选择性确认允许接收方在ACK中具体指出哪些数据片段已经正确接收到,这样发送方就可以只重传那些确实丢失的数据包,而不是从最后一个确认的数据包开始全部重传,提高了效率。

相关文章:

TCP和UDP区别

TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)都是Internet协议套件中的传输层协议,但它们在工作方式、特性和适用场景上有显著区别&#xff…...

[Shell编程学习路线]——编制第一个shell脚本入门篇

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月12日10点23分 🀄️文章质量:93分 目录 ——前言—— 💥常用的几种shell Bash Sh …...

python数据处理分析库(一)

目录 一、NumPy 二、Pandas 三、Matplotlib and Seaborn 一、NumPy 场景:处理大规模数组和矩阵运算,可以用于科学计算、数据预处理简单示例: import numpy as npdata np.array([1, 2, 3, 4, 5]) mean np.mean(data) std_dev np.std(da…...

使用Transformer进行抄袭检测

动机 在许多行业中,尤其是在学术界,抄袭是一个重大问题。随着互联网和开放信息的兴起,这种现象甚至变得更加严重,任何人都可以通过点击访问特定主题的任何信息。 基于这一观察,研究人员一直在尝试使用不同的文本分析…...

基于深度学习的电池健康状态预测(Python)

电池的故障预测和健康管理PHM是为了保障设备或系统的稳定运行,提供参考的电池健康管理信息,从而提醒决策者及时更换电源设备。不难发现,PHM的核心问题就是确定电池的健康状态,并预测电池剩余使用寿命。但是锂电池的退化过程影响因…...

【吊打面试官系列-Mysql面试题】MySQL 如何优化 DISTINCT?

大家好,我是锋哥。今天分享关于 【MySQL 如何优化 DISTINCT?】面试题,希望对大家有帮助; MySQL 如何优化 DISTINCT? DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。 SELECT DISTINCT t…...

企业IT运维管理体系-总体规划

企业IT运维管理体系-总体规划 企业IT运维管理体系的总体规划通过科学的调研、分析、设计和建设,提升管理成熟度、增强服务能力、实现技术创新和优化资源配置。重点在于建立组织保障体系、制定运维制度、构建运维平台和完善度量指标。通过明确运维治理模式和外包管理…...

RabbitMQ-Stream(高级详解)

文章目录 什么是流何时使用 RabbitMQ Stream?在 RabbitMQ 中使用流的其他方式基本使用Offset参数chunk Stream 插件服务端消息偏移量追踪示例 示例应用程序RabbitMQ 流 Java API概述环境创建具有所有默认值的环境使用 URI 创建环境创建具有多个 URI 的环境 启用 TLS…...

Web前端图片并排显示的艺术与技巧

Web前端图片并排显示的艺术与技巧 在Web前端开发中,图片并排显示是一种常见的布局需求。然而,实现这一目标并非易事,需要掌握一定的技巧和艺术。本文将从四个方面、五个方面、六个方面和七个方面深入探讨Web前端图片并排显示的奥秘。 四个方…...

豆瓣电影信息爬虫【2024年6月】教程

豆瓣电影信息爬虫【2024年6月】教程,赋完整代码 在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息: 完整代码放到最后 ; 完整代码放到最后 ; 完整代码放到最后 ;…...

Flutter- AutomaticKeepAliveClientMixin 实现Widget保持活跃状态

前言 在 Flutter 中,AutomaticKeepAliveClientMixin 是一个 mixin,用于给 State 类添加能力,使得当它的内容滚动出屏幕时仍能保持其状态,这对于 TabBarView 或者滚动列表中使用 PageView 时非常有用,因为这些情况下你…...

《计算机组成原理》期末复习题节选

第三章–存储系统 3.1 存储器性能指标 核心公式: 存储容量存储字数*字长 ,存储字数表示存储器的地址空间的大小,字长表示一次存取操作的数据量.数据传输率数据宽度/存储周期 1、设机器字长为32位,一个容量为16MB的存储器&…...

NSSCTF中的popchains、level-up、 What is Web、 Interesting_http、 BabyUpload

目录 [NISACTF 2022]popchains [NISACTF 2022]level-up [HNCTF 2022 Week1]What is Web [HNCTF 2022 Week1]Interesting_http [GXYCTF 2019]BabyUpload 今日总结&#xff1a; [NISACTF 2022]popchains 审计可以构造pop链的代码 <php class Road_is_Long{public $…...

量产维护 | 芯片失效问题解决方案:从根源找到答案

芯片失效分析是指对电子设备中的故障芯片进行检测、诊断和修复的过程。芯片作为电子设备的核心部件,其性能和可靠性直接影响整个设备的性能和稳定性。 随着半导体技术的迅速发展,芯片在各个领域广泛应用,如通信、计算机、汽车电子和航空航天等。 因此,对芯片故障原因进行…...

Linux忘记密码的解决方法

1、进入GRUB页面&#xff0c;选择对应的内核按下‘e’键&#xff1b; 2、进入内核修改信息界面&#xff0c;找到Linux这一行&#xff0c;在这一行的末尾加上 init/bin/sh 按下ctrlx进入单用户模式 3、进入单用户后&#xff0c;重新挂载根目录&#xff0c;使其可写&#xff1…...

数据结构(DS)学习笔记(二):数据类型与抽象数据类型

参考教材&#xff1a;数据结构C语言版&#xff08;严蔚敏&#xff0c;杨伟民编著&#xff09; 工具&#xff1a;XMind、幕布、公式编译器 正在备考&#xff0c;结合自身空闲时间&#xff0c;不定时更新&#xff0c;会在里面加入一些真题帮助理解数据结构 目录 1.1数据…...

【C++进阶】模板与仿函数:C++编程中的泛型与函数式编程思想

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;栈和队列相关知识 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀模板进阶 &#x1f9e9;<&…...

华安保险:核心系统分布式升级,提升保费规模处理能力2-3倍 | OceanBase企业案例

在3月20日的2024 OceanBase数据库城市行的活动中&#xff0c;安保险信息科技部总经理王在平发表了以“保险行业核心业务系统分布式架构实践”为主题的演讲。本文为该演讲的精彩回顾。 早在2019年&#xff0c;华安保险便开始与OceanBase接触&#xff0c;并着手进行数据库的升级…...

佐西卡在美国InfoComm 2024展会上亮相投影镜头系列

6月12日至14日&#xff0c;2024美国视听显示与系统集成展览会将在拉斯维加斯会议中心盛大开幕。这场北美最具影响力的视听技术盛会&#xff0c;将汇集全球顶尖的视听解决方案&#xff0c;展现专业视听电子系统集成、灯光音响等领域的最新技术动态。 在这场科技盛宴中&#xff0…...

【权威出版/投稿优惠】2024年智慧城市与信息化教育国际会议(SCIE 2024)

2024 International Conference on Smart Cities and Information Education 2024年智慧城市与信息化教育国际会议 【会议信息】 会议简称&#xff1a;SCIE 2024 大会时间&#xff1a;点击查看 大会地点&#xff1a;中国北京 会议官网&#xff1a;www.iacscie.com 会议邮箱&am…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么&#xff1f; 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元&#xff08;地址&#xff09;&#xff0c;其核心含义与能力如下&#xff1a; 1. 核心定义 地址位宽&#xff1a;CPU或内存控制器用32位…...