TCP/UDP的区别
首先来介绍一下什么是TCP和UDP
TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议套件中两个重要的传输层协议。它们在数据传输的方式、可靠性、连接性等方面有显著的区别。
总之他们两个就是个协议,协议也就是数据结构,是数据传输的方式。看不太懂?我们先讲讲他们两个的区别,在文末我们会举个生动形象的例子。
TCP和UDP的主要区别
1. 连接性
- TCP面向连接:
- 类似于打电话需要先拨号建立连接,TCP在数据传输前要通过三次握手(Three-way Handshake)建立连接。
- 连接建立后,进行数据传输,最后通过四次挥手(Four-way Handshake)断开连接。
- UDP无连接:
- 类似于发送信件,不需要先建立连接,数据包可以直接发送。
- 这种无连接的特性使得UDP的延迟较低,适合实时应用。
2. 可靠性
-
TCP提供可靠服务:
- 通过序列号和确认机制保证数据无差错、不丢失、不重复、按序到达。
- 拥有重传机制(当丢包或出错时重新发送)和流量控制机制(确保接收方不被数据淹没)。
-
UDP尽最大努力交付:
- 不提供可靠性保障,数据包可能丢失、重复或乱序到达。
- 适合对实时性要求高的应用,如VoIP、视频会议等。
3. 数据传输方式
-
TCP面向字节流:
- 数据被看成一个连续的字节流,没有明确的边界。
- 数据以流的形式发送,接收方需要按顺序组装。
-
UDP面向报文:
- 数据作为独立的报文进行传输,每个报文有明确的边界。
- 每个报文独立传输,接收方接收到的是完整的报文。
4. 拥塞控制
- TCP具有拥塞控制:
- 通过慢启动、拥塞避免、快速重传和快速恢复等机制,动态调整发送速率,防止网络拥塞。
- UDP没有拥塞控制:
- 没有内建的拥塞控制机制,发送速率不受网络状况的影响。
- 对实时应用很有用,但可能导致网络拥塞。
5. 通信模式
-
TCP点到点通信:
- 每条TCP连接只能在两个端点之间进行,确保可靠的双向通信。
-
UDP支持多种通信模式:
- 支持一对一、一对多、多对一和多对多的通信模式,灵活性更高。
- 适合广播和多播场景,如视频会议、多点传输等。
6. 首部开销
-
TCP首部开销大:
- TCP首部至少20字节,包含序列号、确认号、窗口大小等信息。
- 提供丰富的控制信息,确保可靠性和流量控制。
-
UDP首部开销小:
- UDP首部只有8字节,包含源端口、目的端口、长度和校验和。
- 更轻量,适合对首部开销敏感的应用。
7. 逻辑通信信道
-
TCP提供全双工的可靠信道:
- 在同一连接中,双向数据传输都可以同时进行,保证可靠性。
-
UDP是不可靠信道:
- 数据包可能丢失、重复或乱序,不保证可靠性。
适用场景
-
TCP适用于:
- 需要可靠传输的应用,如网页浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP/IMAP)。
-
UDP适用于:
- 对实时性要求高、不需要可靠传输的应用,如视频流(IPTV)、语音通话(VoIP)、在线游戏、DNS查询。
| 特性 | TCP | UDP |
| 连接性 | 面向连接(需要连接) | 无连接(不需要建立连接) |
| 可靠性 | 可靠(无差错、不丢失、不重复、按序到达) | 尽最大努力交付(不保证可靠交付) |
| 数据传输方式 | 面向字节流 | 面向报文 |
| 拥塞控制 | 具有拥塞控制 | 无拥塞控制 |
| 通信模式 | 仅支持点到点 | 支持一对一、一对多、多对一、多对多 |
| 首部开销 | 20字节或更多,开销较大 | 8字节,开销较小 |
| 逻辑通信信道 | 全双工的可靠信道 | 不可靠信道 |
下面我举个生动点的例子来帮助理解:
TCP:打电话
情景:假设你要和一个朋友进行长时间的电话聊天。
-
建立连接(三次握手):
- 你拨打朋友的电话号码(发送SYN)。
- 朋友接听电话并回应:“喂?”(发送SYN-ACK)。
- 你确认接听并说:“你好,是我。”(发送ACK)。
- 现在,电话连接已经建立,你们可以开始交流。
-
可靠传输:
- 在通话过程中,你们每说一句话都会得到对方的确认(对方听到并回应)。
- 如果某一句话没有听清楚,你们会要求对方重复(重传机制)。
- 整个对话是按序进行的,你不会先听到结尾,再听到开头。
-
连接断开(四次挥手):
- 当你们的对话结束时,你会说:“再见”(发送FIN)。
- 朋友回应:“再见”(发送FIN-ACK)。
- 你确认收到并挂断电话(发送ACK)。
- 朋友也挂断电话,连接关闭。
特点:
- 建立连接(打电话前需要拨号)。
- 可靠传输(每一句话都能被确认)。
- 按序传输(对话有序进行)。
- 连接关闭(挂电话)。
UDP:寄信件
情景:假设你要给一个朋友发送几封信,每封信是独立的,内容没有特定顺序。
-
无连接:
- 你直接写信,把信投入邮筒,不需要提前通知朋友(不需要建立连接)。
- 朋友会在某个时间收到信件,直接打开阅读。
-
尽最大努力交付:
- 信件在邮寄过程中可能会丢失,朋友可能收不到某封信(不保证可靠传输)。
- 朋友可能会在不同时间收到不同的信件,顺序也可能不一致(不保证按序到达)。
- 如果某封信丢失了,你不会自动得知(没有确认机制)。
-
面向报文:
- 每封信都是一个独立的整体,有完整的内容和明确的边界。
特点:
- 无需建立连接(直接寄信)。
- 尽最大努力交付(信件可能丢失)。
- 独立的报文(每封信独立)。
- 不保证按序到达(信件到达顺序不确定)
具体应用场景
- TCP:想象你在使用网上银行服务,需要确保每一笔交易都可靠、完整地传输和处理。
- UDP:想象你在观看一个直播视频,即使有少量的数据包丢失,也不会影响整体体验,你希望视频流畅,不想因为重传导致延迟。
我写到这,已经大致理解了,总而言之,言而总之,说的就一件事:TCP可靠,UDP不太可靠,但是TCP比较慢,UDP比较快。
相关文章:
TCP/UDP的区别
首先来介绍一下什么是TCP和UDP TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议套件中两个重要的传输层协议。它们在数据传输的方式、可靠性、连接性等方面有显著的区别。 总之他们两个就是个协议,协议也就是数…...
JavaWeb1 Json+BOM+DOM+事件监听
JS对象-Json //Json 字符串转JS对象 var jsObject Json.parse(userStr); //JS对象转JSON字符串 var jsonStr JSON.stringify(jsObject);JS对象-BOM BOM是浏览器对象模型,允许JS与浏览器对话 它包括5个对象:window、document、navigator、screen、hi…...
DSP6657 GPIO中断学习(只支持GPIO0-15)
1 简介 使用创龙板卡的KEY2按键通过中断的方式控制LED3的亮灭 2 中断学习 在C665x设备上,CPU中断是通过C66x CorePac中断控制器进行配置的。该中断控制器允许最多128个系统事件被编程到任意12个CPU可屏蔽中断输入(CPUINT4至CPUINT15)、CPU…...
vue数字翻盘,翻转效果
数字翻转的效果 实现数字翻转的效果上面为出来的样子 下面为代码,使用的时候直接引入,还有就是把图片的路径自己换成自己或者先用颜色替代,传入num和numlength即可 <template><div v-for"(item, index) in processedNums&quo…...
【简单讲解TalkingData的数据统计】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
JMeter的基本使用
JMeter的基本使用三步骤:1.添加线程、2.添加请求、3.添加查询结果的内容 如果需要添加token请求头来验证,则需要再加上一步骤:添加请求头 1.线程 添加线程的方式 主要修改者三个属性值 Number of Threads:并发线程数 Ramp-up…...
Oracle和Random Oracle
Oracle和Random Oracle 在计算机理论里面经常可以看到oracle,这个oracle可以是一个程序 一片代码 一个算法 一个机器 也可以是一个函数 甚至是一个关系。但我们只能知道这个oracle能做什么,不清楚他是怎么做的。所以经常讲其称为黑箱。推广一点…...
word 无法自动检测拼写
word 有时候不能分辨是哪种语言,比如把英语错认为法语 。 例如:Interlaayer spacace,发现误认为是法语。 1、选中Interlaayer spacace 2、点击语言下拉按钮 选择设置校对语言 发现校对语言为法语 3、手动修改校对语言为英语,并点击确认。 4、发现现…...
docker和docker-compose的安装
docker的安装 1.安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.设置开机自启动 systemctl start docker #启动docker systemctl enable docker3.配置阿里云镜像 不配置镜像的话,进行 docker pull 等操作会比较慢。进入阿里云&…...
python的一种集成开发工具:PyCharm开发工具
一. 简介 本文简单了解两种 python语言所使用的 集成开发环境: PyCharm、vscode。 python语言学习中,可以任意选中这两个集成开发环境的一种就可以。本文先来简单学习 PyCharm开发工具安装与使用。 二. python的一种集成开发工具:PyChar…...
【匹配线段问题】
问题: 如下图所示。图中有两行正整数,每行中有若干个正整数。如果第一行的某个数r与第二行的某个数相同,这样就可以在这两个正整数之间划一条线,并称之为r-匹配线段。下图中存在3-匹配线段和2-匹配线段。 请编写完整程序…...
vue中$bus.$emit和$bus.$on的用法温故
$bus. $emit、 $bus. $on 用于非父子组件之间通信 1、在main.js中注册 Vue.prototype.$bus new Vue();new Vue({render: h > h(App),router,store }).$mount(#app)2、在需要发送信息的组件中,发送事件 this.$bus.$emit("method",params);…...
【JavaScript脚本宇宙】优化你的React项目:探索表单库的世界
React表单库解析:特性,使用方法和使用场景 前言 在现代的web开发中,表单是Web应用程序的核心组成部分之一。为了助力开发者更快捷、高效地处理表单状态和验证等问题,本文将介绍六种不同的React表单库,包括它们的特性…...
kvm虚拟化
虚拟化是一种资源管理技术,是将计算机的各种资源,如服务器,网络,内存及存储等,以抽象,转换后呈现出来,打破物理设备结构见的不可切割的障碍,使用户可以比原来的架构更好的方式来应用…...
算法训练营第五十天 | LeetCode 198 打家劫舍、LeetCode 213 打家劫舍II、LeetCode 337 打家劫舍III
LeetCode 198 打家劫舍 代码如下: class Solution { public:int rob(vector<int>& nums) {vector<int> dp(nums.size() 1, 0);dp[1] nums[0];for (int i 2; i < nums.size(); i) {dp[i] max(dp[i - 1] ,dp[i - 2] nums[i - 1]);}return dp…...
linux学习:进程通信 管道
目录 例子1 父进程向子进程发送一条消息,子进程读取这条消息 例子2 mkfifo 函数创建一个命名管道 例子3 mkfifo 函数创建一个命名管道处理可能出现的错误 例子4 管道文件是否已存在 例子5 除了“文件已存在”进行处理 例子6 创建一个命名管道&…...
重大变化,2024软考!
根据官方发布的2024年度计算机技术与软件专业技术资格(水平)考试安排,2024年软考上、下半年开考科目有着巨大变化,我为大家整理了相关信息,大家可以看看! 🎯2024年上半年:5月25日&am…...
DRIVEN|15分的CNN+LightGBM怎么做特征分类,适用于转录组
说在前面 今天分享一篇做深度学习模型的文章,这是一篇软硬结合的研究,排除转换实体产品,我们做生信基础研究的可以学习模仿这个算法,适用且不局限于临床资料,转录组数据,GWAS数据。 今天给大家分享的一篇文…...
react 怎样配置ant design Pro 路由?
Ant Design Pro 是基于 umi 和 dva 的框架,umi 已经预置了路由功能,只需要在 config/router.config.js 中添加路由信息即可。 例如,假设你需要为 HelloWorld 组件创建一个路由,你可以将以下代码添加到 config/router.config.js 中…...
DBSCAN 算法【python,机器学习,算法】
DBSCAN 即 Density of Based Spatial Clustering of Applications with Noise,带噪声的基于空间密度聚类算法。 算法步骤: 初始化: 首先,为每个数据点分配一个初始聚类标签,这里设为0,表示该点尚未被分配…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
