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

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的区别
特性TCPUDP
连接性面向连接(需要连接)无连接(不需要建立连接)
可靠性可靠(无差错、不丢失、不重复、按序到达)尽最大努力交付(不保证可靠交付)
数据传输方式面向字节流面向报文
拥塞控制具有拥塞控制无拥塞控制
通信模式仅支持点到点支持一对一、一对多、多对一、多对多
首部开销20字节或更多,开销较大8字节,开销较小
逻辑通信信道全双工的可靠信道不可靠信道

 

下面我举个生动点的例子来帮助理解:

TCP:打电话

情景:假设你要和一个朋友进行长时间的电话聊天。

  1. 建立连接(三次握手):

    • 你拨打朋友的电话号码(发送SYN)。
    • 朋友接听电话并回应:“喂?”(发送SYN-ACK)。
    • 你确认接听并说:“你好,是我。”(发送ACK)。
    • 现在,电话连接已经建立,你们可以开始交流。
  2. 可靠传输

    • 在通话过程中,你们每说一句话都会得到对方的确认(对方听到并回应)。
    • 如果某一句话没有听清楚,你们会要求对方重复(重传机制)。
    • 整个对话是按序进行的,你不会先听到结尾,再听到开头。
  3. 连接断开(四次挥手):

    • 当你们的对话结束时,你会说:“再见”(发送FIN)。
    • 朋友回应:“再见”(发送FIN-ACK)。
    • 你确认收到并挂断电话(发送ACK)。
    • 朋友也挂断电话,连接关闭。

特点

  • 建立连接(打电话前需要拨号)。
  • 可靠传输(每一句话都能被确认)。
  • 按序传输(对话有序进行)。
  • 连接关闭(挂电话)。
UDP:寄信件

情景:假设你要给一个朋友发送几封信,每封信是独立的,内容没有特定顺序。

  1. 无连接

    • 你直接写信,把信投入邮筒,不需要提前通知朋友(不需要建立连接)。
    • 朋友会在某个时间收到信件,直接打开阅读。
  2. 尽最大努力交付

    • 信件在邮寄过程中可能会丢失,朋友可能收不到某封信(不保证可靠传输)。
    • 朋友可能会在不同时间收到不同的信件,顺序也可能不一致(不保证按序到达)。
    • 如果某封信丢失了,你不会自动得知(没有确认机制)。
  3. 面向报文

    • 每封信都是一个独立的整体,有完整的内容和明确的边界。

特点

  • 无需建立连接(直接寄信)。
  • 尽最大努力交付(信件可能丢失)。
  • 独立的报文(每封信独立)。
  • 不保证按序到达(信件到达顺序不确定)

具体应用场景

  • 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数字翻盘,翻转效果

数字翻转的效果 实现数字翻转的效果上面为出来的样子 下面为代码&#xff0c;使用的时候直接引入&#xff0c;还有就是把图片的路径自己换成自己或者先用颜色替代&#xff0c;传入num和numlength即可 <template><div v-for"(item, index) in processedNums&quo…...

【简单讲解TalkingData的数据统计】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

JMeter的基本使用

JMeter的基本使用三步骤&#xff1a;1.添加线程、2.添加请求、3.添加查询结果的内容 如果需要添加token请求头来验证&#xff0c;则需要再加上一步骤&#xff1a;添加请求头 1.线程 添加线程的方式 主要修改者三个属性值 Number of Threads&#xff1a;并发线程数 Ramp-up…...

Oracle和Random Oracle

Oracle和Random Oracle 在计算机理论里面经常可以看到oracle&#xff0c;这个oracle可以是一个程序 一片代码 一个算法 一个机器 也可以是一个函数 甚至是一个关系。但我们只能知道这个oracle能做什么&#xff0c;不清楚他是怎么做的。所以经常讲其称为黑箱。推广一点&#xf…...

word 无法自动检测拼写

word 有时候不能分辨是哪种语言,比如把英语错认为法语 。 例如&#xff1a;Interlaayer spacace,发现误认为是法语。 1、选中Interlaayer spacace 2、点击语言下拉按钮 选择设置校对语言 发现校对语言为法语 3、手动修改校对语言为英语&#xff0c;并点击确认。 4、发现现…...

