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

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,但它们之间的端口号是相互独立的。

相关文章:

  • Linux 部署以paddle Serving 的方式部署 PaddleOCR CPU版本
  • Decode
  • OpenAI 2025 4月最新动态综述
  • 【Unity】如何解决UI中的Button无法绑定带参数方法的问题
  • 《机器学习中的过拟合与模型复杂性:理解与应对策略》
  • 关于 MCP 的理论知识学习
  • HAproxy+keepalived+tomcat部署高可用负载均衡实践
  • buildroot 和 busybox 系统的优缺点
  • vue2中如何自定义指令
  • 最新DeepSeek-Prover-V2-671B模型 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)
  • C++继承(下)
  • 监听滚动事件
  • Ubuntu平台使用aarch64-Linux交叉编译opencv库并移植RK3588S边缘端
  • 新手小白如何查找科研论文?
  • Nginx匹配规则详细解析
  • 快充诱骗协议芯片的工作原理及应用场景
  • Python3(19)数据结构
  • [SystemVerilog] Enum
  • UDP/TCP协议知识及相关机制
  • 【使用小皮面板 + WordPress 搭建本地网站教程】
  • 李公明︱一周书记:数字文化的乌托邦精神与……算法时代的生存指南
  • 乌美签署矿产协议
  • 强制性国家标准《危险化学品企业安全生产标准化通用规范》发布
  • 江西德安回应“义门陈遗址建筑被没收”:将交由规范的义门陈相关社会组织管理
  • 石家庄:城市更新,生活向美
  • 准85后青海海北州副州长、州公安局局长李贤荣赴山东临沂挂职