TCP和UDP的数据传输+区别

目录

一、数据传输过程

1.1 TCP字节流服务图

1.2 UDP数据报服务图

二、tcp与udp的区别

1.连接方式  

2.可靠性  

3.传输效率  

4.有序性  

5.流量控制和拥塞控制  

6.应用场景  

7.首部长度

三、tcp与udp能不能使用同一个端口号?

 四、同一个协议,TCP 和 TCP 能不能使用同一个端口号?


一、数据传输过程

1.1 TCP字节流服务图

发送端

应用层:应用层通过多次调用 `send()` 函数分别发送 “abcdef”、“12345”、“test” 这些数据。`send()` 函数用于将应用层数据传递给传输层。

传输层:TCP 协议将这些数据暂存于 TCP 发送缓冲区。TCP 为了提高传输效率,会根据自身机制(如窗口大小、拥塞控制等 )对发送缓冲区中的数据进行组合和封装。如图中所示,可能会把 “abcdef” 和 “123” 组合在一起封装成一个 TCP 报文段,“45test” 单独封装成一个 TCP 报文段。这种组合并非严格按应用层发送顺序和边界,而是根据 TCP 自身策略。

接收端

传输层:接收端的 TCP 协议从网络中接收 TCP 报文段,先存储在 TCP 接收缓冲区。

应用层:应用层通过 `recv()` 函数从 TCP 接收缓冲区读取数据。由于 TCP 发送时可能对数据进行了组合封装,接收端应用层调用 `recv()` 读取数据时,不一定能按发送端应用层的原始边界和顺序获取数据,可能会一次性读取多个发送端组合封装的数据,也可能分多次读取。

        总体而言,该图展示了 TCP 字节流服务中,数据在发送端和接收端的处理过程,突出 TCP 并不保证应用层数据的边界,而是以字节流形式进行传输和处理。  

呈现了 TCP 协议的数据传输流程。发送端应用层多次调用 send() 函数发送数据,数据先存于 TCP 发送缓冲区,传输层根据自身机制(如窗口、拥塞控制 )将缓冲区数据封装成 TCP 报文段发送;接收端传输层接收 TCP 报文段存于 TCP 接收缓冲区,应用层通过 recv() 函数读取数据。

1.2 UDP数据报服务图

发送端

应用层:通过 `sendto()` 函数来发起数据发送操作。`sendto()` 是 UDP 编程中用于发送数据报的函数,它可以指定目标地址(IP 地址和端口号 )以及要发送的数据内容。在应用层,可能会有多个不同的操作或请求需要通过 UDP 发送数据,所以会多次调用 `sendto()` 函数 。

传输层:将应用层传递过来的数据封装成 UDP 数据报。UDP 数据报由 UDP 报头和数据部分组成,报头包含源端口号、目的端口号、长度和校验和等信息,完成封装后的数据报会被发送到网络中。

接收端

传输层:从网络中接收 UDP 数据报,检查数据报的目的端口号等信息,将符合条件的数据报传递给应用层 。

应用层:使用 `recvfrom()` 函数接收从传输层传来的 UDP 数据报。`recvfrom()` 函数不仅能接收数据,还能获取发送方的地址信息(源 IP 地址和端口号 ) 。同样,在应用层可能会多次调用 `recvfrom()` 函数来处理不同时刻接收到的数据报。

        展示了 UDP 协议数据传输过程。发送端应用层通过 sendto() 函数将数据传递给传输层,传输层封装成 UDP 数据报进行发送;接收端传输层接收 UDP 数据报,应用层通过recvfrom() 函数接收数据。体现了 UDP 无连接、简单的传输特点,发送方直接发送,接收方直接接收,不涉及复杂连接建立与管理。

二、tcp与udp的区别

1.连接方式  

        TCP:面向连接的协议,在数据传输之前,需要先建立连接,通过三次握手来确保连接的可靠性,数据传输完成后,需要释放连接。

        UDP:无连接的协议,发送数据时不需要先建立连接,也不需要在数据传输完成后释放连接,简单地将数据报发送出去即可。

2.可靠性  

        TCP:提供可靠的传输服务。它通过序列号、确认应答、重传机制等保证数据的有序性和完整性,能够自动纠正传输过程中出现的错误。  

        UDP:不保证数据传输的可靠性。它只是尽最大努力将数据报发送到目的地,不进行错误检查和重传,可能会出现数据丢失、重复或乱序的情况。

