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

UDP协议和TCP协议

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连接的可靠性和数据传输的完整性。

相关文章:

UDP协议和TCP协议

UDP协议: 是一种无连接的、简单的传输层通信协议,它在IP协议(网络层)之上提供服务。 特点: 无连接:在数据传输前,发送方和接收方之间不需要建立连接,可以直接发送数据。 简单&…...

算法题总结(十三)—— 动态规划(上)

动态规划 动态规划理论基础 什么是动态规划 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff…...

Leetcode - 周赛419

目录 一,3318. 计算子数组的 x-sum I 二,3319. 第 K 大的完美二叉子树的大小 三,3320. 统计能获胜的出招序列数 四,3321. 计算子数组的 x-sum II 一,3318. 计算子数组的 x-sum I 本题数据范围较小,可以…...

C# 的两个list怎么判断是否存在交集

要判断两个 List<string>&#xff08;dateList 和 LocalDate&#xff09;是否有交集&#xff0c;可以使用 LINQ&#xff08;Language Integrated Query&#xff09;来简化这个过程。以下三种方法来判断两个列表之间是否有交集。 方法 1: 使用 LINQ 的 Any 方法 using S…...

【Python】基础语法

1. 变量 1.1. 变量的创建 变量的定义规则&#xff1a; 变量只能由数字&#xff0c;字母&#xff0c;下划线构成&#xff0c;不能包含特殊符号数字不能作为变量开头变量名不能和 Python 的关键字重复Python 的变量是区分大小写的 除了上述的硬性规则外&#xff0c;还建议变量…...

scala 类的继承

继承的定义 idea实例 语法 重写 重写&#xff1a;在子类中重新定义父类的同名方法 idea实例 多态 多态&#xff1a;传入的对象不同&#xff0c;调用的方法的效果就不同&#xff01; 原理&#xff1a;参数是父类类型 idea实例 构造器...

穷举vs暴搜vs深搜vs回溯vs剪枝(一)

文章目录 全排列子集找出所有子集的异或总和再求和全排列 II电话号码的字母组合 全排列 题目&#xff1a;全排列 思路 通过深度优先搜索的方式&#xff0c;不断枚举每个数在当前位置的可能性&#xff0c;然后回溯到上一个状态&#xff0c;直到枚举完所有可能性得到正确的结果 r…...

枚举的应用

1.枚举的语法特点 枚举是jdk1.5提供的一个特性 枚举是一个特殊的类&#xff0c;这个类的对象的数量是有限的。在定义枚举类的同时就已经确定了类对象及类对象的数量。 枚举使用enum关键字定义 class A{} enum A{} 在枚举类中的第一行&#xff0c;就需要提供枚举类的对象&a…...

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

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

基于SpringBoot+Vue的厨艺交流系统的设计与实现(源码+定制开发)厨艺知识与美食交流系统开发、在线厨艺分享与交流平台开发、智能厨艺交流与分享系统开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

STMicroelectronics 意法半导体芯片选型表

意法半导体作为全球知名的半导体厂商&#xff0c;其产品广泛应用于各个领域&#xff0c;从消费电子到工业控制&#xff0c;从汽车电子到通信设备&#xff0c;都能看到意法半导体芯片的身影。在电子硬件设计领域&#xff0c;芯片的选型至关重要。亿配芯城&#xff08;ICgoodFind…...

TCP/IP 寻址

TCP/IP 寻址 概述 TCP/IP&#xff08;传输控制协议/互联网协议&#xff09;是一组用于数据网络的通信协议。它们定义了数据如何在网络上从一个设备传输到另一个设备。在TCP/IP网络中&#xff0c;每个设备都有一个唯一的地址&#xff0c;称为IP地址&#xff0c;用于标识网络上…...

深入探索 APKTool:Android 应用的反编译与重打包工具

文章目录 一、反编译 APK1.1 解压 APK1.2 DEX 文件转换1.3 资源解码 二、重新打包 APK2.1 资源重新编译2.2 smali 转换为 DEX2.3 打包 APK2.4 签名 APK 三、技术原理3.1 Smali/Baksmali3.1.1 DEX 文件格式3.1.2 Smali 语法3.1.2.1 指令3.1.2.2 寄存器3.1.2.3 操作码3.1.2.4 注释…...

软件测试与软件缺陷的基础知识

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

【JPCS独立出版,EI检索稳定】第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)

第三届能源互联网及电力系统国际学术会议&#xff08;ICEIPS 2024&#xff09; 2024 3rd International Conference on Energy Internet and Power Systems ICEIPS 2024已成功申请JPCS - Journal of Physics: Conference Series (ISSN:1742-6596) ICEIPS 2024独立出版&…...

ssm配置模式

新版 用Java类&#xff0c;全注解demo案例 1. AppConfig.java (Spring主配置类)package com.example.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.cont…...

[MySQL课后作业]人事管理系统的SQL实践

第一题 1.假设某商业集团中有若干公司&#xff0c;人事数据库中有3个基本表: 职工表:EMP(E#.ENAME,AGE, SEX, ECITY)。 其属性分别表示职工工号、姓名、年龄、性别和居住城市。 工作表:WORKS(E#,C#,SALARY)。其属性分别表示职工工号、所在公司的编号和工资。 公司表:COMP(C#,CA…...

【MySQL】增删改查-进阶(二)

目录 &#x1f334;新增 &#x1f384;查询 &#x1f6a9;聚合查询 &#x1f3c0;聚合函数 &#x1f3c0;group by子句 &#x1f3c0;HAVING &#x1f6a9;联合查询 &#x1f3c0;内连接 &#x1f3c0;外连接 &#x1f3c0;自连接 &#x1f3c0;子查询 &#x1f3c0…...

cefsharp79.1.360(Chromium 79.0.3945.130)支持H264视频播放-PDF预览 老版本回顾系列体验

一、关于此版本 版本:Cef 79.1.36/CefSharp 79.1.360/Chromium 79.0.3945.130/支持H264/支持PDF预览 支持PDF预览和H264推荐版本 63/79/84/88/100/111/125 运行环境需要 visual c++ 2015不支持xp/vista/2003/2008默认不支持h264(版权问题)支持打印预览 print preview已知问题…...

【Linux】main函数的参数列表从何而来?

Linux系统进程通过exec系列函数启动新程序时&#xff0c;argc整型 、 argv数组 和 环境变量表 environ 会作为 exec 系列函数的参数&#xff0c;显式传递给新程序的 main 函数。 main函数的参数列表 在C语言中&#xff0c;main函数的标准参数列表通常如下所示&#xff1a; in…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...