docker和docker-compose的安装

docker的安装 1.安装 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun2.设置开机自启动 systemctl start docker #启动docker systemctl enable docker3.配置阿里云镜像 不配置镜像的话&#xff0c;进行 docker pull 等操作会比较慢。进入阿里云&…...

python的一种集成开发工具:PyCharm开发工具

一. 简介 本文简单了解两种 python语言所使用的 集成开发环境&#xff1a; PyCharm、vscode。 python语言学习中&#xff0c;可以任意选中这两个集成开发环境的一种就可以。本文先来简单学习 PyCharm开发工具安装与使用。 二. python的一种集成开发工具&#xff1a;PyChar…...

【匹配线段问题】

问题&#xff1a; 如下图所示。图中有两行正整数&#xff0c;每行中有若干个正整数。如果第一行的某个数r与第二行的某个数相同&#xff0c;这样就可以在这两个正整数之间划一条线&#xff0c;并称之为r-匹配线段。下图中存在3-匹配线段和2-匹配线段。 请编写完整程序&#xf…...

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、在需要发送信息的组件中&#xff0c;发送事件 this.$bus.$emit("method",params)&#xff1b…...

【JavaScript脚本宇宙】优化你的React项目:探索表单库的世界

React表单库解析&#xff1a;特性&#xff0c;使用方法和使用场景 前言 在现代的web开发中&#xff0c;表单是Web应用程序的核心组成部分之一。为了助力开发者更快捷、高效地处理表单状态和验证等问题&#xff0c;本文将介绍六种不同的React表单库&#xff0c;包括它们的特性…...

kvm虚拟化

虚拟化是一种资源管理技术&#xff0c;是将计算机的各种资源&#xff0c;如服务器&#xff0c;网络&#xff0c;内存及存储等&#xff0c;以抽象&#xff0c;转换后呈现出来&#xff0c;打破物理设备结构见的不可切割的障碍&#xff0c;使用户可以比原来的架构更好的方式来应用…...

算法训练营第五十天 | LeetCode 198 打家劫舍、LeetCode 213 打家劫舍II、LeetCode 337 打家劫舍III

LeetCode 198 打家劫舍 代码如下&#xff1a; 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 父进程向子进程发送一条消息&#xff0c;子进程读取这条消息 例子2 mkfifo 函数创建一个命名管道 例子3 mkfifo 函数创建一个命名管道处理可能出现的错误 例子4 管道文件是否已存在 例子5 除了“文件已存在”进行处理 例子6 创建一个命名管道&…...

重大变化,2024软考!

根据官方发布的2024年度计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试安排&#xff0c;2024年软考上、下半年开考科目有着巨大变化&#xff0c;我为大家整理了相关信息&#xff0c;大家可以看看&#xff01; &#x1f3af;2024年上半年&#xff1a;5月25日&am…...

DRIVEN|15分的CNN+LightGBM怎么做特征分类,适用于转录组

说在前面 今天分享一篇做深度学习模型的文章&#xff0c;这是一篇软硬结合的研究&#xff0c;排除转换实体产品&#xff0c;我们做生信基础研究的可以学习模仿这个算法&#xff0c;适用且不局限于临床资料&#xff0c;转录组数据&#xff0c;GWAS数据。 今天给大家分享的一篇文…...

react 怎样配置ant design Pro 路由?

Ant Design Pro 是基于 umi 和 dva 的框架&#xff0c;umi 已经预置了路由功能&#xff0c;只需要在 config/router.config.js 中添加路由信息即可。 例如&#xff0c;假设你需要为 HelloWorld 组件创建一个路由&#xff0c;你可以将以下代码添加到 config/router.config.js 中…...

DBSCAN 算法【python,机器学习,算法】

DBSCAN 即 Density of Based Spatial Clustering of Applications with Noise&#xff0c;带噪声的基于空间密度聚类算法。 算法步骤&#xff1a; 初始化&#xff1a; 首先&#xff0c;为每个数据点分配一个初始聚类标签&#xff0c;这里设为0&#xff0c;表示该点尚未被分配…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...