3.传输效率  

        TCP:由于需要建立连接、进行可靠性检查和流量控制等,会引入一定的开销,传输效率相对较低。  

        UDP:没有连接建立和复杂的控制机制,头部开销小,传输效率高,适合对实时性要求高、允许一定数据丢失的应用。

4.有序性  

        TCP:能保证数据按照发送的顺序到达接收端,对数据进行排序和重组,确保应用层接收到的是有序的数据。  

        UDP:不保证数据的有序性,数据报可能会以不同的顺序到达接收端,应用层需要自己处理数据的顺序问题。

5.流量控制和拥塞控制  

        TCP:具有完善的流量控制和拥塞控制机制。通过滑动窗口协议进行流量控制,根据网络拥塞情况调整发送速率,避免网络拥塞。  

        UDP:没有内置的流量控制和拥塞控制机制,需要应用层自行实现相关功能,如果网络出现拥塞,可能导致数据丢失加剧。

6.应用场景  

        TCP:适用于对数据准确性和完整性要求高的场景,如文件传输、电子邮件、远程登录、网页浏览等。  

        UDP:适用于对实时性要求高、能容忍一定数据丢失的场景,如视频直播、音频通话、在线游戏、DNS查询等。

7.首部长度

        TCP:首部长度一般为20字节,当有选项时,首部长度会增加。  

        UDP:首部长度固定为8字节,包括源端口、目的端口、长度和校验和字段。

三、tcp与udp能不能使用同一个端口号?

        TCP和UDP可以使用相同的端口号,因为它们是独立的传输协议,每种协议有自己的端口空间。在通信过程中,端口号用于标识应用程序或服务,以便正确地将数据包传递到目标应用程序。因此,同一个端口号可以同时被TCP和UDP协议使用,只要它们不在同一个主机上相互冲突即可。这种情况在网络编程或应用程序开发中是很常见的。

 四、同一个协议,TCP 和 TCP 能不能使用同一个端口号?

        不可以,每个协议都有自己的一组预留端口号。TCP和UDP有各自独立的端口号范围,因此TCP和TCP不能使用相同的端口号。TCP的端口号范围是0到65535,UDP的端口号范围也是0到65535,但它们之间的端口号是相互独立的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm的校园旧书交易交换平台(源码+文档)

项目简介 校园旧书交易交换平台的主要使用者分为: 前台功能:用户进入系统可以对首页、书籍信息、校园公告、个人中心、后台管理等功能进行操作; 后台主要是管理员,管理员功能包括主页、个人中心、学生管理、发布人管理、书籍分类…

虚假安全补丁攻击WooCommerce管理员以劫持网站

一场大规模钓鱼攻击正针对WooCommerce用户,通过伪造安全警报诱使他们下载所谓的"关键补丁",实则为植入WordPress后门的恶意程序。 恶意插件植入 根据Patchstack研究人员发现,上当受骗的用户在下载更新时,实际上安装的…

《冰雪传奇点卡版》:第二大陆介绍!

