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

Socket-TCP

在TCP/ip协议中,用源IP、源端口号、目的IP、目的端口号、协议号这样一个五元组来标识一个通信!

端口号范围划分

  • 0 - 1023: 知名端口号,HTTP,FTP,SSH 等这些广为使用的应用层协议,他们的端口号都是固定的。
  • 1024 - 65535: 操作系统动态分配的端口号。客户端程序的端口号,就是由操作系统从这个范围分配的。

认识知名端口号 (Well-Know Port Number)

有些服务器是非常常用的,为了使用方便,人们约定一些常用的服务器,都是用以下这些固定的端口号:

  • ssh 服务器,使用 22 端口
  • ftp 服务器,使用 21 端口
  • telnet 服务器,使用 23 端口
  • http 服务器,使用 80 端口
  • https 服务器,使用 443

执行下面的命令,可以看到知名端口号
cat /etc/services

一个进程可以绑定多个端口号一个用来收数据一个用来传数据;一个端口号不可以被多个进程绑定。

TCP(传输控制协议,Transmission Control Protocol )是一种位于传输层的通信协议。

应用场景

适用于对数据准确性、完整性、顺序性要求高的场景 ,如文件传输(FTP 基于 TCP ) 、网页浏览(HTTP 基于 TCP ) 、电子邮件(SMTP 基于 TCP ) 等。

TCP协议格式首部

  1. 源端口号(16 位):标识数据发送方应用程序端口,便于接收方后续回传数据能找到对应端口 。比如客户端浏览器发起 HTTP 请求,会用一个随机的源端口号。
  2. 目的端口号(16 位):指明数据要抵达的目标应用程序端口,像 HTTP 协议默认目的端口号 80 ,用于定位 Web 服务器应用 。
  3. 序号(32 位):给 TCP 传输的每个字节编号,在建立连接和数据传输时,保证字节按序传输 。例如发送一篇长文档,每个字节都有序号。
  4. 确认序号(32 位):接收方告知发送方下一个期望接收的字节序号,发送方依此判断哪些数据已成功接收,哪些需重传 。
  5. 首部长度(4 位):以 4 字节为单位指示首部长度,因首部中选项字段可变长,取值范围对应 0 - 60 字节 ,无选项时通常为 20 字节 。
  6. 保留(6 位):预留字段,当前未使用,默认置 0 。
  7. 标志位(6 位)

  1. 窗口大小(16 位):这个窗口大小其实代表的是缓冲区里面剩余空间把它放在报头里面目的是,想让接收方得知目前传送过去的数据,对方的接受速度是多少,来调整一下自己的发送速度(流量控制)。
  2. 检验和(16 位):对 TCP 首部、数据及伪首部计算校验和,检测传输过程中数据有无错误 。
  3. 紧急指针(16 位):当 URG 标志位为 1 时有效,指向紧急数据末尾,方便接收方优先处理紧急数据 。

选项与数据

  1. 选项:可选字段,长度可变,用于实现如最大段长度声明、窗口扩大等扩展功能 。
  2. 数据:即有效载荷,承载应用层传来的数据,TCP 负责可靠传输这部分数据 。

超时重传机制:

如果你的数据发送过去后没有得到应答,等到了一定时间就会重新补发,这个机制叫做超时重传机制,这个时间是动态的,会根据你的网络环境进行调整的,当你面临的情况是应答丢失的时候,此时它主机b会得到两个相同的数据,此时的主机b会进行去重操作,会根据你的报头里面的32位序号进行查重去重!当你面临的情况是始终重传不成功,系统会认为你的网络出现了异常,会自动断开两个主机的连接!

面对主机B收到重复的信息,此时操作系统可以根据报文里面的序号,进行去重操作!

TCP 连接管理机制详解

TCP 连接管理主要包括建立连接和断开连接两个过程,分别通过三次握手和四次挥手实现。

TCP的三次握手:刚开始客户端进行了connect在客户端状态没有变为ESTABLISHED之前一直处于阻塞状态,第一次握手是客户端给服务器发送的报文是SYN类型的(申请建立连接)此时的客户端状态为SYN_SENT,当你服务器收到发来的申请后状态变为SYN_RCVD,然后向客户端发送SYN+ACK(申请建立连接和确认收到了客户端发来的SYN)这是第二次握手,当客户端收到了来自服务器的应答后状态变为ESTABLISHED,随后向服务器发送ACK(确认自己收到了应答),收到信息后的服务器状态变为ESTABLISHED,此时的服务器会把刚刚完成三次握手后分配到的新的连接fd,交给accept,第三次握手的时候其实是已经可以携带数据了,做出捎带应答!

