【网络篇】TCP vs UDP底层区别+网络编程概念
大家好呀
我是浪前
今天讲解的是网络篇的第三章:网络编程概念和TCP&UDP的区别
网络编程概念+TCP和UDP的区别
- 跨主机通信:
- 网络编程
- 插座:
- 网络编程的本质:
- 网络编程的重要概念:
- 客户端和服务器:
- 客户端和服务器的交互模式
- TCP 和UDP的区别
大家好呀,我们今天继续来学习网络篇
网络篇的前两篇博客主要是进行了网络初识,主要介绍了网络的基本概念和背景流程
接下来的章节会重点介绍网络编程:
也就是去实际地编写代码,通过代码来完成基于网络的跨主机通信
跨主机通信:
实现跨主机通信有很多的方式,如下所示:
- TCP/IP网络
- 蓝牙通信
- 近场通信(NFC)
- 毫米波通信
- 等等
而TCP/IP网络是我们日常编程中最容易涉及到的最通用的跨主机通信的方式
蓝牙通信的方式特点:功耗低,待机时间长,效率也低
近场通信(NFC): 需要在现实中贴的很近才可以
毫米波通信: 功率较高,带宽也高,抗干扰能力差
所以我们下面就直接来学习TCP/IP的跨主机通信方式吧~
网络编程
网络编程的定义就是:通过网络,让两个主机之间能够进行通信,基于这样的通信来完成一定的功能
插座:
注意:需要一组插座才可以完成网络编程:
插座的定义:
进行网络编程的时候,需要操作系统提供一组API,通过这些API才能完成网络编程
API就是应用层和传输层之间交互的路径
这一组API就称作“Socket API”,也就是叫做插座。
通过这一套Socket API 就可以解决不同主机之间,不同系统之间的网络通信了
在传输层这一层里面提供的网络协议,主要是TCP和UDP协议,
而TCP和UDP这两个协议的工作原理和特性差别很大,导致使用了这两个协议进行的网络编程也存在一定的差别,所以系统就提供了两套Socket API
TCP有一套Socket API ,UDP也有一套Socket API
网络编程的本质:
网络编程的本质就是学习传输层给应用层提供的API就可以写网络编程的代码,通过代码把数据交给传输层,进一步通过层层封装,就可以把数据通过网卡发送出去了
我们要学习的不仅仅是API,也要学习网络程序的基本工作流程
后端开发:就是服务器上的程序开发
而服务器就会涉及到大量的网络通信
虽然实际开发中使用的是一些框架,比如Spring
不会直接用到系统原生的API,但是框架的背后,也是封装了系统API来实现网络通信的
只要我们掌握了这些基础API,就可以更好地理解框架的工作流程,也可以拥有自己去实现框架/魔改框架的能力,然后搭配上数据结构和算法能力才是未来的核心竞争力,而不是学会了什么特别高大上的流行框架:
如下图所示,一图胜千言~
![[表情包.gif]]
网络编程的重要概念:
客户端和服务器:
客户端 vs 服务器
客户端的定义:
客户端就是在网络中,主动发起通信的一方,就是客户端
服务器的定义:
服务器就是被动接受的一方
客户端和服务器的角色不是固定不变的~
同一个程序在不同的场景中,可能是客户端,也可能是服务器
举一个大家都喜欢听的例子:
在少男少女谈恋爱的过程中:一般是男生追求女生,
但是如果一直是男生单方面努力,全靠男生主动,这个恋爱大概率不可能谈成,男生要么追不上,要么即使最后费尽千辛万苦才谈上,但是这个感情也难以长久
那么恋爱的正确打开方式是什么呢?
正常情况一般是男生主动了一段时间之后,女生也能够主动,也就是女生也有积极的回应男生的追求,这样后面感情才会长长久久
给大家支一个小妙招~
当你的女朋友给你发消息,说肚子疼,最近不舒服的时候,你千万不要回复“多喝热水/岩浆”这样的废话,记住这句话
Talk is cheaper, show me the action
你先不要急着回复消息,如果你们是同校,那么你立即去买好热好红糖水和布洛芬,然后走到她的宿舍楼下,叫她下来拿…
如果你们是异地,你可以立马在美团买药的购物车里面加满布洛芬+红糖水的商品,然后配送到她的地点,到了之后直接call她电话,告诉她去拿药…
切实的行动胜过千言万语~
好啦,今天的恋爱小课堂就结束啦,我们拉回正题
所以程序在网络中的角色是可以发生改变的,主动的时候就是客户端,被动的时候就是服务器
请求(request):
请求的定义:客户端给服务器发送的数据称为 “请求”
响应(response):
响应的定义:服务器给客户端返回的数据称为“响应”
客户端和服务器的交互模式
客户端和服务器一共有四种交互模式:
- 一问一答
- 一问多答
- 多问一答
- 多问多答
我们分别来介绍:
1: 一问一答:
一个请求对应一个响应,一对一
在后续的网站开发(web开发)中都是这种一问一答的交互形式
如下图所示;
2: 一问多答:
客户端的一个请求对应了服务器的多个响应
使用场景: 适用于下载的场景,当你要下载一个大的文件时,此时客户端发送这个下载任务请求的时候,服务器就分成了多个响应
3: 多问一答:
客户端的多个请求只对应了一个服务器的响应
使用场景:上传
4: 多问多答:
一个请求可能对应多个响应
一个响应也可能对应多个请求
这个场景主要涉及到“远程控制/远程桌面”
我们进行的鼠标键盘操作,都会作为一个个请求发送出去
我们看到的一个个画面都对应了一个个响应
想要进行网络编程,需要使用系统的API,这个API本质上是传输层提供的
传输层涉及到的协议主要有两种: 一个是TCP 一个是UDP
由于这两个协议之间的差异还是很大的,所以TCP和UDP的API各不相同
TCP 和UDP的区别
TCP和UDP这两种协议的特性(工作原理) 差异很大,导致使用这两种协议进行网络编程,也存在一定的差别,系统就分别提供了两套API
TCP和UDP的区别:
- TCP是有连接的,UDP是无连接的
- TCP是可靠传输的,UDP是不可靠传输的
- TCP是面向字节流的,UDP是面向数据报的
- TCP和UDP都是全双工的
TCP是有连接的,UDP是无连接的
这里的连接是抽象的概念:不是物理上的连接,而是彼此保留了对方的关键信息
计算机中这种抽象的连接是很常见的
此处的连接本质上就是建立连接的双方,各自保存对方的信息,连接的特点是双方都认同
只要通信的双方都记录了对方的关键信息,此时连接就建立好了
TCP要想通信必须先建立连接,即要先保留对方的关键信息,连接建立好了之后,才能进行后续的通信
但是:如果A想和B建立连接,但是B不愿意,那么连接就会失败
连接的本质就是各自保存对方的相关信息
举一个例子~
小坤同学给小纪同学打电话,小纪同学接通了,这个连接才成功,如果小纪同学没有接,那么连接失败
这个连接是如何实现的?
在客户端中,有一些数据结构记录了谁是小坤同学的服务器
在服务器中,有一些数据结构记录了谁是小坤同学的客户端
在这个数据结构中,可以保存很多的信息,所以一个客户端可以保存很多的服务器,一个服务器也可以保存很多的客户端
TCP是有连接的,UDP是无连接的
UDP不需要进行连接,UDP想要进行通信,就直接发送数据即可,不需要征得对方的同意,UDP自身也不会保存对方的信息
虽然UDP不知道对方的信息,但是写程序的人得知道,UDP自己不会保存,但是程序员调用UDP的socket api的时候要把对方的位置作为参数给传过去
TCP会先去保存对方的关键信息,然后再进行连接
UDP是不会去保存对方的信息,直接进行的通信
TCP是可靠传输,UDP是不可靠传输
在网络上存在的“异常情况“非常多,无论使用什么样的软硬件技术手段,都没有办法100%保证网络数据能够从A一定传输到B
网络上进行通信,A -> B 发送一个消息,这个消息也不可能做到百分之百送达的
再牛逼的技术也比不过挖掘机的一铲子
无线通信技术的手段,当然很厉害,但是传输的效率也比不过有线的
无线受到环境干扰的因素更加多了
TCP的可靠传输是退而求其次,可靠传输不是100%送达,
而是如果A给B发送消息,消息是否会真的送达到B ,
A是知道的,即A会知道消息是发送失败还是发送成功,
如果发送失败,那么A就可以在发送失败的时候采取一定的措施(尝试重传之类的)
所以可靠传输指的是: A在发送消息之后,A能够知道是发送成功还是发送失败
在TCP中就内置了可靠传输机制
在UDP中就没有内置可靠传输机制
为什么UDP不内置这个可靠传输机制呢?
因为这个可靠传输虽然很好,但是也还是要付出代价的
可靠传输是要去付出代价来交换的
做任何事情都是要付出代价的
如果内置了可靠传输机制,那么会导致:
- 机制更加复杂
- 传输效率会降低
TCP内置了可靠传输机制之后,在发送数据之后可以知道是否发送成功
UDP没有内置可靠传输机制,在发送数据之后不知道是否发送成功
TCP是面向字节流的,UDP是面向数据报的
此处的字节流和文件操作中的字节流是一个意思
TCP也是文件操作一样,以字节为单位来进行传输的
UDP则是按照数据报为单位来进行传输的,每次传输的基本单位是一个数据报
这个数据报是由一系列的字节构成的特定的结构
UDP数据报是有一个严格的格式的,一次只能传输一个完整的数据报,不可以只传输半个数据报
网络通信数据的基本单位,涉及到多种说法:
- 数据报(Datagram)
- 数据包(Packet)
- 数据帧(Frame)
- 数据段(Segment)
TCP和UDP都是全双工的
什么是全双工?
一个信道,允许双向通信,就是全双工
一个信道,只能单向通信,就是半双工
代码中使用一个Socket对象,就可以发送数据也能够接收数据,这个就是全双工
操作系统提供的网络编程的API 叫做“socket api”,意为插头,插座
相当于代码中使用一个Socket对象,就可以发送数据也能够接受数据:
一个网线里面是有8根线,这个8根线分为两组,4个一组,每一组都可以完成一个完成的通信过程)
分为两组就是为了防止万一其中的一根线坏了,那么另一组也可以正常地工作
这个一组中的4根线,有的负责上传,有的负责下载,这里的全双工就是靠着多根线来完成的
相关文章:
【网络篇】TCP vs UDP底层区别+网络编程概念
大家好呀 我是浪前 今天讲解的是网络篇的第三章:网络编程概念和TCP&UDP的区别 网络编程概念TCP和UDP的区别 跨主机通信:网络编程插座:网络编程的本质: 网络编程的重要概念:客户端和服务器: 客户端和服务器的交互模…...
如何保存服务器mysql数据库的数据到本地文件
打开mysql命令行如图1 图1 mysql命令行 修改文件保存路径。 在mysql安装目录下,找到my.ini文件,找到secure-file-priv变量配置的地方,修改对应的值,然后重启mysql,此时把文件放到指定路径,再执行导入导出…...
Flutter学习 滚动组件(2):ListView进阶使用
目录 前言:一、实现复杂的ListView列表:1.1 Item布局封装1.2 ListView的使用1.3 增加分割线 二、实现ListView下拉刷新:三、实现上拉加载更多:四、实现下拉刷新、上拉加载更多:五、ListView滚动方向和控制:…...
linux oracle 19c 静默安装
oracle数据库有个比较很抓瞎的事情,不同的版本搭建的大致流程是一样的,但是在实操细节上会有不同,比如操作的脚本位置和配置项等等,这些会变,所以需要时常积累不同版本的文档 这里有一点要说明,之所以使用…...
中间件--ClickHouse-11--部署示例(Linux宿主机部署,Docker容器部署)
一、Linux宿主机部署 1、环境准备 操作系统:推荐使用 CentOS 7/8 或 Ubuntu 18.04/20.04。硬件要求: 至少 2 核 CPU 和 4GB 内存。足够的磁盘空间(根据数据量评估)。CPU需支持SSE4.2指令集(可通过以下命令检查&#…...
AI调试工具有哪些?
一、深度学习框架专用调试工具 TensorBoard • 功能:实时监控训练指标(损失值、准确率)、可视化神经网络结构、分析参数分布和梯度信息 • 适用框架:TensorFlow、PyTorch(通过插件) • 特点:支持…...
Warcraft Logs [Classic] [WCL] BOSS ID query
Warcraft Logs [Classic] [WCL] BOSS ID query 所有副本BOSSID查询 https://wowpedia.fandom.com/wiki/DungeonEncounterID#Retail IDNameMapInstanceIDPatch227High Interrogator GerstahnBlackrock Depths230228Lord RoccorBlackrock Depths230229Houndmaster GrebmarBlackro…...
MySQL——事务
一、什么是事务? 事务(Transaction) 是数据库操作的最小逻辑单元,它由一组不可分割的SQL操作组成。事务的核心目标是确保多个操作要么全部成功,要么全部失败,从而维护数据的完整性。例如,银行转…...
spring Ai---向量知识库(一)
在一些垂直领域以及公司内部信息相关或者实时性相关的大模型应用,就无法直接使用chatGPT。 这个时候,向量知识库就进入了。 通过坐标向量最接近的即为匹配相关答案。 向量模型定义:将文档向量化,保证内容越相似的文本,…...
MACOS 上的 快捷指令怎么用,有哪些分享资源可以用
一、快捷指令的基本概念与历史 快捷指令(Shortcuts)是苹果生态中的自动化工具,最初以第三方应用Workflow(2014年推出)的形式出现,2017年被苹果收购后更名为Shortcuts,并深度集成到iOS、iPadOS和macOS系统中。从macOS Mojave(10.14)开始,快捷指令正式登陆Mac平台,并…...
最长子序列长度(LIS)--个数遍历的二分+贪心优化
B3637 最长上升子序列 - 洛谷 #include<bits/stdc.h> #include<string> using namespace std; #define N 100011 typedef long long ll; typedef pair<int,int> pii; int n; int g[N]; int dp[N]; int ma0; int main() { cin>>n; memset(g,0x3f,sizeo…...
RenderStage::runCameraSetUp
文章目录 RTTosg::Camera::_bufferAttachmentMapRenderStage::BufferComponent和RenderStage::_bufferAttachmentMapCamera::attach(BufferComponent buffer, GLenum internalFormat)Camera::attach(BufferComponent buffer, osg::Texture* texture.....Camera::attach(BufferC…...
突破速率瓶颈:毫米波技术如何推动 5G 网络迈向极限?
突破速率瓶颈:毫米波技术如何推动 5G 网络迈向极限? 引言 5G 网络的普及,已经让我们告别了“加载中”时代,实现了更快的数据传输、更低的延迟和更高的设备连接密度。而在 5G 技术的核心中,毫米波(mmWave&…...
前端面试真题集合(一)
一、Vue的响应式原理 Vue的响应式系统通过数据劫持和依赖追踪实现,核心流程如下: 数据劫持 • Vue 2.x:使用Object.defineProperty递归遍历数据对象,将属性转换为getter/setter,拦截属性的读取和修改操作。 • Vue 3.x:改用Proxy代理对象,支持动态属性添加和数组变化监听…...
聊聊Spring AI Alibaba的ElasticsearchDocumentReader
序 本文主要研究一下Spring AI Alibaba的ElasticsearchDocumentReader ElasticsearchDocumentReader community/document-readers/spring-ai-alibaba-starter-document-reader-elasticsearch/src/main/java/com/alibaba/cloud/ai/document/reader/es/ElasticsearchDocumentR…...
【网络技术_域名解析DNS】三、DNS 中间件实践应用与优化策略
一、DNS 中间件在典型行业的实践应用 1.1 金融行业:保障交易安全与服务稳定 金融行业对网络服务的安全性和稳定性要求极高,DNS 中间件在此领域发挥着不可替代的作用。以某银行线上支付系统为例,在 CentOS 7 环境下部署 DNS 中间件时&…...
Node.js 异步I/O与事件循环深度优化
Node.js 的核心魅力在于其异步、非阻塞I/O模型,这使得它在处理高并发、I/O密集型应用(如Web服务器、API网关、实时通信服务)时表现出色。然而,这种强大的能力并非凭空而来,它深深植根于其独特的**事件循环(…...
npm 常用操作和配置
一、npm 核心操作 1. 初始化项目 npm init # 交互式创建 package.json npm init -y # 跳过提问,直接生成默认 package.json2. 安装依赖 npm install <package> # 安装包到本地 node_modules(生产依赖) npm in…...
嵌入式芯片中的 低功耗模式 内容细讲
电源域与运行级别概述 电源域(Power Domain) 核心域(Core Domain):包括 CPU 核心和关键架构模块(如 NVIC、CPU 内核寄存器)。 外设域(Peripheral Domain):…...
React-请勿在循环或者条件语句中使用hooks
这是React Hooks的首要规则,这是因为React Hooks 是以单向循环链表的形式存储,即是有序的。循环是为了从最后一个节点移到一个节点的时候,只需通过next一步就可以拿到第一个节点,而不需要一层层回溯。React Hooks的执行࿰…...
React-memo (useMemo, useCallback)
在react中,当我们setState之后,若值发生变化,则会重新render当前组件以及其子组件 (默认情况下),在必要的时候,我可使用memo (class组件则对应shouldComponentUpdate、PureComponent)进行优化,来减少无效渲…...
点云数据处理开源C++方案
一、主流开源库对比 库名称特点适用场景开源协议活跃度PCL功能最全,算法丰富科研、工业级应用BSD★★★★★Open3D现代API,支持Python绑定快速开发、深度学习MIT★★★★☆CGAL计算几何算法强大网格处理、高级几何运算GPL/LGPL★★★☆☆PDAL专注于点云…...
android测试依赖
Android 项目中常用的测试相关库 1. androidx.arch.core:core-testing:2.2.0 作用: 提供与 Android Architecture Components(如 LiveData、ViewModel)相关的测试工具。主要用于测试基于 LiveData 的异步操作。 常见功能: 即时…...
Gradle与Idea整合
文章目录 1. Groovy 简介2. Groovy 安装[非必须]3. 在idea中创建java工程 1. Groovy 简介 在某种程度上,Groovy可以被视为Java的一种脚本化改良版,Groovy也是运行在JVM上,它可以很好地与Java代码及其相关库进行交互操作。它是一种成熟的面向对象编程语言…...
【数据结构】励志大厂版·初阶(复习+刷题)单链表
前引:此篇文章作为小编复习的记录,将快速回忆单链表的知识点,讲解单链表增删查找的实现,每个细节之处要注意的地方,解释为何这样设计。文章末尾包含了单链表算法题, 同样解释详细,借助题目再次巩…...
前端面试宝典---参数解构+默认值的面试题
重点要义 对于函数参数要解构,且参数有默认值的,一律用Object.assign的思路去合并参。 看不懂这句话没关系,看下面的例子\ 例子1 function fn ({ x 1, y } { y: 10 }) {console.log(x, y) } fn() // 1 10没有传递实参,你就把{ …...
【开发心得】筑梦上海:项目风云录(16)
目录 代码反面案例 李青与诺基亚的兴衰 并行项目下的利益纠葛与团队协作 未完待续。。。 今天分享的是一个反面案例,也算是一个避坑指南了。 代码反面案例 今天分享的代码是一个反面案例,当时由于项目人员变动频繁,经常是新人看不太懂旧…...
Neovim插件深度解析:mcphub.nvim如何用MCP协议重构开发体验
在AI与工具链深度融合的今天,Neovim 作为现代开发者的生产力工具,正通过插件生态不断突破边界。mcphub.nvim 作为一款基于 MCP(Model Context Protocol) 协议的插件,重新定义了Neovim与智能工具的交互方式。它不仅简化了MCP服务器的集成与管理,更通过直观的UI和生态整合,…...
Qt UDP 通信的详细实现步骤和示例代码
在 Qt 中实现 UDP 通信主要使用 QUdpSocket 类。以下是 UDP 通信的详细实现步骤和示例代码: 一、UDP 通信基础 无连接协议:不需要建立持久连接数据报模式:以独立数据包(datagram)形式发送适用场景:实时性要…...
(二)Trae 配置C++ 编译
Trae配置c编译 零 CMake 编译C0.1 下载安装0.2 安装设置0.3 三种编译方式(见 下文 一 二 三)0.4 调试 (见 下文四) 一 使用MSVC方式编译1.1 安装编译环境1.2安装插件1.3 设置文件 二 使用GCC方式2.1 安装编译环境2.1.1下载:[MinGw](https://gcc-mcf.lhmouse.com/)2.1.2安装:(以…...
动态规划算法的欢乐密码(一):斐波那契数模型
专栏:算法的魔法世界 个人主页:手握风云 目录 一、动态规划 二、例题讲解 2.1. 第 N 个泰波那契数 2.2. 三步问题 2.3. 使用最小花费爬楼梯 2.4. 解码方法 一、动态规划 动态规划是一种将复杂问题分解为更小的子问题,并利用子问题的解来…...
【FreeRTOS进阶】优先级翻转现象详解及解决方案
【FreeRTOS进阶】优先级翻转现象详解及解决方案 接下来我们聊聊优先级翻转这个经典问题。这个问题在实时系统中经常出现,尤其是在任务较多的场景下,而且问题定位起来比较麻烦。 什么是优先级翻转? 优先级翻转的核心定义很简单:…...
解决 IntelliJ IDEA 项目启动时端口冲突问题
1.问题 Description: The Tomcat connector configured to listen on port 8082 failed to start. The port may already be in use or the connector may be misconfigured. Action: Verify the connectors configuration, identify and stop any process thats listening…...
笔试专题(十一)
文章目录 添加字符(暴力枚举)题解代码 城市群数量(dfs)题解代码 判断是不是平衡二叉树(递归)题解代码 最大子矩阵(二维前缀和)题解代码 小葱的01串 (固定区间大小的滑动窗…...
C++11新增语法:列表初始化
前言: 接下来我们将要讲解,相较于c98,c11中新增的语法以及如何使用~。我们首先来讲解:列表初始化。 下文预告:右值引用和移动语义 C98中传统的{} 在c98中的{},仅能初始化数组和结构体 #include<iostrea…...
Linux:基础IO---动静态库
文章目录 1. 动静态库前置知识1.1 动静态库知识回顾1.2 什么是动静态库 2. 动静态库2.1 站在库的制作者的角度2.2 站在库的使用者的角度2.3 动态库是怎么被加载的(原理) 序:上一篇文章我们从认识到理解,从理解到实现场景ÿ…...
从裸仓库到GitLab全解析
Git服务器搭建与使用指南:从裸仓库到GitLab全解析 前言 在团队协作开发中,版本控制系统是必不可少的工具。虽然GitHub提供了优秀的代码托管服务,但企业级项目往往需要更安全的私有化部署方案。本文将手把手教你两种主流的Git服务器搭建方式…...
OzGIS:地理信息分析与处理软件
大家好,今天为大家介绍的软件是OzGIS:一款地理信息分析与处理软件。下面,我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 OzGIS官网网址为:https://ozgis.sourceforge.io/。 OzGIS是一款开源软件&#…...
PHP异常处理__Throwable
在 PHP 里,Throwable 是一个极为关键的接口,自 PHP 7 起被引入。它为错误和异常处理构建了一个统一的框架。下面会详细介绍 Throwable 的相关内容。 1. 基本概念 Throwable 是 Exception 和 Error 的父接口。在 PHP 7 之前,异常(…...
PHP异常处理__Exception类
以下是对 PHP 中 Exception 类的详细解释: 一、Exception 类概述 Exception 是 PHP 中所有异常类的基类。它提供了一个通用的异常处理机制,用于处理程序执行过程中可能出现的错误情况。当程序中出现异常时,可以创建 Exception 的实例并将其…...
C++中动态多态类别浅析
非抽象类继承和虚函数 #include <iostream> using namespace std;class Base { public:virtual void func() { // 虚函数,支持动态绑定cout << "Base::func()" << endl;} };class Derived : public Base { public:void func() overrid…...
游戏引擎学习第234天:实现基数排序
回顾并为今天的内容设定背景 我们今天继续进行排序的相关,虽然基本已经完成了,但还是想收尾一下,让整个流程更完整。其实这次排序只是个借口,主要是想顺便聊一聊一些计算机科学的知识点,这些内容在我们项目中平时不会…...
系分架构论文《论高并发场景的架构设计和开发方法》
系统分析师论文范文系列 【摘要】 2022年8月,我司承接了某知名电商平台“秒杀系统架构优化”项目,我作为系统分析师主导了整体架构设计与技术选型工作。该平台在促销活动中面临瞬时流量超过50万QPS的挑战,原有架构存在数据库崩溃、服务响应延…...
最新得物小程序sign签名加密,请求参数解密,响应数据解密逆向分析
点击精选,出现https://app.dewu.com/api/v1/h5/index/fire/index 这个请求 直接搜索sign的话不容易定位 直接搜newAdvForH5就一个,进去再搜sign,打上断点 可以看到t.params就是没有sign的请求参数, 经过Object(a.default)该函数…...
jangow靶机笔记(Vulnhub)
环境准备: 靶机下载地址: https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova kali地址:192.168.144.128 靶机(jangow)地址:192.168.144.180 一.信息收集 1.主机探测 使用arp-scan进行主机探…...
Spring Boot + Caffeine:打造高性能缓存解决方案
1. 引言 1.1 缓存的重要性 缓存是提升系统性能的关键技术之一,通过将频繁访问的数据存储在内存中,减少对数据库或其他外部系统的访问次数,从而降低延迟并提高吞吐量。 缓存的基本概念:缓存是一种临时存储机制,用于快速访问常用数据。缓存在提升系统性能中的作用:减少数…...
C++入门小馆: 深入string类
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
命令行基础
学习目标 掌握VRP命令行的基础知识 利用VRP命令行进行基本的配置 VRP命令行的基础知识 一、VRP 命令行基本架构 1. 用户视图(User View) 进入方式:设备启动后默认进入,提示符为 <HUAWEI>。功能&#…...
10-DevOps-Jenkins参数化构建实现多版本发布
在之前的Jenkins配置中,固定写死了程序的版本号,实际情况是随着版本的不断迭代,版本号也是不断变化的,版本号由代码仓库(GitLab)设置。 当前Jenkins配置是固定写的1.0,本节我们要把它改成动态的…...
C++游戏服务器开发之⑦redis的使用
目录 1.当前进度 2.守护进程 3.进程监控 4.玩家姓名添加文件 5.文件删除玩家姓名 6.redis安装 7.redis存取命令 8.redis链表存取 9.redis程序结构 10.hiredisAPI使用 11.基于redis查找玩家姓名 12.MAKEFILE编写 13.游戏业务实现总结 1.当前进度 2.守护进程 3.进程监…...