UDP协议和TCP协议

embedded/2024/10/20 14:36:57/

UDP协议:

        是一种无连接的、简单的传输层通信协议,它在IP协议(网络层)之上提供服务。

特点:

  1. 无连接:在数据传输前,发送方和接收方之间不需要建立连接,可以直接发送数据。

  2. 简单:UDP协议头只有8个字节,比TCP协议头简单,因此开销较小。

  3. 不保证可靠性:UDP不提供数据传输的可靠性保证,数据包可能会丢失、重复或乱序到达。

  4. 不进行拥塞控制:UDP不进行拥塞控制,即使网络条件不佳,也不会降低发送速率。

  5. 支持多播和广播:UDP支持发送数据到多个目的地,适用于多播和广播场景。

  6. 适用场景:由于UDP的简单性和低延迟,它适用于对实时性要求高的应用,如视频会议、在线游戏、实时视频流等。

  7. 端口号:UDP使用端口号来区分不同的服务或应用程序,每个UDP数据包都包含源端口和目的端口。

  8. 校验和:UDP提供可选的校验和功能,用于检测数据在传输过程中是否出现错误,但是否使用校验和由应用程序决定。

由于UDP不保证数据的可靠传输,因此在需要可靠传输的应用中,通常需要在应用层实现额外的机制来确保数据的完整性和顺序。例如,可以通过应用层的确认和重传机制来实现可靠性。 

TCP协议:

        是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP在IP协议(网络层)之上提供服务。

特点:

  1. 面向连接:在数据传输前,TCP需要在发送方和接收方之间建立一个连接,这个过程称为三次握手。

  2. 可靠性:TCP提供数据传输的可靠性保证,确保数据正确、完整地从源传输到目的地。

  3. 有序传输:TCP保证数据包按照发送顺序到达接收方。

  4. 拥塞控制:TCP通过滑动窗口机制和拥塞避免算法来控制数据的发送速率,以避免网络拥塞。

  5. 流量控制:TCP使用窗口大小来控制发送方的发送速率,以匹配接收方的处理能力。

  6. 数据校验:TCP对每个数据包进行校验和计算,以检测数据在传输过程中是否出现错误。

  7. 支持全双工通信:TCP允许数据在两个方向上同时传输,即全双工通信。

  8. 适用场景:由于TCP提供了可靠的数据传输,它适用于需要数据完整性和顺序的应用,如Web浏览、文件传输、电子邮件等。

  9. 端口号:TCP使用端口号来区分不同的服务或应用程序,每个TCP连接都包含一对端口号(源端口和目的端口)。

  10. 超时重传:如果TCP数据包在传输过程中丢失,TCP会进行超时重传。

  11. 数据分段:TCP将数据分割成较小的段进行传输,每个段都包含TCP头部和数据负载。

  12. 端到端通信:TCP提供端到端的通信,即数据直接从发送方的应用程序传输到接收方的应用程序。

  13. 状态管理:TCP维护一个复杂的状态机,用于管理连接的建立、数据传输和连接的终止。

由于TCP的这些特性,它通常用于那些对数据传输可靠性要求较高的应用场景。然而,TCP的这些特性也使得它的开销比UDP大,因此在对实时性要求高的应用中,UDP可能是更合适的选择。

UDP协议和TCP协议的区别:

  1. 连接性

    • TCP:面向连接的协议,数据传输前需要建立连接,通过三次握手过程。
    • UDP:无连接的协议,数据传输前不需要建立连接,直接发送数据。
  2. 可靠性

    • TCP:提供可靠的数据传输服务,确保数据包正确、完整地到达目的地。
    • UDP:不保证数据传输的可靠性,数据包可能会丢失、重复或乱序到达。
  3. 有序性

    • TCP:保证数据包按发送顺序到达。
    • UDP:不保证数据包的顺序,接收方可能需要自行处理乱序问题。
  4. 拥塞控制

    • TCP:具有拥塞控制机制,通过调整发送速率来避免网络拥塞。
    • UDP:不进行拥塞控制,发送速率由发送方决定。
  5. 流量控制

    • TCP:通过窗口大小机制进行流量控制,以匹配接收方的处理能力。
    • UDP:不进行流量控制。
  6. 数据校验

    • TCP:对每个数据包进行校验和计算,以检测数据在传输过程中的错误。
    • UDP:提供可选的校验和功能,但是否使用由应用程序决定。
  7. 数据传输方式

    • TCP:面向字节流的协议,数据被分割成多个段进行传输。
    • UDP:面向数据报的协议,每个数据报独立传输。
  8. 效率

    • TCP:由于需要建立连接、维护连接状态、进行错误检测和重传等,开销较大,效率相对较低。
    • UDP:协议头简单,开销小,效率相对较高。
  9. 适用场景

    • TCP:适用于需要可靠传输的应用,如Web浏览、文件传输、电子邮件等。
    • UDP:适用于对实时性要求高的应用,如视频会议、在线游戏、实时视频流等。
  10. 错误处理

    • TCP:如果数据包丢失,TCP会进行超时重传。
    • UDP:如果数据包丢失,通常由应用层处理,UDP本身不进行重传。
  11. 端口号

    • TCP 和 UDP:都使用端口号来区分不同的服务或应用程序。
  12. 状态管理

    • TCP:维护复杂的状态机,管理连接的建立、数据传输和连接的终止。
    • UDP:没有状态管理,每个数据报独立处理。