建立连接以后的通信:所用到的write和read其实都是面向发送缓冲区和接受缓冲区进行操作的!

TCP四次挥手:第一次挥手是客户端给服务器发FIN,客户端的状态变为FIN_WAIT_1,服务器接受到了以后状态变为CLOSE_WAIT,第二次挥手然后给客户端发送ACK应答,接收到信息的客户端状态变为FIN_WAIT_2,第三次挥手紧接着服务器会向客户端发送FIN,状态变为LAST_ACK,客户端收到断开连接请求以后状态变为TIME_WAIT,第四次挥手就是客户端给服务器的应答,状态变为CLOSED!

解决疑问:

至少三次握手是因为:1.客户端和服务端各自都要至少进行一次收报文和发报文,这样其实可靠验证了全双工通路是否通畅!!!2.奇数次握手,在一般情况,握手失败的连接成本嫁接给了客户端!

为什么两次不行是因为:当你服务器再发回给客户端的信息,你并不能知道客户端到底有没有收到!

为什么一次不行是因为:会发生SYN洪水,直到服务器内存不够分配的时候会导致服务中断!

插入知识点:SYN洪水:

SYN洪水不止一次握手会出现:SYN 洪水(SYN Flood)是一种常见的 DoS(Denial of Service,拒绝服务)攻击手段,它利用了 TCP 协议在建立连接时三次握手的漏洞来实施攻击,以下是关于 SYN 洪水攻击的详细介绍:

攻击原理

正常情况下,TCP 建立连接需要经过三次握手。客户端发送 SYN 包请求建立连接,服务器收到后回复 SYN + ACK 包并分配资源等待客户端的 ACK 包完成连接建立。而 SYN 洪水攻击中,攻击者会伪造大量源 IP 地址,向目标服务器发送大量的 SYN 包。服务器收到这些请求后,会为每个请求分配资源并发送 SYN + ACK 包进行响应,然后等待客户端的 ACK 包。由于攻击者使用的是伪造的 IP 地址,服务器无法收到这些伪造客户端的 ACK 确认,会不断重传 SYN + ACK 包,并长时间保留这些半连接状态的资源,直到超时。当服务器的半连接队列被填满后,就无法再处理正常用户的连接请求,导致正常用户无法与服务器建立连接,从而实现拒绝服务的目的。

防范措施

  • 防火墙配置:通过防火墙设置规则,限制来自同一 IP 地址的 SYN 请求速率,防止单个 IP 地址发送过多的 SYN 包。
  • TCP SYN Cookie 技术:服务器在收到 SYN 包时,不立即分配资源,而是根据 SYN 包的信息生成一个特殊的 Cookie(一种加密的序列号),并将其包含在 SYN + ACK 包中发送给客户端。当客户端返回 ACK 包时,服务器根据 ACK 包中的信息验证 Cookie 的有效性,如果验证通过,则建立连接。这样可以避免服务器为大量伪造的 SYN 请求分配资源。
  • 增加服务器资源:增加服务器的内存、CPU 等资源,提高服务器的处理能力和抗攻击能力。
  • 入侵检测系统(IDS)/ 入侵防御系统(IPS):部署 IDS/IPS 系统,实时监测网络流量,检测并阻止 SYN 洪水攻击。

从这个攻击原理其实可以明白:在三次握手中最怕的一次握手是第三次客户端给服务器的应答ACK,假如你是只有两次握手,那你的第二次握手丢失以后整个压力就会给到服务端,导致服务崩溃,但是如果你是三次握手,就不是这样,因为如果丢失了第三次握手,整个压力就会给到客户端上,这样就能保证服务器的稳定性!

四次挥手原因:

它不进行捎带应答是因为服务器与客户端进行关闭通信的时候存在着“协商”!

  • TCP 协议规定,主动关闭连接的一方要处于 TIME_WAIT 状态,等待两个 MSL (maximum segment lifetime) 的时间后才能回到 CLOSED 状态。
  • 我们使用 Ctrl - C 终止了 server,所以 server 是主动关闭连接的一方,在 TIME_WAIT 期间仍然不能再次监听同样的 server 端口;

