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

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.xdnf.cn/news/3171.html

相关文章:

  • JavaScript的3D库有哪些?
  • 第六章 QT基础:9、Qt中数据库的操作
  • 自主采集高质量三维重建数据集指南:面向3DGS与NeRF的图像与视频拍摄技巧【2025最新版!!】
  • 『深夜_MySQL』详解数据库 探索数据库是如何存储的
  • 泰迪杯特等奖案例学习资料:基于多模态融合与边缘计算的智能温室环境调控系统
  • 负载均衡技术全景指南:架构、算法与发展趋势
  • 论文笔记(八十二)Transformers without Normalization
  • 高质量水火焰无损音效包
  • ​​Steam安装下载及新手注册
  • Best Video下载器——全能高清无水印视频下载工具
  • .NET Core 数据库ORM框架用法简述
  • 论文阅读 2024 arxiv Comprehensive Assessment of Jailbreak Attacks Against LLMs
  • HTML5好看的水果蔬菜在线商城网站源码系列模板8
  • 股指期货贴水对对冲的影响大吗?
  • centos升级glibc
  • k8s术语之Deployment
  • oceanbase设置密码
  • AI驱动视频批量智能混剪软件生产技术实践
  • 归并排序算法
  • 【单例模式】简介
  • 力扣-数组-189轮转数组
  • Kafka-可视化工具-Offset Explorer
  • Android Framework框架与启动过程初识一
  • 三个概念:DataBinding,Dependency Property 与DataTemplate
  • C#静态类与单例模式深度解析(七):从原理到工业级应用实践
  • iview 如何设置sider宽度
  • 论文阅读:2024 arxiv Jailbreaking Black Box Large Language Models in Twenty Queries
  • 17、商品管理:魔药商店运营——React 19 CRUD实现
  • 【Unity C#从零到精通】项目深化:构建核心游戏循环、UI与动态敌人系统
  • ASP.NET MVC后端控制器用模型 接收前端ajax数据为空