【Linux网络 (二)】套接字编程
Linux: 网络
- 一、前言
- 二、端口号 (port)
- 1)port、套接字概念
- 2)端口号 vs 进程id
- 3)端口号和进程关系
- 三、认识TCP/Udp协议
- 1)连接性解释
- 2)可靠性解释
- 3)面向数据报/字节流解释
- 四、网络字节序
- 五、struct sockaddr类型介绍
- 六、TCP 通信API
- 1)socket()解释
- 2) bind()解释
- 2.1 setsockopt()函数
- 2.2 服务端`struct sockaddr`结构体填充样式
- 3)listen()解释
- 4)accept()解释
- 5)connect()解释
- 6)tcp读写
- 7)Udp通信API
一、前言
本篇文章会介绍端口号、网络字节序等网络编程中的基本概念,以及udp/tcp套接字编程API。
二、端口号 (port)
1)port、套接字概念
网络通信的本质不同主机上的两个进程进行间通信,并且两进程会看到同一块资源——网络。并且我们用ip是用于表示互联网中不同主机的地址;端口号(port)这是用于标识一台主机上的不同进程。所以ip + port
既可以用于标识互联网中的唯一进程,我们也将ip + port
称为套接字!!
2)端口号 vs 进程id
端口号用于标识同一台主机上进程的唯一性,但进程id作用同样如此。那为啥在网络中不复用进程id知识,而是引入端口号呢?
- 其一是为了让网络模块和系统模块进行接藕,减低两者间的耦合度!
- 其二是并不是所有的进程都有通信的需求。而port专用于网络通信!
3)端口号和进程关系
- 一个进程可以绑定多个端口号,但一个端口号不能被多个进程绑定!
三、认识TCP/Udp协议
我们先对TCP和UDP有一个大概的认识,在后面再详细讲解它的协议内容。
TCP协议:
- 传输层协议
- 有连接
- 可靠传输
- 面向字节流
UDP协议:
- 传输层协议
- 没有连接
- 不可靠传输
- 面向数据报
1)连接性解释
tcp在通信前需要先建立连接,也就是大名鼎鼎的3次握手,2次挥手;而UDP通信什么都不用提前做。我们可以将tcp通信比喻成打电话时,我们在通信前需要先获得对方同意,对方同意接你电话;将tcp想象为寄快递,我只需要知道对方地址即可!
2)可靠性解释
tcp是可靠,Udp不可靠。那生活中我们采用tcp就可以了,为啥需要Udp?
原因在于tcp的可靠性是有代价的(数据丢包,超时重传、数据粘包等问题需要处理),而udp认为只要将即数据从传输层发给网络层就认为数据发生成功了,所以tcp通信比udp慢。并且可靠、不可靠描述的是两种协议的特点,并没有谁好谁坏。在当前网络环境中,数据丢包的概率极小。
针对不同的场景,可以选择不同的通信方式。如果对数据可靠性要求高的场景,我们可以采用tcp,比如支付过程。反之采用udp协议,在满足需求的前提下,大大提高通信速度。比如直播,偶尔出现数据丢包,对我们影响不大就可以采用udp协议!
3)面向数据报/字节流解释
面向数据报是指报文之间是有边界的,应用层交给UDP多长的报文,UDP原样发送,既不拆分也不合并。读端每次只读取一个完整报文!
面向字节流是指数据向流水一样,是没有明显边界的。对于读端,读端并不关系写端写了多少次,读到的数据是否完整,而是尽可能将数据全部读取上来交给上层!
四、网络字节序
内存中的多字节数据相对于内存地址有大端和小端之分。这也意味着数据从A主机经网络发给B主机,B主机收到的数据可能是反的。所以网络规定,所有发送到网络中的数据必须是大端!!先发出的数据是低地址,后发出的数据是高地址。
但人为大小端数据转换非常复杂,所以系统也提高了一系列转换接口:
五、struct sockaddr类型介绍
网络通信时,socket有很多类型,主要有如下3种:
- 域间套接字
Unix socket
:主要用于本主机内部通信。域间套接字通过套接字文件来进行通信,进程可以通过打开这个文件来进行读写操作,从而实现通信。 - 网络
socket
:通过ip + port
来进行网络通信。 - 原始
socket
:原始套接字绕过传输层,直接通过网络层进行通信。主要用于编写一些网络工具。
网络中套接字种类很多,理论而言,我们要为每一种套接字设计对应的一套接口。但这无疑加重程序员的负担,为了统一所有套接字API,网络通用地址类型struct sockaddr类型
诞生!!
六、TCP 通信API
1)socket()解释
socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符。应用程序可以像读写文件一样用read/write在网络上收发数据。如果socket()调用出错则返回-1。
domain(协议家族):即socket()函数采用的网络协议种类,在网络通信中一般选择AF_INET
type(套接字类型):对于tcp而言,面向字节流,选择SOCK_STREAM
protocol(协议):通常前面两个参数就明确的通信协议种类,所以一般填0
2) bind()解释
bind 函数用于将一个套接字(socket)与特定的IP地址和端口号关联起来。(将参数sockfd和myaddr绑定在一起, 使sockfd这个用于网络通讯的文件描述符监听myaddr所描述的地址和端口号)
- 对于服务端ip和port是固定的,但我们一般只绑定port,而ip选择任意地址。原因在于一台机器上可能存在多张网卡,即一台主机从多个ip(网卡)读取数据都应该交给上层指定端口(port) 但对于客户端而言,虽然也需要绑定ip+port,但不需要显示绑定。原因在于客户端程序很多,如果直接由用户显示绑定,可能会导致某些时刻端口号冲突,导致一些程序无法正常启动!所以客户端在首次发送信息时,OS会自动绑定。
- bind调用时,如果短时间内重复调用会失败,这和tcp断开连接时会进入
TIME_WAIT
状态有关。我们只需要通过地址复用即可,具体做法如下:
int opt = 1; setsockopt(_listensockfd, SOL_SOCKET, SO_REUSEADDR| SO_REUSEPORT, &opt, sizeof(opt)); // 地址复用
2.1 setsockopt()函数
int setsockopt(int sockfd, int level, int option_name, const void *option_value, socklen_t option_len);
- socockfd:要设置选项的套接字描述符。
- level:指定了选项所在的协议层级。套接字层选
SOL_SOCKET
。 - option_name:设置的选项的名称。主要有两选项:
SO_REUSEADDR
允许地址和端口的复用;SO_REUSEPORT
与 SO_REUSEADDR 类似,但提供了更细粒度的控制。 option_value
需要设置的选项值。option_len
:option_value指针指向的变量长度。
2.2 服务端struct sockaddr
结构体填充样式
3)listen()解释
tcp在通信前需要先建立连接,但服务端如何得知客户端发起了请求开始建立连接呢?所以我们需要通过listen()函数将套接字设置为监听状态!!
listen()声明sockfd处于监听状态, 并且最多允许有backlog个客户端处于连接等待状态, 如果接收到更多的连接请求就忽略。listen()成功返回0,失败返回-1;
4)accept()解释
三次握手完成后, 服务器调用accept()接受连接,并返回一个新的文件描述符! 如果服务器调用accept()时还没有客户端的连接请求,就阻塞等待直到有客户端连接上来。 addr是一个传出参数,accept()返回时传出客户端的地址和端口号;如果给addr 参数传NULL,表示不关心客户端的地址。
如何理解返回一个新的文件描述符:
通过listen()将套接字设置为监听状态,我们可以帮监听套接字理解为饭店外进行拉客的工作人员!他的工作只是将客人拉到字节饭店即可,并不真正提高服务;而是重新叫一名服务员进行招待后,出去重新拉客。
所以监听套接字就好比拉客的工作人员,他只是用于监听等待客户端发起连接。 而返回的新的文件描述符才是真正和客户端进行交互的。后续可客户端和服务端进行网络通信,都是通过新的文件描述符来进行!!
5)connect()解释
客户端需要调用connect()连接服务器;connect和bind的参数形式一致, 区别在于bind的参数是自己的地址, 而connect的参数是对方的地址;!!
connect()成功返回0,出错返回-1。
6)tcp读写
tcp客户端和服务端通信和文件一样,通过read、write
进行!
7)Udp通信API
UDp只需要将建socket文件文件描述符(本质是创建文件细节,将网卡文件打开),然后绑定ip+port即可通信。
UDP通信消息收发通过recvfrom、sendto
完成!
相关文章:
【Linux网络 (二)】套接字编程
Linux: 网络 一、前言二、端口号 (port)1)port、套接字概念2)端口号 vs 进程id3)端口号和进程关系 三、认识TCP/Udp协议1)连接性解释2)可靠性解释3)面向数据报/字节流解释 四、网络字节序五、struct sockad…...
SQL 语句执行计划中的连接方式
SQL 语句执行计划中的连接方式 join操作 join操作基本分为3大类:外连接(细分为:左连接(Left outer join/ left join)、右连接(right outer join/ right join)、全连接(full outer …...
3、集线器、交换机、路由器、ip的关系。
集线器、交换机、路由器三者的关系 1、集线器2、交换机(每个交换机是不同的广播域,ip地址起到划分广播域的作用)3、 路由器4、ip地址 1、集线器 一开始两台电脑通信就需要网线就可以,但是三台或者更多主机通信时,就需…...
OpenCV相机标定与3D重建(3)校正鱼眼镜头畸变的函数calibrate()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::fisheye::calibrate 函数是 OpenCV 中用于校正鱼眼镜头畸变的一个重要函数。该函数通过一系列棋盘格标定板的图像来计算相机的内参矩阵和畸变…...
【论文笔记】LLaVA-KD: A Framework of Distilling Multimodal Large Language Models
Abstract 大语言模型(Large Language Models, LLM)的成功,使得研究者为了统一视觉和语言的理解去探索多模态大预言模型(Multimodal Large Language Models, MLLM)。 但是MLLM庞大的模型和复杂的计算使其很难应用在资源受限的环境,小型MLLM(s-MLLM)的表现…...
C++内存管理和模板
文章目录 1. C内存管理1.1 new1.1.1 内置类型1.1.2 自定义类型1.1.3 定位new表达式1.1.4 new的优势与不足1.1.5 new的原理 1.2 delete1.2.1 内置类型1.2.2 自定义类1.2.3 delete和free1.2.4 delete原理 1.3 new和delete的对应1.3.1 内置类型1.3.2 自定义类型 2. 模板2.1 函数模…...
Docker 容器化开发 应用
Docker 常用命令 存储 - 目录挂载 存储 卷映射 自定义网络 Docker Compose语法 Dockerfile - 制作镜像 镜像分层机制 完结...
element-plus教程:Input Number 数字输入框
一、基础用法 要使用Input Number数字输入框,只需要在<el-input-number>元素中使用v-model绑定变量即可。例如: <template><el-input-number v-model"value" /> </template><script lang"ts" setup>…...
【Go语言成长之路】编写web应用
文章目录 编写Web应用一、介绍二、创建项目2.1 创建wiki数据结构2.2 介绍net/http包(小插曲)2.3 使用 net/http 提供 wiki 页面2.4 编辑Pages2.5 html/template包2.6 处理不存在的页面2.7 保存页面2.8 错误处理2.9 模板缓存2.10 验证2.11 函数文字和闭包…...
Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化
1. 对象在内存中的布局分为三块区域: (1)对象头(Mark Word、元数据指针和数组长度) 对象头:在32位虚拟机中,1个机器码等于4字节,也就是32bit,在64位虚拟机中࿰…...
安宝特分享 | 如何利用AR技术革新医疗实践:从远程急救到多学科协作
AR技术在国内外医院的应用 在现代医疗环境中,患者面临的挑战依然严峻:看病难、看病远、看病急。这些问题不仅影响了患者的治疗效果,也让医务工作者倍感压力。幸运的是,随着增强现实(AR)技术的发展…...
小米note pro一代(leo)线刷、twrp、magisk、TODO: android源码编译
本文主要说android5 整体思路 android 5.1 twrp magisk Zygisk(Riru) Dreamland(xposed) Riru不支持android5.1, 因此只能选择Zygisk : 如果你正在使用 Android 5,你必须使用 Zygisk 因为 Riru 并不支持 Android 5. 基于magisk之上的xposed 其中提到的 作者…...
vue2-基础核心
vue简介 动态构建用户界面的渐进式 JavaScript 框架 vue的特点: 遵循MVVM模式 采用组件化模式,提高代码复用率,让代码更好维护 声明式编码,无需直接操作DOM,提高开发效率,编码简洁、体积小,运行效率高 本…...
使用 前端技术 创建 QR 码生成器 API1
前言 QR码(Quick Response Code)是一种二维码,于1994年开发。它能快速存储和识别数据,包含黑白方块图案,常用于扫描获取信息。QR码具有高容错性和快速读取的优点,广泛应用于广告、支付、物流等领域。通过扫…...
天云数据参编行业标准|《Maas模型服务协议要求》标准正式发布
随着各行业对大模型的应用需求日益增多,模型即服务(MaaS)发展迅速,MaaS将AI模型以服务的方式提供给用户,降低模型使用门槛。当前产业界已推出诸多MaaS产品,并集成和提供了大量模型服务,然而对于…...
观察者模式和订阅模式
观察者模式和订阅模式在概念上是相似的,它们都涉及到一个对象(通常称为“主题”或“发布者”)和多个依赖对象(称为“观察者”或“订阅者”)之间的关系。然而,尽管它们有相似之处,但在某些方面也…...
Mac设置java环境变量
Mac电脑中存在多个jdk版本,如何配置java环境变量为指定版本jdk? 一、查看所有已安装的 JDK 版本 /usr/libexec/java_home -V二、临时设置 export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)三、永久设置 如果需要永久使用指定版...
Sentinel服务保护
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站: home | Sentinel Sentinel 的使用可以分为两个部分: 核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以…...
Linux内核USB2.0驱动框架分析--USB包
一, 包的组成 每个包都由SOP(包起始域)、SYNC(同步域)、Packet Content(包内容)、EOP(包结束域)四部分组成,其中SOP、SYNC、EOP为所有包共有的域,…...
SpringCloud Gateway转发请求到同一个服务的不同端口
SpringCloud Gateway默认不支持将请求路由到一个服务的多个端口 本文将结合Gateway的处理流程,提供一些解决思路 需求背景 公司有一个IM项目,对外暴露了两个端口8081和8082,8081是springboot启动使用的端口,对外提供一些http接口…...
win10局域网加密共享设置
1、创建共享账户 我的电脑右键选择管理 选择本地用户和组 -> 用户 双击用户 在空白区域右键,新建用户 然后创建用户 点击创建后 2、设置网络 右下角网络右键...
论文阅读——Performance Evaluation of Passive Tag to Tag Communications(一)
文章目录 摘要一、互耦对监听器标签输入阻抗的影响A. 无限细偶极子互阻抗的理论研究B. 电细偶极子的情况:理论与模拟C. 印刷偶极子的情况:电磁模拟与测量 二、T2T 通信系统的性能评估总结 论文来源:https://ieeexplore.ieee.org/document/970…...
Docker Registry(镜像仓库)详解
Docker Registry(镜像仓库)详解 Docker Registry,即Docker镜像仓库,是Docker生态系统中一个至关重要的组件。它负责存储、管理和分发Docker镜像,为Docker容器提供镜像资源。本文将深入探讨Docker Registry的功能、结构…...
17. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--主币种设置
记账模块是我们项目的核心模块,也是用户使用最多的模块,因此这个模块的东西比较多,我们要分为多个部分编写代码。 一、需求 币种设置的需求涉及到了我们前面编写的代码,我们来具体看一下需求。 编号需求说明1主币种设置1. 用户…...
ChatPaper.ai:通过阅读文献高效学习英语的新思路
前言 作为一名学习者,我们常常会遇到这样的困境:想提高英语水平,但单纯背单词缺乏语境;想读专业文献,却被英语障碍所困扰。今天我要分享一个工具 ChatPaper.ai,它让我找到了将英语学习和专业阅读完美结合的…...
.NET9 - 新功能体验(二)
书接上回,我们继续来聊聊.NET9和C#13带来的新变化。 01、新的泛型约束 allows ref struct 这是在 C# 13 中,引入的一项新的泛型约束功能,允许对泛型类型参数应用 ref struct 约束。 可能这样说不够直观,简单来说就是Span、ReadO…...
探索Python PDF处理的奥秘:pdfrw库揭秘
文章目录 探索Python PDF处理的奥秘:pdfrw库揭秘1. 背景:为何选择pdfrw?2. pdfrw是什么?3. 如何安装pdfrw?4. 五个简单的库函数使用方法4.1 读取PDF信息4.2 修改PDF元数据4.3 旋转PDF页面4.4 提取PDF中的图片4.5 合并P…...
网络爬虫——爬虫项目案例
本节将全面讲解如何通过实战爬虫项目解决复杂问题。结合最新技术和实际开发需求,案例将涵盖完整开发流程,包括需求分析、实现代码、优化方法和常见问题解决。力求实现高效、可扩展的爬虫项目架构,帮助开发者提升实战能力。 案例 1:…...
JAVA中的Lamda表达式
JAVA中的Lamda表达式 Lambda 表达式的语法使用场景示例代码1.代替匿名内部类2. 带参数的 Lambda 表达式3. 与集合框架结合使用4. 使用 Stream 操作 总结 Java 的 Lambda 表达式是 Java 8 引入的一个新特性,用于简化代码,特别是在处理函数式编程时。Lambd…...
经典游戏:飞机大战游戏python设计与实现
《飞机大战》是一款经典的二维飞行射击游戏,其核心玩法是控制玩家飞机与敌机作战,通过击落敌机获取分数并尽量避免被敌机击中。根据提供的代码,飞机大战的设计和实现可以分为以下几个主要部分:游戏初始化、游戏界面设计、玩家控制…...
网络爬虫——常见问题与调试技巧
在开发网络爬虫的过程中,开发者常常会遇到各种问题,例如网页加载失败、数据提取错误、反爬机制限制等。以下内容将结合实际经验和技术方案,详细介绍解决常见错误的方法,以及如何高效调试和优化爬虫代码。 1. 爬虫过程中常见的错误…...
深入理解TensorFlow中的形状处理函数
摘要 在深度学习模型的构建过程中,张量(Tensor)的形状管理是一项至关重要的任务。特别是在使用TensorFlow等框架时,确保张量的形状符合预期是保证模型正确运行的基础。本文将详细介绍几个常用的形状处理函数,包括get_…...
macOS 无法安装第三方app,启用任何来源的方法
升级新版本 MacOS 后,安装下载的软件时,不能在 ”安全性与隐私” 中找不到 ”任何来源” 选项。 1. 允许展示任何来源 点击 启动器 (Launchpad) – 其他 (Other) – 终端 (Terminal): 打开终端后,输入以下代码回车: …...
Leetcode148. 排序链表(HOT100)
链接 我写的错误代码: class Solution { public:ListNode* sortList(ListNode* head) {if (!head || !head->next)return head;ListNode* fast head;ListNode* slow head;while (fast&&fast->next) {fast fast->next->next;slow slow->…...
Linux线程_线程互斥_线程同步
一.线程互斥 1.进程线程间的互斥相关概念 临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区&…...
【Spiffo】环境配置:VScode+Windows开发环境
摘要: 在Linux下直接开发有时候不习惯快捷键和操作逻辑,用Windows的话其插件和工具都更齐全、方便,所以配置一个Windows的开发环境能一定程度提升效率。 思路: 自己本地网络内远程连接自己的虚拟机(假定用的是虚拟机…...
DevExpress控件 基本使用
DevExpress控件 一、DevExpress简介 1、所有编辑器的公共功能 全部都可以绑定数据; 全部都可以独立使用或用于由 Developer Express 提供的容器控件 (XtraGrid、XtraVerticalGrid、XtraTreeList 和 XtraBars) 内的内置编辑; 全部都使用相同的样式、外…...
设计模式——装饰器模式
装饰器模式是结构型设计模式,在Python中有一个非常著名的装饰器wrapper,它的实现方法就是使用了该设计模式,装饰器可以修饰类也可以修饰函数。 从类的设计上说,他的本质是在不定义子类的情况下动态的给对象添加一些额外的功能。举…...
【编程题目】列表、元组及集合
一.列表的题目 题目1:列表反转与排序 描述:给定一个整数列表,首先反转该列表,然后对其进行升序排序。最后输出处理后的列表。输入:一个整数列表,例如 [3, 1, 4, 1, 5, 9]输出:处理后的列表,例如 [1, 1, 3, 4, 5, 9]示例:input_list = [3, 1, 4, 1, 5, 9] # 你的代码 …...
【大数据学习 | Spark-Core】RDD的缓存(cache and checkpoint)
1. 单应用缓存:cache 1.1 cache算子 cache算子能够缓存中间结果数据到各个executor中,后续的任务如果需要这部分数据就可以直接使用避免大量的重复执行和运算。 rdd 存储级别中默认使用的算子cache算子,cache算子的底层调用的是persist算子…...
自主研发,基于PHP+ vue2+element+ laravel8+ mysql5.7+ vscode开发的不良事件管理系统源码,不良事件管理系统源码
不良事件上报系统源码,不良事件管理系统源码,PHP源码 不良事件上报系统通过 “事前的人员知识培训管理和制度落地促进”、“事中的事件上报和跟进处理”、 以及 “事后的原因分析和工作持续优化”,结合预存上百套已正在使用的模板࿰…...
哈希表理解与底层模拟实现
内容摘要 本文内容包括红黑树和哈希表的性能比较逻辑分析及实现、哈希表的概念、哈希表映射关系建立的最常用的两种方法直接地址法和除留余数法介绍、介绍了哈希冲突的原因以及解决解决哈希冲突的方法、负载因子的概念、哈希表的扩容、开散列实现哈希表的思路及代码实现、闭散列…...
docker compose的安装和使用
1. Docker Compose 简介 Docker Compose 是一个工具,用于定义和运行多容器的 Docker 应用。通过编写一个 docker-compose.yml 文件,可以一次性启动所有容器,并且方便管理容器之间的依赖。 2. 安装 Docker Compose 前提条件 确保已安装 Do…...
17种Kubernetes安全检测工具详解
随着Kubernetes的广泛应用,确保其安全性就显得尤为重要。好在现有很多优秀的安全检测工具,可以帮助我们发现和修复Kubernetes集群中的安全隐患。本文将全面介绍17种常用的Kubernetes安全检测工具。 Kube-benchKube-hunterKubesec.ioTrivyKube-auditKube-secKube-vulnkube-scana…...
Python遥感开发之CGCS2000转换WGS84地理坐标系
Python遥感开发之CGCS2000转换WGS84地理坐标系 1 CGC2000坐标系介绍2 WGS84地理坐标系介绍3 代码实现CGCS2000转换WGS84地理坐标系 前言:主要借助pyproj实现从CGCS2000高斯-克吕格3度带(EPSG:4547)转换到WGS84地理坐标系(EPSG:432…...
FAX动作文件优化脚本(MAX清理多余关键帧插件)
大较好,为大家介绍一个节省FBX容量的插件!只保留有用的动画轴向,其他不参与动画运动的清除! 一.插件目的:: 1.我们使用的U3D引擎产生的游戏资源包容量太大,故全方位优化动画资源; 2.在max曲线编辑器内,点取轴向太过麻烦,费事,直观清除帧大大提高效率。 如: 二:…...
Springboot集成ElasticSearch实现minio文件内容全文检索
一、docker安装Elasticsearch (1)springboot和Elasticsearch的版本对应关系如下,请看版本对应: 注意安装对应版本,否则可能会出现一些未知的错误。 (2)拉取镜像 docker pull elasticsearch:7…...
Python 中的 | 符号
Python 中的 | 符号 正文用法 1用法2 正文 今天遇到了一个符号 |,本文将对符号 | 的意思进行说明。 x: int 1 print(x) # 1上述代码中,:int 表示的是注释内容,这个在 python 中的注释 一文中我们已经进行了说明。 用法 1 有些时候我们会…...
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务 IDS入侵检测系统 Intrusion Detection System 安全检测系统,通过监控网络流量、系统日志等信息,来检测系统中的安全漏洞、异常行为和入侵行为。 分为&am…...
记录elasticsearch-analysis-dynamic-synonym从8.15.0升级到8.16.0所遇到的问题
记录elasticsearch-analysis-dynamic-synonym从8.15.0升级到8.16.0所遇到的问题 一、打包步骤 步骤一、linux系统下执行elasticsearch-module中的build.sh脚本 步骤二、maven环境下elasticsearch-cluster-runner执行maven install命令安装到本地maven仓库。 步骤三、修改版…...