为了避免这种情况,所以可以去用setsockopt。

  • MSL 在 RFC1122 中规定为两分钟,但是各操作系统的实现不同,在 Centos7 上默认配置的值是 60s;
  • 可以通过cat /proc/sys/net/ipv4/tcp_fin_timeout查看 msl 的值;
  • 规定 TIME_WAIT 的时间请读者参考 UNP 2.7 节;

MSL:一个报文它在网络中存活的时间是有限的!

当你第三次挥手结束,如果第四次挥手丢失,导致服务端收不到最后的一个ACK,此时Time_wait的时间可以让服务端端有足够的时间去补发一个FIN!等待时间一般为两个MSL(在传输过程中最大存在时长,这个一般是不确定的,因为如果遇到一个阻塞,那存在时长就大了)

流量控制:

接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。
因此 TCP 支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制 (Flow Control):

  • 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段,通过 ACK 端通知发送端;
  • 窗口大小字段越大,说明网络的吞吐量越高;
  • 接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端;
  • 发送端接收到这个窗口之后,就会减慢自己的发送速度;
  • 如果接收端缓冲区满了,就会将窗口置为 0;这时发送方不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。

流量控制属于可靠性还是效率?可靠性!

滑动窗口:

刚才我们讨论了确认应答策略,对每一个发送的数据段,都要给一个 ACK 确认应答。收到 ACK 后再发送下一个数据段。
这样做有一个比较大的缺点,就是性能较差,尤其是数据往返的时间较长的时候。

滑动窗口的大小,根据接受方缓冲区的剩余大小进行调整,这样可以保证滑动窗口里面的数据一次性传给接收方不会导致数据丢包!

关于缓冲区:

TCP 协议依靠发送缓冲区来保存已经发出但未收到应答的报文 。具体如下:

  • 缓冲区划分:发送缓冲区通常分为三部分。已发送已确认的数据,这部分数据传输已完成,可被后续数据覆盖;已发送未确认的数据,即暂时保存等待应答的报文所在区域,这部分区域也属于滑动窗口范畴,其最大范围由对方接收窗口大小决定 ;未发送未确认的数据,是等待发送且未得到接收方接收许可的数据。通过设置指针(如指向窗口开始和结束的指针)或数字下标来区分这些区域,随着数据发送和确认,指针移动实现窗口滑动 。
  • 保存作用:发送缓冲区保存已发送未确认报文,是为实现可靠传输。若发送方在一定时间(由超时重传时间 RTO 决定 )内未收到接收方对应答报文的确认,就会从发送缓冲区取出对应报文副本重传 。 比如网络拥塞导致报文丢失或延迟到达接收方,接收方无法及时返回确认,发送方超时后从缓冲区取出报文重发,保障数据最终能送达接收方。 同时,滑动窗口机制也基于发送缓冲区这些划分来控制数据发送速率,避免接收方处理不过来。

传输异常处理:

若窗口更新通知在传输途中丢失,发送主机 A 无法得知接收主机 B 窗口状态变化,会导致通信受阻。此时,发送主机 A 会定时发送窗口探测包,来主动获取窗口信息,以便恢复数据传输。

滑动窗口机制通过动态调整窗口大小,在保障数据可靠传输的同时,还能适应网络和接收端的不同状态,有效提升网络传输效率,避免网络拥塞和数据丢失。

注意:快重传并不是超时重传机制!超重传机制可以理解为是兜底的,而快重传是提高效率的!

快重传机制是 TCP 协议中用于快速检测并恢复丢失数据包的机制 。当接收方收到乱序数据包时,会立即向发送方发送重复确认 。当发送方累计收到三个相同的重复确认时,就会判定对应的数据包已丢失,不等重传超时,直接重传该数据包 。比如发送方发送数据包 1、2、3、4 ,若数据包 2 丢失,接收方收到 1、3、4 后发送重复确认,发送方收到三个重复确认,就快速重传数据包 2 。该机制减少了网络传输延迟,提升了 TCP 协议在网络传输中的效率和可靠性 。

延迟应答

如果接收数据的主机立刻返回 ACK 应答,这时候返回的窗口可能比较小。

  • 假设接收端缓冲区为 1M,一次收到了 500K 的数据;如果立刻应答,返回的窗口就是 500K;
  • 但实际上可能处理端处理的速度很快,10ms 之内就把 500K 数据从缓冲区消费掉了;
  • 在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过来;
  • 如果接收端稍微等一会再应答,比如等待 200ms 再应答,那么这个时候返回的窗口大小就是 1M;

