UDP协议和TCP协议
UDP协议:
是一种无连接的、简单的传输层通信协议,它在IP协议(网络层)之上提供服务。
特点:
-
无连接:在数据传输前,发送方和接收方之间不需要建立连接,可以直接发送数据。
-
简单:UDP协议头只有8个字节,比TCP协议头简单,因此开销较小。
-
不保证可靠性:UDP不提供数据传输的可靠性保证,数据包可能会丢失、重复或乱序到达。
-
不进行拥塞控制:UDP不进行拥塞控制,即使网络条件不佳,也不会降低发送速率。
-
支持多播和广播:UDP支持发送数据到多个目的地,适用于多播和广播场景。
-
适用场景:由于UDP的简单性和低延迟,它适用于对实时性要求高的应用,如视频会议、在线游戏、实时视频流等。
-
端口号:UDP使用端口号来区分不同的服务或应用程序,每个UDP数据包都包含源端口和目的端口。
-
校验和:UDP提供可选的校验和功能,用于检测数据在传输过程中是否出现错误,但是否使用校验和由应用程序决定。
由于UDP不保证数据的可靠传输,因此在需要可靠传输的应用中,通常需要在应用层实现额外的机制来确保数据的完整性和顺序。例如,可以通过应用层的确认和重传机制来实现可靠性。
TCP协议:
是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP在IP协议(网络层)之上提供服务。
特点:
-
面向连接:在数据传输前,TCP需要在发送方和接收方之间建立一个连接,这个过程称为三次握手。
-
可靠性:TCP提供数据传输的可靠性保证,确保数据正确、完整地从源传输到目的地。
-
有序传输:TCP保证数据包按照发送顺序到达接收方。
-
拥塞控制:TCP通过滑动窗口机制和拥塞避免算法来控制数据的发送速率,以避免网络拥塞。
-
流量控制:TCP使用窗口大小来控制发送方的发送速率,以匹配接收方的处理能力。
-
数据校验:TCP对每个数据包进行校验和计算,以检测数据在传输过程中是否出现错误。
-
支持全双工通信:TCP允许数据在两个方向上同时传输,即全双工通信。
-
适用场景:由于TCP提供了可靠的数据传输,它适用于需要数据完整性和顺序的应用,如Web浏览、文件传输、电子邮件等。
-
端口号:TCP使用端口号来区分不同的服务或应用程序,每个TCP连接都包含一对端口号(源端口和目的端口)。
-
超时重传:如果TCP数据包在传输过程中丢失,TCP会进行超时重传。
-
数据分段:TCP将数据分割成较小的段进行传输,每个段都包含TCP头部和数据负载。
-
端到端通信:TCP提供端到端的通信,即数据直接从发送方的应用程序传输到接收方的应用程序。
-
状态管理:TCP维护一个复杂的状态机,用于管理连接的建立、数据传输和连接的终止。
由于TCP的这些特性,它通常用于那些对数据传输可靠性要求较高的应用场景。然而,TCP的这些特性也使得它的开销比UDP大,因此在对实时性要求高的应用中,UDP可能是更合适的选择。
UDP协议和TCP协议的区别:
-
连接性:
- TCP:面向连接的协议,数据传输前需要建立连接,通过三次握手过程。
- UDP:无连接的协议,数据传输前不需要建立连接,直接发送数据。
-
可靠性:
- TCP:提供可靠的数据传输服务,确保数据包正确、完整地到达目的地。
- UDP:不保证数据传输的可靠性,数据包可能会丢失、重复或乱序到达。
-
有序性:
- TCP:保证数据包按发送顺序到达。
- UDP:不保证数据包的顺序,接收方可能需要自行处理乱序问题。
-
拥塞控制:
- TCP:具有拥塞控制机制,通过调整发送速率来避免网络拥塞。
- UDP:不进行拥塞控制,发送速率由发送方决定。
-
流量控制:
- TCP:通过窗口大小机制进行流量控制,以匹配接收方的处理能力。
- UDP:不进行流量控制。
-
数据校验:
- TCP:对每个数据包进行校验和计算,以检测数据在传输过程中的错误。
- UDP:提供可选的校验和功能,但是否使用由应用程序决定。
-
数据传输方式:
- TCP:面向字节流的协议,数据被分割成多个段进行传输。
- UDP:面向数据报的协议,每个数据报独立传输。
-
效率:
- TCP:由于需要建立连接、维护连接状态、进行错误检测和重传等,开销较大,效率相对较低。
- UDP:协议头简单,开销小,效率相对较高。
-
适用场景:
- TCP:适用于需要可靠传输的应用,如Web浏览、文件传输、电子邮件等。
- UDP:适用于对实时性要求高的应用,如视频会议、在线游戏、实时视频流等。
-
错误处理:
- TCP:如果数据包丢失,TCP会进行超时重传。
- UDP:如果数据包丢失,通常由应用层处理,UDP本身不进行重传。
-
端口号:
- TCP 和 UDP:都使用端口号来区分不同的服务或应用程序。
-
状态管理:
- TCP:维护复杂的状态机,管理连接的建立、数据传输和连接的终止。
- UDP:没有状态管理,每个数据报独立处理。
总的来说,TCP提供了一个可靠的、面向连接的通信服务,而UDP提供了一个简单、快速但不可靠的通信服务。选择哪种协议取决于应用程序的具体需求。
TCP协议的三次握手和四次挥手:
TCP(传输控制协议)使用三次握手来建立一个连接,以及四次挥手来终止一个连接。这些过程确保了数据的可靠传输和连接的正确释放。
三次握手(建立连接)
-
SYN(同步):
- 客户端发送一个带有SYN(同步序列编号)标志位的TCP段到服务器,以初始化一个连接。这个SYN段还包含客户端的初始序列号(ISN),用于标识从客户端到服务器的数据流。
-
SYN-ACK(同步-确认):
- 服务器收到SYN段后,如果同意建立连接,则会发送一个SYN-ACK段作为响应。这个段包含服务器的初始序列号,并且对客户端的SYN段进行确认(ACK)。
-
ACK(确认):
- 客户端收到服务器的SYN-ACK段后,会发送一个ACK段作为最后的确认。这个ACK段对服务器的SYN段进行确认。
完成这三次握手后,TCP连接就成功建立了,数据可以开始在客户端和服务器之间传输。
四次挥手(终止连接)
-
FIN(结束):
- 当客户端决定关闭连接时,它发送一个带有FIN标志位的TCP段到服务器,表示客户端已经没有数据要发送了。
-
ACK(确认):
- 服务器收到FIN段后,发送一个ACK段作为响应,确认收到了客户端的FIN段。
-
FIN(结束):
- 服务器在发送完所有剩余数据后,也会发送一个带有FIN标志位的TCP段到客户端,表示服务器也没有数据要发送了。
-
ACK(确认):
- 客户端收到服务器的FIN段后,发送一个ACK段作为最后的确认。
完成这四次挥手后,TCP连接就被正确地终止了。需要注意的是,TCP连接是全双工的,因此每个方向的关闭都需要单独的FIN和ACK段。
为什么需要三次握手和四次挥手?
-
三次握手:
- 确保双方的发送和接收能力都是正常的。
- 防止失效的连接请求突然又传送到了服务器端,从而产生错误。
-
四次挥手:
- 确保双方都能完全关闭连接,并且释放所有资源。
- 因为TCP是全双工的,所以每个方向都需要单独关闭。
这些过程确保了TCP连接的可靠性和数据传输的完整性。
相关文章:

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

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

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