一、第二大陆:高阶资源与实力验证的核心战场 1. 准入条件与地图分布 进入门槛: 基础要求:角色需达到四转(需消耗50万元宝完成转生任务),部分地图需额外满足神魔点数(如黑暗之森需神魔全2&#…

信创系统图形界面开发指南:技术选择与实践详解

信创系统图形界面开发指南:技术选择与实践详解 🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书&…

【人脸去遮挡前沿】三阶段级联引导学习如何突破真实场景遮挡难题?

一、现实痛点:当人脸被遮挡,AI “认脸” 有多难? 你是否遇到过这样的场景? 中考体育测试:2025 年天津泰达街中考考场要求考生 “脸部无遮挡” 才能通过人脸识别入场,戴口罩、帽子的学生需现场调整发型。智能门锁:奇景光电在 CES 2025 推出的 WiseEye 掌静脉模块,通过掌…

c++线程的创建

c 11 线程编程实战 目录 c 11 线程编程实战1,线程的创建1.1 传入无参函数1.2 传入有参函数1.3 传入类内部函数1.4 lambda表达式 1,线程的创建 1.1 传入无参函数 //传入函数,创建线程 void ThreadMain() {//获取线程IDstd::thread::id thi…

人工智能数学基础(六):数理统计

数理统计是人工智能中数据处理和分析的核心工具,它通过收集、分析数据来推断总体特征和规律。本文将系统介绍数理统计的基本概念和方法,并结合 Python 实例,帮助读者更好地理解和应用这些知识。资源绑定附上完整资源供读者参考学习&#xff0…

解决STM32待机模式无法下载程序问题的深度探讨

在现代嵌入式系统开发中,STM32系列微控制器因其高性能、低功耗和丰富的外设资源而广受欢迎。然而,开发者在使用STM32时可能会遇到一个问题:当微控制器进入待机模式后,无法通过调试接口(如SWD或JTAG)下载程序…

C#扩展方法与Lambda表达式基本用法

C# 扩展方法与 Lambda 表达式详解 一、扩展方法详解 1. 基本概念 ​​扩展方法​​允许为现有类型"添加"方法,而无需修改原始类型或创建派生类型。 ​​定义条件​​: 必须在静态类中定义方法本身必须是静态的第一个参数使用this修饰符指…

C#规避内存泄漏的编码方法

C#规避内存泄漏的编码方法 内存泄漏是C#开发中常见的问题,尽管.NET有垃圾回收机制(GC),但不当的编码实践仍可能导致内存无法被及时回收。以下是系统性的规避内存泄漏的方法: 一、理解内存泄漏的常见原因 ​​未释放的事件订阅​​​​静态…

React 后台管理系统

这是一个基于 React TypeScript Ant Design 开发的向明天系统前端项目。 git仓库地址 技术栈 React 19TypeScriptAnt Design 5.xRedux ToolkitReact RouterAxiosLess 环境要求 Node.js (推荐使用最新LTS版本)npm 或 yarn 安装步骤 克隆项目到本地 git clone [https://…

第九节:文件操作

理论知识 文件的基本概念:文件是存储数据的基本单位,在 Linux 系统中,一切皆文件。文件可以是文本文件、二进制文件、设备文件等。文件的创建:使用 touch 命令可以创建一个新的空文件。如果文件已经存在,则更新文件的…

2025-03 机器人等级考试四级理论真题 4级

1 2025年蛇年春晚,节目《秧BOT》机器人舞蹈表演节目点燃了全国观众的热情,请问参加节目表演的机器人是由哪家公司研发?( ) A.大疆 B.华为 C.优必选 D.宇树科技 【参考答…

k8s平台:手动部署Grafana

以下是一个可用于生产环境的 Kubernetes 部署 Grafana 的 YAML 文件。该配置包括 Deployment、Service、ConfigMap 和 PersistentVolumeClaim,确保 Grafana 的高可用性和数据持久化。 Grafana 生产部署 YAML 文件 ☆实操示例 cat grafana-deployment.yaml --- # …

农产品园区展示系统——仙盟创梦IDE开发

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>农业大数据平台</title><style>* {margi…

每日Bug:(2)共享内存

对于整个系统而言&#xff0c;主存与CPU的资源都是有限的&#xff0c;随着打开进程数量的增加&#xff0c;若是将所有进程运行所需的代码/数据/栈/共享库都存放在主存中&#xff0c;那么开启一部分进程就可以将主存占用完。 虚拟内存就是解决以上问题的方法&#xff0c;使用虚…

C语言Makefile编写与使用指南

Makefile 详细指南&#xff1a;编写与使用 Makefile 是 C/C 项目中常用的自动化构建工具&#xff0c;它定义了项目的编译规则和依赖关系。下面我将详细介绍 Makefile 的编写和使用方法。 一、Makefile 基础 1. 基本结构 一个典型的 Makefile 包含以下部分&#xff1a; mak…

Centos离线安装Docker(无坑版)

1、下载并上传docker离线安装包 官方地址&#xff1a;安装包下载 2、上传到离线安装的服务器解压 tar -zxvf docker-28.1.1.tgz#拷贝解压二进制文件到相关目录 cp docker/* /usr/bin/ 3、创建docker启动文件 cat << EOF > /usr/lib/systemd/system/docker.servic…

OceanBase数据库-学习笔记4-租户

租户 租户偏向于资源层面的逻辑概念&#xff0c;是在物理节点上划分的资源单元&#xff0c;可以指定其资源规格&#xff0c;包括 CPU、内存、日志盘空间、IOPS 等。 租户类似于传统数据库的数据库实例&#xff0c;租户通过资源池与资源关联&#xff0c;从而独占一定的资源配额…

UNIAPP项目记录

一、通过 vue-cli 创建 uni-app 项目 创建 vue3 项目 创建以 javascript 开发的工程&#xff08;如命令行创建失败&#xff0c;请直接访问 gitee 下载模板&#xff09; npx degit dcloudio/uni-preset-vue#vite my-vue3-project复制代码 npx degit dcloudio/uni-preset-vue#vit…