TCP三次握手与四次挥手(TCP重传机制,2MSL)超详细!!!计算机网络
本篇是关于3次握手和四次挥手的详细解释~
如果对你有帮助,请点个免费的赞吧,谢谢汪。(点个关注也可以!)
如果以下内容需要补充和修改,请大家在评论区多多交流~。
目录
1. TCP头部:
2. 三次握手
2.1. 3次握手的必要原因:
2.2. 具体步骤:
2.3. 细节:
2.3.1. 第一次握手:
2.3.2. 第二次握手:
2.3.3. 第三次握手:
2.4. 影响TCP三次握手过程的因素:
网络延迟:
丢包率:
网络拥塞:
防火墙和网络安全策略:
系统资源限制:
TCP参数设置:
NAT(网络地址转换)和负载均衡器:
中间网络设备问题:
操作系统和网络栈问题:
应用程序设计:
DoS(拒绝服务)攻击:
3. 4次挥手
3.1. 步骤
3.2. 为什么客户端在TIME-WAIT阶段要等2MSL?
3.2.1. 确保最后的ACK被接收:
3.2.2. 处理网络中延迟的报文:
4. TCP如何保证可靠性传输?
4.1. 通过三次握手建立可靠的连接:
4.1.1. 同步序列号(SYN):
4.1.2. 确认(ACK):
4.2. 通过应答确认和重传机制确认数据准确到达:
4.2.1. 序列号(Seq):
4.2.2. 应答确认(Ack):
4.2.3. 超时重传:
4.2.4. 流量控制:
4.3. 通过四次挥手实现断开连接时信息传输的完整性:
结束(FIN):
确认(ACK):
终止确认:
5. TCP重传机制具体是如何运作的?
5.1. 超时重传(RTO - Retransmission Timeout)
5.2. 快速重传(Fast Retransmit)
5.3. 选择性重传(Selective Repeat)
5.4. 计时器管理
5.5. 流量控制与拥塞控制
5.5.1. 总结
1. TCP头部:
- Seq(序列号):序列号是TCP头部的一个32位字段,用于标识从发送端发送的数据字节流中的每一个字节。每个TCP段都有一个序列号,用于确保数据能够按照正确的顺序重新组装。对于建立连接的SYN包和结束连接的FIN包,即使它们不携带数据,也会有序列号。
- Ack(应答号):应答号是TCP头部的一个32位字段,用于指示发送端期望接收的下一个序列号。当发送ACK包时,Ack字段会设置为接收方期望从对方收到的下一个序列号。这表明所有到这个序列号为止的数据都已经成功接收。
- SYN(同步序列编号):SYN标志是在TCP三次握手中的第一个包中设置的,用于开始一个新的连接。它告诉接收方发送方将开始一个新的序列号,用于后续的数据传输。
- FIN(结束):FIN标志用于结束一个TCP连接。当一方完成数据发送后,它会发送一个设置了FIN标志的包,以请求关闭连接。
- PSH(推送):PSH标志指示接收方应该立即将数据推送到应用程序,而不是将其缓存起来。这通常用于需要立即处理的数据,如交互式输入。
- ACK(确认):ACK标志用于确认包的接收。除了最初的SYN包外,TCP协议要求所有的数据传输包都应该设置ACK标志。
这些标志和字段是TCP协议如何保证可靠传输的关键组成部分。在TCP头部,这些标志可以单独设置,也可以组合设置,以指示不同的控制信息。例如,在三次握手的第二次握手时,服务器会发送一个SYN-ACK包,这个包同时设置了SYN和ACK标志。
2. 三次握手
TCP(传输控制协议)使用三次握手过程来建立可靠的连接
2.1. 3次握手的必要原因:
-
同步序列号:客户端和服务器都需要知道对方的初始序列号,以便正确地排序数据段。在三次握手中,双方通过发送和确认序列号来同步这些信息。
-
确认双方的接收和发送能力:三次握手确保了双方都有能力发送和接收数据。在第一次握手时,客户端发送一个SYN包,如果服务器能够接收到这个包,那么它就知道客户端的发送能力是正常的。
在第二次握手时,服务器发送一个SYN-ACK包,客户端如果能够接收到,就知道服务器的发送能力是正常的。
客户端发送一个ACK包,服务器接收到后,就知道客户端的接收能力也是正常的。
3. 防止已失效的连接请求突然又传送到了服务端:
如果一个旧的连接请求(可能因为网络延迟而长时间滞留)突然到达服务器,通过三次握手可以防止这种情况建立一个错误的连接。因为服务器在接收到SYN后,会发送一个SYN-ACK,如果客户端没有对应的请求(即它没有发送过SYN),它就不会发送ACK,因此连接不会建立。
2.2. 具体步骤:
-
第一次握手:客户端发送一个SYN包到服务器,以开始一个新的连接。
-
第二次握手:服务器接收到SYN包,会应答一个SYN-ACK包,表示已经收到了客户端的SYN,并准备好建立连接。
-
第三次握手:客户端收到服务器的SYN-ACK包后,会向服务器发送一个ACK包,确认连接建立。
这个过程确保了双方都准备好数据传输,并且减少了因网络延迟或错误而导致的资源浪费。两次握手不足以完成这些任务,因为它不能防止旧的连接请求干扰新的连接建立。
2.3. 细节:
2.3.1. 第一次握手:
客户端发送一个TCP同步序列编号(SYN)包到服务器,以开始一个新的连接。
在这个SYN包中,序列号(seq)被设置为一个初始值J(通常是随机生成的)。
发送完SYN包后,客户端进入SYN_SENT状态,等待服务器的确认。
2.3.2. 第二次握手:
服务器收到客户端的SYN包后,会发送一个确认包(ACK)回去。
服务器在ACK包中设置确认号(ack)为客户端的序列号J加1,表示收到了序列号为J的SYN包。
同时,服务器也会发送自己的SYN包,其中包含自己的初始序列号K。
服务器此时进入SYN_RECV状态,等待客户端的确认。
2.3.3. 第三次握手:
客户端收到服务器的SYN+ACK包后,会发送一个确认包(ACK)作为响应。
在这个ACK包中,确认号(ack)被设置为服务器的序列号K加1。
发送完这个ACK包后,客户端进入ESTABLISHED状态,表示客户端到服务器的连接已经建立。
服务器在收到这个ACK包后,也进入ESTABLISHED状态,此时双方都准备好开始数据传输。
2.4. 影响TCP三次握手过程的因素:
网络延迟:
网络延迟会影响握手的速度。如果网络延迟较大,那么SYN包和ACK包的往返时间(RTT)会增加,导致建立连接的时间变长。
丢包率:
如果网络中的丢包率较高,SYN或ACK包可能在传输过程中丢失,需要重传,这会延长握手过程。
网络拥塞:
网络拥塞会导致数据包传输延迟或丢失,从而影响握手过程。
防火墙和网络安全策略:
防火墙或其他网络安全设备可能会限制或过滤SYN包,这可能导致握手失败。
系统资源限制:
如果服务器资源有限(如内存不足),它可能无法处理大量的并发握手请求,导致连接建立失败。
TCP参数设置:
诸如TCP窗口大小、SYN重传次数、SYN超时时间等TCP参数的设置也会影响握手过程。
NAT(网络地址转换)和负载均衡器:
NAT设备和负载均衡器可能会改变数据包的流向,影响握手的正常进行。
中间网络设备问题:
路由器、交换机等网络设备如果出现问题,如配置错误或硬件故障,也可能影响握手过程。
操作系统和网络栈问题:
操作系统的网络栈如果有bug或配置不当,可能会影响TCP握手的执行。
应用程序设计:
如果应用程序在建立TCP连接时没有正确处理异常情况,可能会导致握手失败。
DoS(拒绝服务)攻击:
SYN Flood等DoS攻击会发送大量伪造的SYN包,导致服务器资源耗尽,无法处理正常的握手请求。
3. 4次挥手
3.1. 步骤
- 第一次挥手:
主动方(可以是客户端或服务器)发送一个FIN包(FIN=1,seq=u),表示它已经完成发送数据,并希望关闭到被动方的连接。
主动方发送完FIN包后,主动方进入FIN_WAIT_1
状态,等待被动方的确认。
-
第二次挥手:
被动方收到FIN包后,发送一个ACK包(ACK=1, ack=u+1)作为响应,确认已经收到主动方的终止请求。
被动方此时进入CLOSE_WAIT
状态,这意味着被动方已经知道主动方想要关闭连接,但被动方可能还有数据需要发送。
主动方收到这个ACK包后,进入FIN_WAIT_2
状态,等待被动方发送剩余的数据并关闭连接。
-
第三次挥手:
在被动方发送完所有剩余的数据后,它发送一个FIN包(FIN=1, seq=w),请求关闭到主动方的连接。
发送完FIN包后,被动方进入LAST_ACK
状态,等待主动方的最后确认。
-
第四次挥手:
主动方收到被动方的FIN包后,发送一个ACK包(ACK=1, ack=w+1)作为响应,确认已经收到被动方的终止请求。
主动方在发送完ACK包后,进入TIME_WAIT
状态,这个状态会持续一段时间(通常是2倍的最大段生命周期MSL),以确保被动方收到最后的ACK包。
被动方收到这个ACK包后,关闭连接,进入CLOSED
状态。
在TIME_WAIT
状态结束后,主动方也会关闭连接,进入CLOSED
状态。
这个过程确保了双方都能优雅地关闭连接,并且所有未完成的数据传输都有机会完成。TIME_WAIT
状态的存在是为了防止在网络中延迟的数据包影响后续的连接。
3.2. 为什么客户端在TIME-WAIT阶段要等2MSL?
3.2.1. 确保最后的ACK被接收:
客户端在发送最后一个ACK确认报文后,不能立即断定服务器端已经收到了这个ACK。如果服务器端没有收到ACK,它可能会重新发送FIN报文。客户端在TIME_WAIT
状态中等待2MSL,可以确保如果服务器端的FIN报文因为网络延迟而丢失,服务器端有足够的时间重新发送FIN,并且客户端可以再次发送ACK。
3.2.2. 处理网络中延迟的报文:
在TCP连接中,可能会存在在网络中长时间延迟的报文。等待2MSL可以确保当前连接中所有延迟的报文都已经过期,从而不会影响后续可能建立的相同源地址和端口号的新连接。
避免旧连接的报文影响新连接:如果客户端在发送完最后一个ACK后立即关闭连接,并且立即重新建立一个新的连接,那么理论上,网络中延迟的属于旧连接的报文可能会错误地被新连接接收。TIME_WAIT
状态防止了这种情况的发生。
MSL(Maximum Segment Lifetime)是TCP报文在网络中存在的最长时间,这个时间通常是根据网络的特性来设定的。2MSL的等待时间是一个保守的估计,它考虑了报文在网络中的最大存活时间以及往返时间。
总结来说,客户端在TIME_WAIT
状态等待2MSL是为了确保TCP连接的可靠终止,防止因为网络延迟或报文丢失导致的问题,并且保护后续可能建立的连接不受旧连接报文的影响。这也是为什么在TCP四次挥手过程中,客户端比服务器端晚进入CLOSED
状态的原因。
4. TCP如何保证可靠性传输?
4.1. 通过三次握手建立可靠的连接:
4.1.1. 同步序列号(SYN):
三次握手的过程确保了双方都知道对方的初始序列号,这样在后续的数据传输中,双方都可以根据序列号来正确地组装数据。
4.1.2. 确认(ACK):
在三次握手中,每个方向上的SYN包都会得到一个ACK确认,这确保了连接的双方都准备好接收和发送数据。
4.2. 通过应答确认和重传机制确认数据准确到达:
4.2.1. 序列号(Seq):
TCP为每个数据字节分配一个序列号,确保数据包在接收端能够按照正确的顺序被重新组装。
4.2.2. 应答确认(Ack):
接收方收到数据后会发送一个ACK包,其中包含期望收到的下一个序列号。如果发送方没有在预期时间内收到ACK,它会重传数据。
4.2.3. 超时重传:
如果发送方没有在指定的时间内收到确认,它会认为数据包可能已经丢失或出错,并会重新发送该数据包。
4.2.4. 流量控制:
TCP使用滑动窗口机制来控制发送方的发送速率,以避免接收方因来不及处理而丢弃数据包。
4.3. 通过四次挥手实现断开连接时信息传输的完整性:
结束(FIN):
当连接的一端完成数据发送后,它会发送一个FIN包来请求关闭连接。
确认(ACK):
对端收到FIN包后,会发送一个ACK包作为响应,并进入关闭等待状态,等待剩余的数据传输完成。
终止确认:
在双方都发送了FIN包并收到了对方的ACK确认后,连接最终会被关闭。这个过程确保了在连接关闭之前,所有的数据都已经传输完成。
这些机制共同作用,确保了TCP传输的可靠性。通过序列号和确认机制,TCP能够处理数据包的丢失、重复和顺序错误问题,而三次握手和四次挥手过程则确保了连接的建立和终止都是清晰和可靠的。
5. TCP重传机制具体是如何运作的?
TCP(传输控制协议)的重传机制是网络通信中确保数据可靠传输的关键部分。
5.1. 超时重传(RTO - Retransmission Timeout)
-
发送数据:当TCP发送一个数据段时,它会启动一个计时器。
-
等待确认(ACK):发送方等待接收方发送确认(ACK)消息。
-
计时器到期:如果在计时器到期之前没有收到预期的ACK,发送方认为该数据段可能已经丢失或出错。
-
重传数据:计时器到期后,发送方将重传该数据段,并重新启动计时器。
5.2. 快速重传(Fast Retransmit)
快速重传机制是在接收方连续收到三个重复的ACK时触发的,表明接收方期望的下一个数据段丢失了。
-
接收重复ACK:如果接收方收到一个已经接收过的数据段,它会发送一个重复的ACK,指示发送方下一个期望的数据序列号。
-
连续收到三个重复ACK:当发送方连续收到三个相同的重复ACK时,它会推断出接收方期望的下一个数据段丢失了。
-
触发快速重传:发送方立即重传丢失的数据段,而不是等待计时器到期。
5.3. 选择性重传(Selective Repeat)
选择性重传允许发送方只重传丢失的数据段,而不是从丢失的段开始重传所有后续的段。
-
接收方指示丢失的段:接收方可以使用SACK(选择性确认)选项来明确告诉发送方哪些数据段丢失了。
-
发送方重传丢失的段:发送方根据接收方的指示,只重传丢失的数据段。
5.4. 计时器管理
-
RTO计算:TCP使用各种算法来估算RTO,如Karn算法和Jacobson/Karels算法。这些算法旨在动态调整RTO,以适应网络条件的变化。
-
退避策略:当数据段被重传时,TCP可能会增加RTO,以避免在网络拥塞时加剧问题。
5.5. 流量控制与拥塞控制
-
流量控制:TCP使用滑动窗口机制来控制发送方的发送速率,以匹配接收方的处理能力。
-
拥塞控制:TCP拥塞控制算法(如慢启动、拥塞避免、快速恢复)也会影响重传机制,以避免网络拥塞。
TCP重传机制确保了数据的可靠传输,通过上述机制,TCP能够适应网络延迟、丢包和数据错误的情况,从而提高整体的数据传输效率。当数据段丢失时,TCP会通过超时重传或快速重传来恢复丢失的数据,同时使用选择性重传来优化重传过程。这些机制与流量控制和拥塞控制相结合,使得TCP成为一个非常可靠的传输协议。
相关文章:
TCP三次握手与四次挥手(TCP重传机制,2MSL)超详细!!!计算机网络
本篇是关于3次握手和四次挥手的详细解释~ 如果对你有帮助,请点个免费的赞吧,谢谢汪。(点个关注也可以!) 如果以下内容需要补充和修改,请大家在评论区多多交流~。 目录 1. TCP头部: 2. 三次握手…...
LCR 006. 两数之和 II - 输入有序数组
一.题目: LCR 006. 两数之和 II - 输入有序数组 - 力扣(LeetCode) 二.我的原始解法-暴力解法超时: class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: # 暴力解法 result [] for i in rang…...
网络安全在现代企业中的重要作用
网络安全是这个数字时代最令人担忧的事情之一。对技术的依赖性越来越强,使其同时面临多种网络威胁。其声誉和法律后果的大幅下降可能归因于一次妥协。 这使得良好的网络安全成为所有企业的选择和必需品。本文介绍了网络安全的重要性、企业中常见的网络威胁以及公司…...
关于 EKS Bottlerocket AMI 版本与 Karpenter 配置的说明
问题1: Bottlerocket AMI 版本问题 之前,后端团队发现在使用 Bottlerocket v1.26.2 AMI 版本时,存在某些问题。经过 Bottlerocket 团队调查,此行为是罕见的 race condition 导致的结果。 我们在环境中重现了此状况,并且关注到由于 kubelet device manager 的启动时间晚于 NVI…...
Python实现人生重开模拟器
目录 人生重开模拟器介绍 代码实现 打印初始界面 设置初始属性 设置角色性别 设置角色出生点 针对每一岁,生成人生经历 完整代码 人生重开模拟器介绍 人生重开模拟器 是之前比较火的一个小游戏,我们这里使用 Python 实现一个简化版的 人生重开模…...
java——Spring Boot的配置加载顺序和优先级
Spring Boot的配置加载顺序和优先级是确定应用程序如何读取和应用配置的关键。以下是对Spring Boot配置加载顺序和优先级的详细解释: 一、配置加载顺序 命令行参数: Spring Boot会首先加载命令行中指定的参数。这些参数可以通过在命令行中使用--keyval…...
【21-30期】Java技术深度剖析:从分库分表到微服务的核心问题解析
🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 文章题目:Java技术深度剖析:从分库分表到微服务的核心问题解析 摘要: 本…...
CSS:怎么把网站都变成灰色
当大家看到全站的内容都变成了灰色,包括按钮、图片等等。这时候我们可能会好奇这是怎么做到的呢? 有人会以为所有的内容都统一换了一个 CSS 样式,图片也全换成灰色的了,按钮等样式也统一换成了灰色样式。但你想想这个成本也太高了…...
开发一个基于MACOS M1/2芯片的Android 12的模拟器
产品需求:MuMu模拟器Pro_率先适配Apple M系列芯片的安卓模拟器 苹果M芯片专属:产品专为苹果M系列芯片设计,意味着它需要能够充分利用M系列芯片的性能优势。 安卓模拟器:产品是一个安卓模拟器,允许用户在Mac设备上运行…...
Flink 中 JDBC Connector 使用详解
1. 背景 在实时计算或离线任务中,往往需要与关系型数据库交互,例如 MySQL、PostgreSQL 等。Apache Flink 提供了 JDBC Connector,可以方便地将流式数据写入或读取数据库。 本文将介绍 Flink JDBC Connector 的基础用法、配置方法以及注意事…...
【Linux打怪升级记 | 报错02】-bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)
🗺️博客地图 📍1、报错发现 📍2、原因分析 📍3、解决办法 📍4、测试结果 1、报错发现 装好了CentOS操作系统,使用ssh远程登陆CentOS,出现如下告警信息: bash: 警告:setlocale…...
未来已来?AI技术革新改变我们的生活
在21世纪的今天,人工智能(AI)不再是一个遥远的概念,而是逐渐渗透到我们生活的方方面面。从智能家居到自动驾驶汽车,从个性化推荐系统到医疗诊断辅助,AI技术正在以惊人的速度发展,并深刻地影响着…...
【Linux】进程的生命之旅——诞生、消逝与守候(fork/exit/wait)
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出,万山无阻 目录 📖一、进程创建 1.fork函数 📚高层封装特性 📚fork返回值 2.写时拷…...
使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)
使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost) vcpkg的自动链接功能非常方便,但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例,程序中调用tinyxml2的函数后,若vcpkg中同时存在opencv和…...
【去毛刺】OpenCV图像处理基础:腐蚀与膨胀操作入门
在数字图像处理中,形态学操作是一种常用的技术,用于提取图像中的特定形状或特征。其中,腐蚀(Erosion)和膨胀(Dilation)是两种基本的形态学运算。本文将通过一个简单的例子来演示如何使用Python中…...
道可云人工智能元宇宙每日资讯|第三届京西地区发展论坛成功召开
道可云元宇宙每日简报(2024年11月27日)讯,今日元宇宙新鲜事有: 工信部等十二部门印发《5G规模化应用“扬帆”行动升级方案》 11月25日,工业和信息化部等十二部门印发《5G规模化应用“扬帆”行动升级方案》。《方案》…...
若依框架部署在网站一个子目录下(/admin)问题(
部署在子目录下首先修改vue.config.js文件: 问题一:登陆之后跳转到了404页面问题,解决办法如下: src/router/index.js 把404页面直接变成了首页(大佬有啥优雅的解决办法求告知) 问题二:退出登录…...
【ue5】UE5运行时下载视频/UE5 runtime download video(MP4)
插件还是老朋友。 节点的content type要打对。 (参照表:MIME 类型(MIME Type)完整对照表 - 免费在线工具) 结果展示:...
对比C++,Rust在内存安全上做的努力
简介 近年来,越来越多的组织表示,如果新项目在技术选型时需要使用系统级开发语言,那么不要选择使用C/C这种内存不安全的系统语言,推荐使用内存安全的Rust作为替代。 谷歌也声称,Android 的安全漏洞,从 20…...
如何利用 Qt 的模块化架构组织大型项目
目录 1. 大型项目的架构设计 1.1 分层架构 1.2 事件驱动与异步架构 2. 模块划分与职责分离 2.1 功能模块划分 2.2 模块之间的依赖管理 3. 跨平台开发与模块复用 在大型软件项目中,随着代码量的增加和功能的扩展,项目的复杂度会显著提升。没有良好…...
探索Python词云库WordCloud的奥秘
文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍:为何选择WordCloud?2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍:为何选择Wo…...
MySQL根据idb文件恢复数据
首先得有对应表的idb文件以及建表语句 1.首先在新数据库建表 CREATE TABLE sys_menu (id bigint(20) NOT NULL,parent_id bigint(20) NULL DEFAULT NULL,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,type int(11) NULL DEFAULT …...
hadoop-mapreduce词频统计
一、Map Reduce主要阶段 二、词频统计示例 0.MapReduce 词频统计(Word Count)示例图 1. Input 阶段(输入阶段) 输入数据是一段文本,如下: Hadoop is a big data framework. Hadoop can store vast data. Hadoop processes big …...
精心修炼Java并发编程(JUC)-volatile与synchronized关键字
volatile volatile 是 JVM 提供的 最轻量级的同步机制,中文意思是不稳定的,易变的,用 volatile 修饰变量是为了保证变量在多线程中的可见性,它表达的含义是:告诉编译器,对这个变量的读写,需要基…...
【ROS2】ROS2 与 ROS1 编码方式对比(Python实现)
目录 一、初始化和关闭节点二、发布者三、订阅者四、服务端五、客户端六、参数管理七、日志记录八、生命周期管理 ROS2 在 Python 编程中引入了一些新的概念和 API,这些变化使得代码更加模块化和易于维护。特别是 rclpy 库提供了更丰富的功能和更好的错误处理机制&a…...
ElasticSearch的下载和基本使用(通过apifox)
1.概述 一个开源的高扩展的分布式全文检索引擎,近乎实时的存储,检索数据 2.安装路径 Elasticsearch 7.8.0 | Elastic 安装后启动elasticsearch-7.8.0\bin里的elasticsearch.bat文件, 启动后就可以访问本地的es库http://localhost:9200/ …...
城市轨道交通运营控制指挥中心设计方案
为某城市轨道交通运营控制指挥中心(OCC)的设计提供方案时,我们需要考虑到多个方面的需求,包括系统架构、设备选择、功能实现、数据流与监控、通信管理等。以下是一个综合性的设计方案,涉及系统硬件和软件的选择、布局规划、安全性等方面,以确保指挥中心的高效运作、实时监…...
多目标优化算法:多目标河马优化算法(MOHOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
一、河马优化算法 河马优化算法(Hippopotamus optimization algorithm,HO)由Amiri等人于2024年提出的一种模拟自然界中河马觅食行为的新型群体智能优化算法。该算法由Mohammad Hussein Amiri等人于2024年2月发表在Nature旗下子刊《Scientifi…...
线程与进程的个人理解
进程(Process): 一个程序在执行时,操作系统为其分配的资源(如内存、CPU 时间等)构成了一个进程。每个进程都有自己的独立的地址空间、堆栈和局部变量,它们之间不共享内存(除非通过特…...
vscode的项目给gitlab上传
目录 一.创建gitlab帐号 二.在gitlab创建项目仓库 三.Windows电脑安装Git 四.vscode项目git上传 一.创建gitlab帐号 二.在gitlab创建项目仓库 图来自:Git-Gitlab中如何创建项目、创建Repository、以及如何删除项目_gitlab新建项目-CSDN博客) 三.Windows电脑安…...
花生壳申请了域名 怎么做网站/网站推广排名服务
目前,对于需要做同步数据采集的项目,大家不约而同的选用GPS作同步源,用GPS的秒脉冲作同步基准。对于是1000米内的多采集点的应用来说,这是一种浪费。 目前福州慧聚通信技术有限公司推出一款无线同步数传通信系统,它可实…...
湖南奶茶加盟网站建设/google seo是什么啊
.Net 中枚举AppDomains .Net 框架提供的基础类库中并没有枚举AppDomains的功能,只提供了获取当前执行代码所在的AppDomain功能。 国外一家提供.Net保护工具的,同时提供了一个AppDomain dump工具。用来证明其保护有效。 名称就不提了,简单介绍…...
西安市建设协会网站/免费拓客软件哪个好用
linux查看一个文件夹的大小的命令为: du --max-depth 1 -lh 该文件夹的完整路径 例,查询/var文件夹的大小: du --max-depth 1 -lh /var du 递归查询该路径下所有文件的大小(若不加任何参数,则显示文件夹内的所有文件…...
用php做的网站前后台模板/长清区seo网络优化软件
Clion复制提示信息 windows: 按着alt 左键点击错误信息(按键点击同时进行) mac:按着option 左键点击错误信息 搞定转载于:https://www.cnblogs.com/sstealer/p/11110786.html...
接网站开发项目/网络营销的特点
解题思路: 1.创建一个结点类 2.创建一个删除方法 3.使用快慢指针的思想(主要的部分) 代码如下: 1 public class RemoveRepeation {2 3 public static void main(String[] args) {4 int data[] {1,1,1,1,1,2,2,2,2,2,3,3,3,4,4,5,5,5,6,6,5,5…...
预付做网站订金怎么做账/咸宁网站seo
原文网址:https://www.skyfox.org/ios-xcode7-debug-device.html 从Xcode7开始,Xcode 不需要$99/$299升级开发者直接可以进行真机调试 调试步骤 1.假设已经你已经有了苹果账号,下载并安装好了Xcode7 2. 打开Xcode-> Preferences ->Accounts 点加号增加一个Ap…...