C# 的两个list怎么判断是否存在交集
要判断两个 List<string>(dateList 和 LocalDate)是否有交集,可以使用 LINQ(Language Integrated Query)来简化这个过程。以下三种方法来判断两个列表之间是否有交集。 方法 1: 使用 LINQ 的 Any 方法 using S…...

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

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

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

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

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

基于SpringBoot+Vue的厨艺交流系统的设计与实现(源码+定制开发)厨艺知识与美食交流系统开发、在线厨艺分享与交流平台开发、智能厨艺交流与分享系统开发
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

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

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

深入探索 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的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...

【JPCS独立出版,EI检索稳定】第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)
第三届能源互联网及电力系统国际学术会议(ICEIPS 2024) 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类,全注解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.假设某商业集团中有若干公司,人事数据库中有3个基本表: 职工表:EMP(E#.ENAME,AGE, SEX, ECITY)。 其属性分别表示职工工号、姓名、年龄、性别和居住城市。 工作表:WORKS(E#,C#,SALARY)。其属性分别表示职工工号、所在公司的编号和工资。 公司表:COMP(C#,CA…...

【MySQL】增删改查-进阶(二)
目录 🌴新增 🎄查询 🚩聚合查询 🏀聚合函数 🏀group by子句 🏀HAVING 🚩联合查询 🏀内连接 🏀外连接 🏀自连接 🏀子查询 🏀…...

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系列函数启动新程序时,argc整型 、 argv数组 和 环境变量表 environ 会作为 exec 系列函数的参数,显式传递给新程序的 main 函数。 main函数的参数列表 在C语言中,main函数的标准参数列表通常如下所示: in…...

缓冲区类QBuffer
1、QBuffer继承自QIODevice 2、是一种随机设备 3、和QFile类似, 4、有了 QBuffer,你可以把 QByteArray 当成文件一样来操作 其主要作用就是像QFile操作文件一样来操作一块QByteArray(内存区域),比如读和写 常用方…...

从一个事故中理解 Redis(几乎)所有知识点
作者:看破 一、简单回顾 事故回溯总结一句话: (1)因为大 KEY 调用量,随着白天自然流量趋势增长而增长,最终在业务高峰最高点期占满带宽使用 100%。   (2ÿ…...

MySQL程序介绍<二>
目录 mysqlcheck - 表维护程序 Mysqldump - 数据库备份程序 mysqladmin - MySQL 服务器管理程序 mysqlshow - 显⽰数据库、表和列信息 mysqldumpslow - 总结慢查询⽇志⽂件 编辑 mysqlbinlog - 处理⼆进制⽇志⽂件 mysqlslap - 负载仿真客⼾端 接着上篇继续介绍MySQL…...

Java项目实战II基于Spring Boot的毕业就业信息管理系统设计与实现(源码+数据库+文档)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着高校扩…...

LeetCode 1343.大小为K且平均值大于等于阈值的子数组数目
题目: 给你一个整数数组 arr 和两个整数 k 和 threshold 。 请你返回长度为 k 且平均值大于等于 threshold 的子数组数目。 思路:定长滑动窗口 入 更新 出 代码: class Solution {public int numOfSubarrays(int[] arr, int k, int t…...

【电商项目】1分布式基础篇
1 项目简介 1.2 项目架构图 1.2.1 项目微服务架构图 1.2.2 微服务划分图 2 分布式基础概念 3 Linux系统环境搭建 查看网络IP和网关 linux网络环境配置 补充P123(修改linux网络设置&开启root密码访问) 设置主机名和hosts映射 主机名解析过程分析&…...

PHP嵌套函数
PHP嵌套函数(Nested Functions)在标准的PHP语法中并不直接支持,也就是说,你不能在一个函数内部直接定义另一个函数。然而,可以通过闭包(Closures)和匿名函数(Anonymous Functions&am…...

外包干了2个月,技术明显退步
回望过去,我是一名普通的本科生,于2019年通过校招有幸加入了南京某知名软件公司。那时的我,满怀着对未来的憧憬和热情,投入到了功能测试的岗位中。日复一日,年复一年,转眼间,我已经在这个岗位上…...

kaptcha依赖maven无法拉取的问题
老依赖了,就是无法拉取,也不知道为什么,就是用maven一直拉去不成功,还以为是魔法的原因,试了好久发现不是,只好在百度寻求帮助了,好在寻找到了这位大佬的文章Maven - 解决无法安装 Kaptcha 依赖…...

48.旋转图像
秋招未止脚步不止,大厂,我一定要上大厂! 题目链接 . - 力扣(LeetCode) 自己的思路 感觉好难,想不出来. 噫噫噫,我想着想着又想出来了。 //发现规律了,先左右对称, 再…...