一定要记得,窗口越大,网络吞吐量就越大,传输效率就越高。我们的目标是在保证网络不拥塞的情况下尽量提高传输效率;

那么所有的包都可以延迟应答么?肯定也不是;

  • 数量限制:每隔 N 个包就应答一次;
  • 时间限制:超过最大延迟时间就应答一次;

拥塞控制

虽然 TCP 有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据。但是如果在刚开始阶段就发送大量的数据,仍然可能引发问题。
因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵。在不清楚当前网络状态下,贸然发送大量的数据,是很有可能引起雪上加霜的。
TCP 引入慢启动机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据。

一个主机缓解不了网络拥塞,但是一群主机就可以缓解了!

看下图分析:

慢启动

TCP 启动时,拥塞窗口(cwnd)初始值通常为 1 ,慢启动阈值(ssthresh)等于窗口最大值(如初始值为 16 ) 。在慢开始阶段,cwnd 按指数规律增长。每收到一个确认应答,cwnd 就增加 1 。这使得发送方发送的数据量迅速增加,网络吞吐量逐渐上升。例如,从传输轮次 0 开始,cwnd 从 1 逐步增长,快速提升数据发送量。

拥塞避免

当 cwnd 增长到慢启动阈值(如达到 16 )后,进入拥塞避免阶段。此时,cwnd 不再按指数增长,而是采用 “加法增大” 策略,即每收到一个确认应答,cwnd 增加一个较小的固定值(如 1 ) 。这种方式让发送方数据发送量缓慢、平稳增加,防止网络因发送数据量增长过快而拥塞。

网络拥塞处理

若出现大量丢包,判定为网络拥塞。此时采取 “乘法减小” 策略,ssthresh 值变为原来的一半(如从 16 变为 12 ) ,同时 cwnd 置回 1 ,重新进入慢开始阶段。这能迅速降低发送方数据发送量,缓解网络拥塞。少量丢包时,仅触发超时重传,不调整 ssthresh 和 cwnd 。

TCP 拥塞控制机制在追求快速数据传输的同时,平衡网络负载,避免拥塞,就像热恋中把握节奏,既积极又不过度,保障网络通信顺畅。

TCP是面向字节流:

面向字节流:读和写不需要匹配。TCP是面向字节流,UDP面向数据报,udp写一次就得读一次!

粘包问题:说简单就是,不知道一段报文从哪开始到哪结束,从而导致读取报文错误!

TCP异常情况:

当你的进程终止的时候(无论是客户端还是服务端或者两个同时),此时我们应该知道linux下一切皆文件,包括通信。有因为文件的生命周期是随进程的,所以进程终止了,通信也要结束了,此时通信进行正常的四次挥手既可!

TCP/UDP的区别:

TCP 和 UDP 均为传输层协议。TCP 面向连接,靠三次握手建立连接,有确认应答、重传等机制保障可靠传输,开销大,适用于文件传输等对数据准确性要求高场景;UDP 无连接,不保证可靠交付,传输效率高,适合在线视频等实时性要求高、能容忍丢包场景。

TCP中可靠性和效率:

相关文章:

Socket-TCP

在TCP/ip协议中,用源IP、源端口号、目的IP、目的端口号、协议号这样一个五元组来标识一个通信! 端口号范围划分 0 - 1023: 知名端口号,HTTP,FTP,SSH 等这些广为使用的应用层协议,他们的端口号都是固定的。…...

BOSS的收入 - 华为OD机试(A卷,C++题解)

华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 代码不懂有疑问欢迎留言或私我们的VX:code5bug。 题目描述 一个 XX 产品行销总公司,只有一个 boss,其有若干一级分销&…...

神经网络的基本概念与深度解析——基于生物机制的仿生建模与工程实现

广义上讲,神经网络是泛指生物神经网络与人工神经网络这两个方面。所谓生物神经网络是指由中枢神经系统(脑和脊髓)及周围神经系统(感觉神经、运动神经、交感神经、副交感神经等)所构成的错综复杂的神经网络,…...

JavaScript基础-运算符优先级