总的来说,TCP提供了一个可靠的、面向连接的通信服务,而UDP提供了一个简单、快速但不可靠的通信服务。选择哪种协议取决于应用程序的具体需求。

TCP协议的三次握手和四次挥手:

        TCP(传输控制协议)使用三次握手来建立一个连接,以及四次挥手来终止一个连接。这些过程确保了数据的可靠传输和连接的正确释放。

三次握手(建立连接)

  1. SYN(同步)

    • 客户端发送一个带有SYN(同步序列编号)标志位的TCP段到服务器,以初始化一个连接。这个SYN段还包含客户端的初始序列号(ISN),用于标识从客户端到服务器的数据流。
  2. SYN-ACK(同步-确认)

    • 服务器收到SYN段后,如果同意建立连接,则会发送一个SYN-ACK段作为响应。这个段包含服务器的初始序列号,并且对客户端的SYN段进行确认(ACK)。
  3. ACK(确认)

    • 客户端收到服务器的SYN-ACK段后,会发送一个ACK段作为最后的确认。这个ACK段对服务器的SYN段进行确认。

完成这三次握手后,TCP连接就成功建立了,数据可以开始在客户端和服务器之间传输。

四次挥手(终止连接)

  1. FIN(结束)

    • 当客户端决定关闭连接时,它发送一个带有FIN标志位的TCP段到服务器,表示客户端已经没有数据要发送了。
  2. ACK(确认)

    • 服务器收到FIN段后,发送一个ACK段作为响应,确认收到了客户端的FIN段。
  3. FIN(结束)

    • 服务器在发送完所有剩余数据后,也会发送一个带有FIN标志位的TCP段到客户端,表示服务器也没有数据要发送了。
  4. ACK(确认)

    • 客户端收到服务器的FIN段后,发送一个ACK段作为最后的确认。

完成这四次挥手后,TCP连接就被正确地终止了。需要注意的是,TCP连接是全双工的,因此每个方向的关闭都需要单独的FIN和ACK段。

为什么需要三次握手和四次挥手?

  • 三次握手

    • 确保双方的发送和接收能力都是正常的。
    • 防止失效的连接请求突然又传送到了服务器端,从而产生错误。
  • 四次挥手

    • 确保双方都能完全关闭连接,并且释放所有资源。
    • 因为TCP是全双工的,所以每个方向都需要单独关闭。

这些过程确保了TCP连接的可靠性和数据传输的完整性。


http://www.ppmy.cn/embedded/129012.html

相关文章

读数据工程之道:设计和构建健壮的数据系统14源系统

1. 源系统中的数据生成 1.1. 数据工程师的工作是从源系统获取数据,对其进行处理,使其有助于为下游用例提供服务 1.2. 数据工程师的角色将在很大程度上转向理解数据源和目的地之间的相互作用 1.3. 数据工程的最基本的数据管道任务——将数据从A移动到B…

Threejs 实现3D 地图(01)创建基本场景

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" <script setup> import { onMounted,ref } from vue import * as THREE from three import * as d3 from "d3"; //莫开托坐标 矫正地图…

Mybatis-plus

Springboot3Mybatis3.5 基本框架环境依赖导入配置文件实体类业务类结构 基本功能——提供的mapper接口及实现插入删除——返回受影响行数修改数据查询方法自定义mapper&#xff08;和mybatis一样&#xff09; 相关功能——提供的Service方法Service层搭建相关方法添加记录插入或…

SpringCloud第三章:客户端负载均衡与服务调用

正常本章节应该讲解Netflix Ribbon&#xff0c;由于从Netflix Eureka Client 3.0版本开始内置Ribbon实现机制&#xff0c;不需要单独依赖Ribbon&#xff0c;如果引入Ribbon会报错 java.lang.IllegalStateException: No instances available for XXXXXX&#xff0c;并且想要修改…

1/2∥w∥^2 :这是w 的二次项,偏导数为 w

此公式出现在线性可分支持向量机基于拉格朗日函数L(w,b,α)对w求导的公式中。为什么 1 2 ∥ w ∥ 2 \frac{1}{2} \|\mathbf{w}\|^2 21​∥w∥2 对 w \mathbf{w} w 的偏导数是 w \mathbf{w} w。这个问题涉及到向量的微分运算。 1. 复习&#xff1a;向量的范数 我们首先来看…

DBdoctor推出无Agent轻量级纳管解决方案

目录 背景 DBdoctor推出无Agent轻量级纳管解决方案 方案优势&#xff1a; 实例纳管方式&#xff1a; 无Agent纳管可体验哪些功能&#xff1f; 1.全量SQL审核功能 2.实例巡检功能 3.性能洞察功能 4.基础监控功能 总结 背景 在数字化时代&#xff0c;数据库作为信息系…

pdf文件怎样一张纸打印四页

在日常工作和学习中&#xff0c;我们经常会遇到需要将PDF文件中的多页内容合并打印到一张纸上的情况&#xff0c;比如将四页内容打印到一张A4纸上&#xff0c;以节省纸张和成本。同时&#xff0c;在打开pdf文件的方式&#xff0c;一般都是通过电脑浏览器打印&#xff0c;因此对…

学习鸿蒙Next 之路 http

关于学习鸿蒙开发之http的请求 首先还是老样子先上代码&#xff0c;然后我再说出我的看法 先创建一个请求的函数 function RequestHttp&#xff08;url&#xff1a;string&#xff0c;data&#xff1f;:Object|string&#xff09;{ } 先展示get请求&#xff0c;之前在unity的开…