在JavaScript编程中,理解运算符的优先级是编写正确且高效代码的关键之一。当一个表达式包含多个运算符时,JavaScript会根据运算符的优先级来决定执行顺序。如果不了解这些规则,可能会导致意外的结果。本文将详细介绍JavaScript中的运算符优先…...

【RocketMQ NameServer】- NameServer 启动源码

文章目录 1. 前言2. RocketMQ 通信架构3. NameServer 启动流程3.1 创建 NameServerController3.2 启动 NameServerController3.3 NamesrvController#initialize3.3.1 Netty 通信的整体流程3.3.2 创建 NettyRemotingServer 3.4 this.remotingServer.start()3.4.1 this.remotingS…...

Learning vtkjs之WindowedSincPolyDataFilter

过滤器 模型简化(光滑处理) 介绍 像是对模型进行特征信息的简化(光滑处理) 效果 核心代码 主要流程 const fullScreenRenderer vtkFullScreenRenderWindow.newInstance({background: [0, 0, 0],rootContainer: vtkContainerR…...

C++ - 数据容器之 forward_list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)

一、创建与初始化 引入 <forward_list> 并使用 std 命名空间 #include <forward_list>using namespace std;创建一个空 forward_list forward_list<int> fl;创建一个包含 5 个元素&#xff0c;每个元素初始化为 0 的 forward_list forward_list<int&g…...

ES6/ES11知识点

ES 全称ECMAScript &#xff0c;是脚本语言的规范&#xff0c;javascript是ES的一种实现。 作用域链 在 JavaScript 中&#xff0c;作用域链是一个非常重要的概念&#xff0c;它决定了变量和函数的访问顺序。掌握作用域链有助于深入理解执行上下文、闭包和变量查找等概念。 …...

力扣面试150题--二叉树的最大深度

Day 40 题目描述 做法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right…...

360驱动大师v2.0(含网卡版)驱动工具软件下载及安装教程

1.软件名称&#xff1a;360驱动大师 2.软件版本&#xff1a;2.0 3.软件大小&#xff1a;218 MB 4.安装环境&#xff1a;win7/win10/win11 5.下载地址&#xff1a; https://www.kdocs.cn/l/cdZMwizD2ZL1?RL1MvMTM%3D 提示&#xff1a;先转存后下载&#xff0c;防止资源丢失&…...

Excel-CLI:终端中的轻量级Excel查看器

在数据驱动的今天&#xff0c;Excel 文件处理成为了我们日常工作中不可或缺的一部分。然而&#xff0c;频繁地在图形界面与命令行界面之间切换&#xff0c;不仅效率低下&#xff0c;而且容易出错。现在&#xff0c;有了 Excel-CLI&#xff0c;一款运行在终端中的轻量级Excel查看…...

AI Agent开发第48课-DIFY中利用AI动态判断下一步流程-DIFY调用API、REDIS、LLM

开篇 之前我们在《AI Agent开发第47课-DIFY处理多步流程慢?你确认用对了?》中讲述了DIFY的设计中在整合多步LLM时如避免过多调用LLM的良好设计,并给出了AI工作流的相应设计手法。今天我们要在上一篇的基础上把“上门维修预约”这个流程进一步按照实际业务需求加入用户在整个…...

C# 操作符

C# 操作符 一、操作符概览二、优先级与运算顺序三、各类操作符的实例 一、操作符概览 操作符&#xff08;运算符&#xff09;的本质是函数的简记法 操作符不能脱离与它关联的数据类型 int x 5; int y 4; int z x / y; Console.WriteLine(z);//输出1double a 5.0; double b…...

python下载

一、下载python和IDIE 1.进入python官网 加载可能有点慢&#xff0c;因为是国外网站 下载 点击Downloads按钮&#xff0c;选择版本下载。 安装 勾选两个多选框&#xff0c;点击Install Now安装完成&#xff0c;进入开始菜单&#xff0c;多出一个Python xxx.xxx文件夹&…...

tp5 php获取农历年月日干支甲午

# 切换为国内镜像源 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/# 再次尝试安装 composer require overtrue/chinese-calendar核心写法一个农历转公历&#xff0c;一个公历转农历 农历闰月可能被错误标记&#xff08;例如 闰四月 应表示…...

MySQL安装完全指南:从零开始到配置优化(附避坑指南)

&#x1f525; 前言&#xff1a;为什么你总是装不好MySQL&#xff1f; &#xff08;实话实说&#xff09;每次看到新手在MySQL安装环节疯狂踩坑&#xff0c;老司机都忍不住想摔键盘&#xff01;明明官网下载的安装包&#xff0c;怎么就会报错呢&#xff1f;为什么别人的环境变…...

5.3刷题

P3370 【模板】字符串哈希 #include<bits/stdc.h> using namespace std; #define int long long typedef unsigned long long ull; int n; ull myhash(string s){ull code 0, x 131, y 140814840257324663;for(int i 0; i < s.size(); i){code (code * x (ull)…...

KeyPresser 一款自动化按键工具

1. 简介 KeyPresser 是一款自动化按键工具,它可以与窗口交互,并支持后台运行, 无需保持被控窗口在前台运行。用户可以选择要操作的目标窗口,并通过勾选复选框来控制要发送哪些按键消息。可以从组合框中选择所需的按键,并在编辑框中输入时间间隔以控制按键发送之间的延迟。程…...

# LeetCode 1007 行相等的最少多米诺旋转

LeetCode 1007 行相等的最少多米诺旋转 原题英文&#xff1a;Minimum Domino Rotations For Equal Row 难度&#xff1a;中等 | 标签&#xff1a;数组、贪心 1 题目重述 给定两行长度相同的多米诺骨牌&#xff1a; tops[i] 表示第 i 张骨牌上面的数字&#xff1b;bottoms[…...

【Agent搭建】利用coze平台搭建一个AI销售?

目录 一、关于coze 核心功能 二、搭建属于你自己智能体 备注&#xff1a;&#xff08;以下说明比较需要调整的板块&#xff09; 1、从Prompt工程开始 2、搭建工作流 3、添加知识 三、总结 一、关于coze Coze是字节跳动推出的AI应用开发平台&#xff0c;专注于帮助用户快速…...

Linux系统中安装GitLab

一、安装前准备&#xff1a;确认系统要求&#xff08;新手必看&#xff01;&#xff09; 系统版本&#xff1a;推荐 Ubuntu 20.04 或更高&#xff08;本文以 Ubuntu 22.04 为例&#xff09;。内存要求&#xff1a; 最低&#xff1a;2GB RAM&#xff08;仅建议测试环境&#xf…...

PowerShell安装Chocolatey

文章目录 环境背景安装参考 环境 Windows 11 专业版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具&#xff0c;有点类似于Linux的 yum 和 apt 命令。比如&#xff0c;PowerShell里默认没有 grep 命令&#xff0c;则可以通过…...

UDP / TCP 协议

目录 一、前言&#xff1a; 数据封装与分用&#xff1a; 二、网络协议分层模型&#xff1a; 三、UDP / TCP 协议 UDP 协议&#xff1a; 1、UDP 协议段格式&#xff1a; 2、UDP 的特点&#xff1a; TCP 协议&#xff1a; 1、TCP 协议段格式&#xff1a; 2、TCP 协议的十…...

Coding Practice,48天强训(28)

Topic 1&#xff1a;悠悠的重组数组 游游的重组偶数__牛客网 比较简单的一个题&#xff0c;因为前两天写了快速幂算法&#xff0c;一直想着用进位 &1之类的处理偶数&#xff0c;其实就正常用string装数字遍历%2就行了 #include <bits/stdc.h> using namespace std;…...

第一章 初识SpringMVC

一、什么是MVC MVC是一种软件架构模式&#xff08;是一种软件架构设计思想&#xff0c;不止Java开发中用到&#xff0c;其它语言也需要用到&#xff09;&#xff0c;它将应用分为三块&#xff1a; M&#xff1a;Model&#xff08;模型&#xff09; V&#xff1a;View&#xf…...

虚幻引擎入门笔记

【虚幻5】UE5新手入门尝试 虚幻引擎的基础设置 1.验证-当文件误删的时候&#xff0c;对其进行验证&#xff0c;可以恢复。 2.虚幻引擎极其强大&#xff0c;可以实现多种复合技能&#xff0c;所在创建项目页面可以看见不只是创建游戏的项目 3.更改虚幻引擎默认的缓存地址。有些…...

Oracle 11g通过dg4odbc配置dblink连接神通数据库

1、安装unixodbc 2、安装神通数据库 3、 配置神通数据库odbc数据源&#xff0c;测试连通性 4、配置透明网关、监听文件以及对应编写的hsodbc的ora文件&#xff0c;我这里是initst.ora ##对应编写的hsodbc的ora文件 vim $ORACLE_HOME/hs/admin/initst.ora ##添加如下 HS_FDS_CO…...

2.2 矩阵

考点一&#xff1a;方阵的幂 1. 计算方法 (1) ​找规律法​ ​适用场景​&#xff1a;低阶矩阵或具有周期性规律的矩阵。​示例​&#xff1a; 计算 A ( 0 1 1 0 ) n A \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}^n A(01​10​)n&#xff1a; 当 n n n 为奇…...

Linux《进程概念(下)》

在之前我们已经了解了进程基本的概念、知道了如何去创建子进程&#xff1b;还了解了进程状态、进程切换、进程O(1)调度算法等&#xff0c;那么接下来在本篇当中我们就来学习环境变量和程序地址空间的相关知识&#xff0c;相信通过本篇的学习你会有很大的所获&#xff0c;一起加…...

MySQL 比较运算符详解

&#xff08;1&#xff09;符号类型运算符 运算符名称作用示例等于运算符判断两个值、字符串或表达式是否相等SELECT * FROM users WHERE age 25SELECT name FROM products WHERE category Electronics<>安全等于运算符安全地判断两个值、字符串或表达式是否相等&…...

No qualifying bean of type ‘XXX‘ available

没有某类型的bean可供使用 问题一解决方案错误问题配置类YuApiClientConfig依赖导入测试方法 问题二解决方法问题现场问题解决 问题一 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.transbit.yuapiclientsd…...

手搓一个 MCP Server 实现水质在线数据查询

随着人工智能技术的快速发展,如何将大语言模型(LLM)与实际业务场景结合,提供精准、可控的服务成为一个热门话题。MCP(Model Context Protocol)作为一种开放协议,为应用程序向 LLM 提供标准化的上下文接口,极大地简化了这一过程。本文将以构建一个水质在线查询 MCP 服务…...

neo4j初尝试

neo4j 下载并安装 这里以ubuntu 下载为例 打开neo4j官网,如下图所示&#xff0c;找到下载中心 选择 每个人可以根据自己的系统进行下载。然后解压tar -xf neo4j-community-2025.04.0-unix.tar.gz&#xff0c;如果不出意外的话&#xff0c;这里就可以直接输入命令启动了&#…...

数据分析业务拆解底层思维

业务拆解 分析前要有方法&#xff0c;从用户体验入手&#xff0c;将业务拆解&#xff0c;找到对象以及对象之间的关系。 电商平台卖的不是用户时间&#xff0c;不是流量&#xff0c;而是机会&#xff0c;而作为一个分析师就得分析机会在哪&#xff0c;帮助平台将机会更好的提…...

Linux运维——Vim技巧一

Vim技巧 一、优化重复操作1.1、 . 命令1.2、* 命令1.3、重复修改示例 二、删除单词&#xff08;daw&#xff09;三、对数字做算数运算四、操作符与动作五、插入模式5.1、插入模式下删除5.2、返回普通模式5.3、插入-普通模式5.4、不离开插入模式&#xff0c;粘贴寄存器中的文本5…...

第一节:OpenCV 基础入门-简介与环境搭建

一、OpenCV 是什么&#xff1f;为什么值得学习&#xff1f; OpenCV&#xff08;Open Source Computer Vision Library&#xff09; 是一个开源的计算机视觉和机器学习库&#xff0c;由英特尔实验室于1999年发起&#xff0c;现已成为全球计算机视觉领域最广泛使用的工具之一。它…...

前端面经-VUE3篇(二)--vue3组件知识(一)组件注册、props 与 emits、透传、插槽(Slot)

组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成一个层层嵌套的树状结构&#xff1a; 一、注册 Vue 组件本质上是一个可以复用的 自定义 HTML 元素&#xff0c;为了在其他组件中使用一…...

Python的简单练习

两数的最大公约数 def gcd(a, b):while b ! 0:a, b b, a % breturn a# 示例 a 36 b 60 print(f"{a} 和 {b} 的最大公约数是: {gcd(a, b)}") while b ! 0: while&#xff1a;是 Python 的 循环语句&#xff0c;意思是“当...的时候一直重复做某事”。 b ! 0&am…...

ipvsadm,是一个什么工具?

1. ipvsadm 是什么&#xff1f; ipvsadm&#xff08;IP Virtual Server Administration&#xff09;是 Linux 内核中 IPVS&#xff08;IP Virtual Server&#xff09; 模块的管理工具&#xff0c;用于配置和监控内核级的负载均衡规则。它是 Kubernetes 中 kube-proxy 在 IPVS …...

QT6 源(72):阅读与注释单选框这个类型的按钮 QRadioButton,及各种属性验证,

&#xff08;1&#xff09;按钮间的互斥&#xff1a; &#xff08;2&#xff09;源码来自于头文件 qradiobutton . h &#xff1a; #ifndef QRADIOBUTTON_H #define QRADIOBUTTON_H#include <QtWidgets/qtwidgetsglobal.h> #include <QtWidgets/qabstractbutton.h>…...

Qt 中实现观察者模式(Observer Pattern)

在 Qt 中实现**观察者模式(Observer Pattern)通常利用其内置的信号与槽(Signals & Slots)**机制,这是最符合 Qt 设计哲学的方式。以下是详细实现方法和关键点: —### 1. 观察者模式的核心思想- Subject(被观察者):维护一个观察者列表,在状态变化时通知观察者。- …...

Vue3源码学习5-不使用 `const enum` 的原因

文章目录 前言✅ 什么是 const enum❌ 为什么 Vue 3 不使用 const enum1. &#x1f4e6; **影响构建工具兼容性**2. &#x1f501; **难以做模块间 tree-shaking**3. &#x1f9ea; **调试困难**4. &#x1f4e6; **Vue 是库&#xff0c;不掌控用户配置** ✅ 官方推荐做法&…...

自己部署后端,浏览器显示久久未响应

CIDER地址写错了&#xff0c;应该要写成0.0.0.0/0 。。。。...

【RocketMQ NameServer】- NettyEventExecutor 处理 Netty 事件

文章目录 1. 前言2. NettyEventExecutor 线程3. NettyEvent 是怎么来的4. NettyEventExecutor 线程处理不同事件的逻辑4.1 IDLE\CLOSE\EXCEPTION - onChannelIdle4.2 CONNECT - onChannelConnect 5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 【RocketMQ】- 源码系列目录 上一…...

JAVA刷题记录: 递归,搜索与回溯

专题一 递归 面试题 08.06. 汉诺塔问题 - 力扣&#xff08;LeetCode&#xff09; class Solution {public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {dfs(A, B, C, A.size());}public void dfs(List<Integer> a, List<In…...

【进阶】C# 委托(Delegate)知识点总结归纳

1. 委托的基本概念 定义&#xff1a;委托是一种类型安全的函数指针&#xff0c;用于封装方法&#xff08;静态方法或实例方法&#xff09;。 核心作用&#xff1a;允许将方法作为参数传递&#xff0c;实现回调机制和事件处理。 类型安全&#xff1a;委托在编译时会检查方法签…...

推理能力:五一模型大放送

--->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<--- 近日人工智能领域迎来了一波密集的模型发布潮&#xff0c;多家科技巨头和研究机构相继推出了具有突破性特点的AI模型。这些新模型在参数规模、计算效率、多模态能力以及推理能力等方面都展现出…...

数据库=====

创建数据库 1.直接创建数据库 语法&#xff1a;CREATE DATABASE [IF NOT EXISTS] 数据库名 ——[]表示内部内容可省略 2.指定字符集和排序规则方式创建数据库 语法&#xff1a;CREATE DATABASE[IF NOT EXISTS] 数据库名 CHARACTER SET 字符集 COLLATE 排序规则 示例&#xff1a…...

VITA STANDARDS LIST,VITA 标准清单下载

VITA STANDARDS LIST&#xff0c;VITA 标准清单下载 DesignationTitleAbstractStatusVMEbus Handbook, 4th EditionA users guide to the VME, VME64 and VME64x bus specifications - features over 70 product photos and over 160 circuit diagrams, tables and graphs. The…...

npm pnpm yarn 设置国内镜像

国内镜像 常用的国内镜像&#xff1a; 淘宝镜像 https://registry.npmmirror.com 腾讯云镜像​​ https://mirrors.cloud.tencent.com/npm/ 华为云镜像​​ https://repo.huaweicloud.com/repository/npm/ CNPM&#xff08;阿里系&#xff09; ​​ https://r.cnpmjs.org/ 清华…...