【Linux网络#1】:网络基础知识
1、网络发展
在计算机发展历程中,经历过下面四个阶段:
1.独立模式
独立模式:计算机之间相互独立,每台计算机做自己的事情,彼此之间没有直接信息传递。如果两台计算机需要通信就需要将当前计算机的数据通过某种方式拷贝到另一台计算,如下图所示:
2、网络互联
网络互联:多台计算机连接在一起,完成数据共享。示意图如下:
3.局域网LAN
局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起
4.广域网WAN
广域网WAN:将远隔千里的计算机都连在一起
所谓「局域网」和「广域网」只是一个相对的概念
之所以会逐渐发展为大范围的网络可以理解为主要原因是计算机是人的工具,人要协同工作
2、何为协议
协议」本质上可以理解为一种约定。计算机之间的传输媒介是光信号和电信号。通过「频率」和「强弱」来表示0和1这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式,只有每一方都保证交互的数据格式是相同的,那么此时就可以进行通信。在网络中用于规范这种数据格式的就是网络协议
一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司,下面是常见的标准指定组织:
1.国际标准化组织
- IEEE(电气和电子工程师协会):这是一个由计算机和工程领域专家组成的庞大技术组织,在通信协议领域贡献突出。IEEE制定了全世界电子、电气和计算机科学领域30%左右的标准,包括EEE 802系列标准,这些标准涵盖了从局域网(LAN)到广域网(WAN)等多种网络技术
- ISO(国际标准化组织):ISO是由多个国家的标准化团体组成的国际组织,它在开放系统互连(OS)模型方面的工作尤为著名。OSI模型定义了网络通信的七层协议结构,尽管在实际应用中,TCP/IP协议族更为普遍,但OS模型仍然在学术和理论研究中占有重要地位
- ITU(国际电信联盟):ITU是联合国下属的专门机构,负责制定电信领域的国际标准。ITU-T制定的标准涵盖了电话和网络通信,与ISO合作确保了通信技术的全球兼容性和互操作性
2.区域标准化组织
- ETSI(欧洲电信标准学会):由欧洲共同体各国政府资助,是一个由电信行业的厂商与研究机构参加并从事研究开发到标准制定的组织
- ASTAP(亚洲与泛太平洋电信标准化协会):1998年由日本与韩国发起成立的标准化组织,旨在加强亚洲与太平洋地区各国信息通信基础设施及其相互连接的标准化工作的协作
3.公司
公司:某些公司,如泰凌微,也自研各种标准的软件协议栈,包括低功耗蓝牙、 zigbee、thread及Matter等,并可进行定制化改动,这是其核心竞争力之一。泰凌微还计划重点发展智能电子价签、智能遥控、智能家居等市场。
4.民间国际团体
民间国际团体:IETF(互联网工程师任务组):这是一个负责开发和推广互联网协议(特别是构成TCP/IP协议族的协议)的志愿组织,通过RFC发布新的或者取代老的协议标准
5.官方机构
官方机构:FCC(联邦通信委员会):美国对通信技术的管理的官方机构,主要职责是通过对无线电、电视和有线通信的管理来保护公众利益。也对包括标准化在内的通信产品技术特性进行审查和监督
以上这些组织或公司都能在一定程度上定制协议标准,以满足特定需求或推动技术发展
3、OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器、交换机等。OSI七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,慨念清楚理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。在实际开发中,更关注的是TCP/IP五层(或四层)模型,因为使用范围更广。但是尽管如此,OSI七层模型还是一个很伟大的模型,尽管一些教材中说OSI模型太过于复杂,因为在实际操作的过程中,会话层和表示层是不可能接入到操作系统中的
下面是OSI七层模型的每一层和对应的功能:
4、TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求,下面是每一层的介绍:
- 物理层:负责光电信号的传递方式.比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层
- 数据链路层:负责设备之间的数据帧的传送和识别.例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(outer)工作在网路层
- 传输层:负责两台主机之间的数据传输。如传输控制协议TCP,能够确保数据可靠的从源主机发送到目标主机
- 应用层:负责应用程序间沟通,如简单电子邮件传输SMTP、文件传输协议FTP、网络远程访问协议Telnet等。后续的网络编程也会主要聚焦于应用层
下面是OSI七层模型和TCP/IP五层模型的对比图:
但是实际上,物理层在网络编程中考虑的比较少,所以很多时候称五层模型为四层模型
一般而言对于一台主机来说,它的操作系统内核实现了从传输层到物理层的内容;对于一台路由器,它实现了从网络层到物理层;对于一台交换机,它实现了从数据链路层到物理层;对于集线器,它只实现了物理层
但是,也存在一些其他情况,例如很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(比如端口转发)
5、协议分层
前面在了解介绍操作系统在计算机组成中所处的位置时可以看到一台计算机本质也是分层的,本次在协议部分可以发现不论是OSI模型和TCP/IP模型都是分层的,所以现在的问题是为什么需要分层这个概念
以一个例子为例:
-
定义
协议分层是一种将复杂的通信系统划分为多个逻辑层次的方法。每一层专注于特定的功能,并通过接口与上下层交互,从而实现模块化和简化设计。 -
目的
- 提高系统的可维护性和扩展性。
- 降低复杂性:每层只需关注自己的功能,避免全局设计的复杂性。
- 实现标准化:各层之间有明确的接口和规范,便于不同系统之间的互操作。
-
工作原理
- 数据从高层向低层传递时,每层会在数据中添加头部(有时还包括尾部)信息,这个过程称为“封装”。
- 数据从低层向高层传递时,每层会解析并移除对应的头部信息,这个过程称为“解封装”。
6、网络协议
为什么需要有网络协议&&为什么协议可以分层
即便是单机的计算机内部,其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如:SATA、IDE、SCSl等,只不过不容易感知到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少
其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就得解决问题,所以需要新的协议
以下图为例:
1. 提供统一的通信规则
网络中的设备可能来自不同的厂商,运行不同的操作系统或使用不同的硬件架构。如果没有统一的通信规则,这些设备将无法相互理解或交换信息。
- 比喻 :就像不同国家的人需要一种通用语言(如英语)来交流一样,网络协议为计算机之间的通信提供了“共同的语言”。
- 现实意义 :例如,HTTP 协议定义了浏览器如何向服务器请求网页,服务器如何响应数据。
2. 确保数据传输的可靠性
在复杂的网络环境中,数据可能会丢失、损坏或乱序到达。网络协议通过各种机制确保数据能够正确无误地传输。
- 例子 :
- TCP(传输控制协议) :提供可靠的端到端通信,通过确认机制、重传机制和流量控制来保证数据的完整性。
- IP(网际协议) :负责将数据包从源地址路由到目标地址,即使路径发生变化也能正确送达。
3. 支持异构网络的互操作性
现代网络通常由多种类型的设备和网络技术组成(如以太网、Wi-Fi、光纤网络等)。网络协议屏蔽了底层硬件的差异,使得不同网络能够无缝协作。
- 例子 :
- 路由器 :通过 IP 协议连接局域网和广域网。
- DNS(域名系统) :将人类可读的域名(如 www.example.com)转换为机器可识别的 IP 地址。
4. 提高通信效率
网络协议通过优化数据传输方式,减少不必要的资源浪费,从而提高通信效率。
- 例子 :
- UDP(用户数据报协议) :适用于对速度要求高的场景(如视频流、在线游戏),因为它不进行复杂的确认和重传。
- HTTP/2 和 HTTP/3 :通过多路复用和压缩技术,显著提高了网页加载速度。
5. 支持多样化的应用需求
不同的应用场景对网络通信有不同的需求(如实时性、安全性、可靠性等)。网络协议的设计可以满足这些多样化的需求。
- 例子 :
- 实时通信 :VoIP(语音通话)和视频会议依赖 RTP(实时传输协议)来保证低延迟。
- 安全性 :HTTPS 使用 TLS/SSL 加密协议保护数据隐私。
- 文件传输 :FTP 和 SFTP 提供高效的文件上传和下载功能。
6. 实现分层设计,降低复杂性
网络协议采用分层设计(如 OSI 模型或 TCP/IP 模型),每一层专注于特定的功能。这种模块化设计降低了系统的复杂性,并提高了可维护性和扩展性。
- 例子 :
- 应用层协议(如 HTTP、SMTP)无需关心底层的数据传输细节,只需调用传输层协议(如 TCP)提供的服务即可。
- 如果需要更换底层硬件(如从以太网切换到 Wi-Fi),只需修改物理层和数据链路层,而无需更改上层协议。
7. 解决网络规模扩大的问题
随着网络规模的增长,设备数量和通信量急剧增加。网络协议通过路由、寻址和流量管理等机制,解决了大规模网络中的通信问题。
- 例子 :
- IPv4 和 IPv6 :为每台设备分配唯一的 IP 地址,支持全球范围内的设备互联。
- BGP(边界网关协议) :用于互联网中不同自治系统之间的路由选择。
8. 促进标准化和兼容性
网络协议通常是国际标准(如由 IETF、IEEE 等组织制定),这确保了不同厂商的产品和服务能够兼容,避免了“孤岛效应”。
- 现实意义 :
- 不同品牌的手机、电脑和服务器可以通过 TCP/IP 协议互相通信。
- 各种网络设备(如路由器、交换机)遵循统一的协议规范,使得它们可以协同工作。
有了协议之后就可以进行通信,但是这个协议的设计为什么可以是分层的,从上图中也可以看出,局域网内的计算机之间需要通信需要考虑发送、多个局域网中的计算机之间需要通信该如何找当前计算机需要通信的计算机、又该如何传递信息、信息传递过程之中如果存在信息丢失又该如何解决等问题本质都属于不同层的问题,所以TCP/IP能分层是因为问题可以分层
7、网络协议与操作系统
为什么TCP/IP协议叫这个名字而不是单单的五层模型,这些问题的本质原因就是因为TCP协议和IP协议在整个开发中最关键,以下图为例:
每台计算机都会装有操作系统,如果两个计算机想要通信,就需要通过操作系统,因为操作系统是整个计算机的管理者,但是不同的计算机可能使用的是不同的操作系统,此时就会出现操作系统不同,发送的数据格式就不同。为了解决这个问题,就需要一个标准解决这个问题,也就是说,需要一个网络协议栈规定每一层需要遵守的标准,而在操作系统所在层,在网络协议栈总对应的就是传输层和网络层,这两层使用的协议最主要的分别就是TCP协议和IP协议,因为这两个协议最重要,所以叫TCP/IP协议
所以,到底什么是协议。在上面已经在意思理解层面上做了解释,现在从实际开发层面理解,两台计算机想要通信,就必须要保证数据格式相同,而以为操作系统底层都是相同的语言,所以所谓的数据格式实际上就是一个结构体,这个结构体就是由TCP/IP协议规定的,所以协议其实就是通信双方都认识的结构化的数据类型
8、网络传输基本流程
1、局域网内数据传输流程图
在局域网内,两台计算机可以直接通信,本质就是因为两台计算机可以直接看到彼此,而在局域网内的每台计算机都需要一个唯一标识符,这个标识符称为MAC地址
MAC地址用来识别数据链路层中相连的节点;长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19
)在网卡出厂时就确定了,不能修改,所以MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址)
在Linux下查看一台计算机的MAC地址可以使用下面的命令:
ifconfig
在显示出的结果中,ether
的信息就是MAC地址
在Windows下查看一台计算机的MAC地址可以使用下面的命令:
ipconfig /all
在数据链路层传输数据时就需要使用到MAC帧协议
以下图为例了解同一局域网内的计算机如何进行通信:
以太网中,任何时刻,只允许一台机器向网络中发送数据。如果有多台同时发送,会发生数据干扰,这个数据干扰称为数据碰撞。所有发送数据的主机要进行碰撞检测和碰撞避免。没有交换机的情况下,一个以太网就是一个碰撞域,局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标MAC地址判定。这里可以试着从线程访问共享资源与互斥角度来理解局域网通信原理
下面将视角聚焦于同一局域网内两台正在通信的计算机,以下面的简化图为例:
根据TCP/IP协议,不同层有不同层的协议,所以在上面的数据传递流程中涉及到每一层对数据的封装和解包与分用,如下图所示:
聚焦于一台计算机上的封装过程,如下图所示:
在上图中,报头部分,就是对应协议层的结构体字段,一般叫做报头。除了报头,剩下的叫做有效载荷。而每一层的完整数据被称为报文,所以有报文=报头+有效载荷
但是,不同层对报文的叫法又不尽相同:在传输层叫做段(segment),在网络层叫做数据报(datagram),在数据链路层叫做帧(frame)
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的「上层协议字段」将数据交给对应的上层协议处理
所以,在网络传输的过程中,数据不是直接发送给对方主机的,而是先要发送方自顶向向下将数据交付给下层协议,最后由底层发送,然后由接收方主机的底层来进行接受,在自底向上进行向上交付
对于解包也是类似的过程:
9、网络协议栈与硬件设备的关系
- 内容 :
- 不同网络设备在协议栈中的角色。
- 集线器(Hub):仅工作在物理层,负责信号的转发。
- 交换机(Switch):主要工作在数据链路层,根据 MAC 地址转发帧。
- 路由器(Router):工作在网络层,根据 IP 地址进行路由选择。
- 防火墙(Firewall):通常涉及传输层和应用层,用于安全过滤。
- 操作系统如何实现协议栈的功能(如 Linux 内核中的 TCP/IP 协议栈)。
- 不同网络设备在协议栈中的角色。
- 扩展点 :
- 讨论现代交换机和路由器如何支持更高层的功能(如三层交换机、四层负载均衡器)。
10、路由协议与动态路由
- 内容 :
- 路由表的概念:存储目标网络和下一跳地址的映射关系。
- 静态路由 vs 动态路由:
- 静态路由:手工配置路由表。
- 动态路由:通过路由协议自动学习路由信息。
- 常见的动态路由协议:
- 内部网关协议(IGP):RIP、OSPF、EIGRP。
- 外部网关协议(EGP):BGP。
- 扩展点 :
- OSPF 的链路状态算法与 RIP 的距离矢量算法的对比。
- BGP 在互联网中的核心作用。
相关文章:
【Linux网络#1】:网络基础知识
1、网络发展 在计算机发展历程中,经历过下面四个阶段: 1.独立模式 独立模式:计算机之间相互独立,每台计算机做自己的事情,彼此之间没有直接信息传递。如果两台计算机需要通信就需要将当前计算机的数据通过某种方式拷贝…...
基于物联网的园林防火监测系统
标题:基于物联网的园林防火监测系统 内容:1.摘要 随着全球气候变化和人类活动影响,园林火灾发生频率呈上升趋势,给生态环境和人类生命财产造成巨大损失。为有效预防和应对园林火灾,本文提出基于物联网的园林防火监测系统。该系统综合运用传感…...
华为云loT物联网介绍与使用
🌐 华为云 IoT 物联网平台详解:构建万物互联的智能底座 随着万物互联时代的到来,物联网(IoT)已成为推动数字化转型的关键技术之一。华为云 IoT 平台(IoT Device Access)作为华为云的核心服务之…...
Redis 数据类型全览:特性、场景与操作实例
Redis 是一款开源的内存数据库,支持多种数据类型,以下是对常见 Redis 数据类型的介绍: 1. String(字符串) 描述 字符串是 Redis 里最基础的数据类型,其值可以是简单的字符串、数字,甚至是二进…...
Qt动态库信号崩溃问题解决方案
在Qt中,当动态库向主程序发送信号导致崩溃时,通常涉及线程安全或对象生命周期问题。以下是逐步解决方案: 1. 检查线程上下文 问题:动态库所在的线程与主程序线程不同,跨线程信号未正确处理。解决方案: 显式…...
Go设计模式-观察者模式
简介 在软件开发中,我们常常会遇到这样的场景:一个对象的状态变化需要通知到多个其他对象,让它们做出相应的反应。观察者模式(Observer Pattern)就是解决这类问题的一种设计模式。在 Go 语言中,由于其简洁…...
《TCP/IP详解 卷1:协议》之第七、八章:Ping Traceroute
目录 一、ICMP回显请求和回显应答 1、ICMP回显请求 2、ICMP回显应答 二、ARP高速缓存 三、IP记录路由选项(Record Route,RR) 1、记录路由选项的工作过程 2、RR 选项的 IP 头部格式 2.1、RR 请求 2.2、RR响应 四、ping 的去返路径 五…...
Unity任务系统笔记
数据结构设计 任务基类包括的字段: string 任务内容; Transform 任务目的地; MyCharacter 任务开启后要更新对话的NPC; MyTalkData 任务开启后相关NPC要说的对话数据; 共同方法:开启任务、完成任务。…...
Three.js + React 实战系列-3D 个人主页:构建 Hero 场景组件(项目核心)✨
在本节中,我们将完成整个 3D 主业项目中最核心的组件 —— Hero.jsx。 这个组件作为首页的主视觉部分,整合了 3D 模型、动画相机、交互按钮与自适应布局,构建出一个立体、酷炫、可交互的主场景。 前置准备: ✅安装依赖ÿ…...
线程池(二):深入剖析synchronized关键字的底层原理
线程池(二):深入剖析synchronized关键字的底层原理 线程池(二):深入剖析synchronized关键字的底层原理一、基本使用1.1 修饰实例方法1.2 修饰静态方法1.3 修饰代码块 二、Monitor2.1 Monitor的概念2.2 Moni…...
网络原理 - 9
目录 数据链路层 以太网 以太网帧格式 MAC 地址 DNS(Domain Name System) 完! 数据链路层 这里的内容也是简单了解,除非是做交换机开发,一般程序员不需要涉及~~ 以太网 ”以太网“不是一种具体的网络…...
springboot入门-业务逻辑核心service层
在 Spring Boot 中,Service 层是业务逻辑的核心,负责协调数据访问层(Repository 或 Mapper)和控制器层(Controller),处理业务规则、事务管理以及数据转换。以下是 Service 层的详细说明、常用注…...
在RHEL 10上安装和配置TFTP服务器(不使用xinetd)
RHEL10已经废弃xinetd,使用下面的方式安装配置TFTP服务器。 1. 安装TFTP服务器和客户端 sudo dnf install tftp-server tftp -y 2. 配置TFTP服务器 创建TFTP根目录并设置权限 sudo mkdir -p /var/lib/tftpboot sudo chmod -R 777 /var/lib/tftpboot sudo chown -R…...
AIGC在游戏开发中的革命:自动化生成3A级游戏内容
一、智能游戏开发架构 1.1 传统开发痛点与AIGC创新 开发环节 传统痛点 AIGC解决方案 角色原画设计 美术资源产能瓶颈 文生图3D模型自动生成 场景搭建 重复劳动占比高 程序化生成风格迁移 NPC行为设计 模式化严重 强化学习驱动智能行为 任务系统 剧情线性缺乏变化 动态剧情生成系…...
ChatGPT、deepseek、豆包、Kimi、通义千问、腾讯元宝、文心一言、智谱清言代码能力对比
均使用测试时的最强模型 均是一次对话,对话内容一样 均开启深度思考 能联网的都联网了,但是作用不大,因为蓝桥杯刚考完,洛谷题目刚上传没多久 问题一测试了两遍 从问题三开始不再测试智谱清言(它思考时间太长了,前两个…...
Linux扩展
目录 扩展 查找如何进行后台运行程序的指令 使用 & 符号 使用 nohup 命令 使用 screen 或 tmux find命令 基本语法 常用选项 grep 命令 基本语法 常用选项 如何使用 vim 直接定位到错误行 1. 使用 :make 和 :copen 2. 使用 :lineno 定位 3. 通过 :grep 或 :…...
Java Hotspot VM researcher
** therefore, careful design and understanding of modules are essential to fully reap the performance benefits. **...
java—基础
目标 ├── 第一阶段:内容清单 │ └── 目标:建立编程思想 ├── 第二阶段:内容清单 │ └── 目标:提升编程能力 └── 第三阶段:内容清单└── 目标:分析需求,代码实现能力以下是根…...
【OpenCV】第二章——图像处理基础
图像处理基础学习笔记 本章节详细介绍了图像处理的基础内容,包括图像的读取、显示、保存,基本属性的查看,图像的变换与操作,以及常用的图像处理方法。 目录 图像的读取与显示图像基本属性图像的灰度化与二值化图像的色彩空间转换…...
在WSL2+Ubuntu22.04中通过conda pack导出一个conda环境包,然后尝试导入该环境包
如何导出一个离线conda环境?有两种方式,一种是导出env.yml即环境配置,一种是通过conda pack导出为一个环境包,前者只是导出配置(包括包名、版本等),而后者是直接将环境中所有的内容打包…...
C++:类和对象(上)---镜中万象:C++类的抽象之境与对象的具体之象
类(Class)是一种用户自定义的数据类型。 文章目录: 前言一、面向过程和面向对象初步认识 二、类的引入 三、类的定义 3.1类是什么? 3.2类的定义 四、类的访问限定符和封装 4.1类的访问限定符 4.2封装 五、类和对象的关系 六、类对…...
碰一碰发视频源码搭建全解析,支持OEM
在数字化交互体验不断升级的背景下,“碰一碰发视频” 功能凭借其便捷性和趣味性,逐渐成为营销推广、社交分享等场景中的热门需求。该功能基于近场通信技术,实现设备间快速的数据传输。本文将详细介绍其源码搭建过程,助力开发者实现…...
搭建spark-local模式
要搭建Spark的local模式,你可以按照以下步骤进行操作(以在Linux系统上安装为例,假设你已经安装了Java环境): 1. 下载Spark安装包:访问Spark官方网站(https://spark.apache.org/downloads.html&a…...
Goland终端PowerShell命令失效
Goland终端Terminal的PowerShell不能使用,明明windows上升级了PowerShell 7设置了配置文件,但是只能在windows终端下使用,goland终端下直接失效报错,安装升级PowerShell请看[博客](Windows11终端升级PowerShell7 - HashFlag - 博客…...
前端节流、防抖函数
节流 什么是节流? 节流就是同一个事件 一秒钟他执行了很多次。但是我不想他执行这么多次,我只想让他执行一次 或者两次。 那该怎么办? why baby why 那我想就是他执行的时候 我就设置一个定时器,如果定时器是空的,等会…...
如何使用WebRTC
WebRTC比较容易使用,只需要很少的步骤,有些消息在浏览器和服务器之间流动,有些则直接在两个浏览器之间流动, 1、建立WebRTC会话 a:建立WebRTC连接需要加入以下几个步骤: 获取本地媒体:getUse…...
在 Vue 3 setup() 函数中使用 TypeScript 处理 null 和 undefined 的最佳实践
在 Vue 3 中使用 setup() 函数和 TypeScript 时,null 和 undefined 是两个需要特别关注的类型。虽然它们看起来都表示“没有值”,但它们在 JavaScript 和 TypeScript 中有着不同的含义和使用场景。如果不小心处理它们,可能会导致潜在的 bug 或…...
【C++11】Lambda表达式
前言 上文我们学习了C11新语法,可变参数模板以及用可变参数模板作为形参的emplace接口。【C11】可变参数模板-CSDN博客 本文我们来学习C11下一个新语法,Lambda表达式。 1.Lambda表达式语法 Lambda表达式本质是一个匿名函数对象,与普通函数不同…...
【落羽的落羽 C++】vector
文章目录 一、vector类介绍二、vector中的常用接口三、迭代器失效问题四、vector的使用实例五、vector模拟实现 一、vector类介绍 vector是STL中的一种容器,本质上是顺序表。它和string类的结构很相似,其也有size、capacity、数组等,不同的是…...
DIFY 浅尝 - Dify + Ollama 抓取BBC新闻
假设你已经按照上篇文章 DIFY 浅尝 - DIFY Ollama 添加模型搭建好了本地环境. 创建一个新的工作流 进入你的本地Dify工作台,选择工作室->创建空白应用 选择工作流,输入应用名称BBC旅游新闻,点击创建 创建一个网页爬虫 配置网页爬虫…...
基于MTF的1D-2D-CNN-BiLSTM-Attention时序图像多模态融合的故障分类识别(Matlab完整源码和数据),适合研究学习,附模型研究报告
基于MTF的1D-2D-CNN-BiLSTM-Attention时序图像多模态融合的故障分类识别(Matlab完整源码和数据),适合研究学习,附模型研究报告 目录 基于MTF的1D-2D-CNN-BiLSTM-Attention时序图像多模态融合的故障分类识别(Matlab完整…...
nuxt3项目搭建:一、初始化项目流程指南
一、初始化项目 初始化命令 1、创建nuxt3项目 npm create nuxtlatest2、填写项目名称 这里我直接填了nuxt-app 3、选择包管理器 这里的包管理器我们选择pnpm 4、选择是否创建git仓库 选择完包管理器后,脚手架会自动下载依赖,git仓库我已经创建好了…...
案例速成GO+redis 个人笔记
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note (更多GOredis等见内部,会及时更新~&#x…...
C/C++ 头文件包含机制:从语法到最佳实践
在C/C++编程中,头文件(.h 或 .hpp)扮演着至关重要的角色。它们不仅是代码模块化的基石,更是编译器理解程序结构的关键。然而,头文件的使用看似简单,实则暗含许多细节,稍有不慎便可能导致编译错误、代码冗余,甚至隐藏难以调试的问题。本文将从语法、编译器行为到工程实践…...
职业教育新形态数字教材的建设与应用:重构教育生态的数字化革命
教育部新时代职业学校名师(名匠)名校长培养计划、四川省第四批职业学校名师(名匠)培养计划专题 在某职业院校的智能制造课堂上,学生佩戴VR设备,通过数字教材中的虚拟工厂完成设备装配训练,系统实时生成操作评分与改进建议。这一场景折射出职业…...
跟着deepseek学golang--Go vs Java vs JavaScript三语言的差异
文章目录 一、类型系统与编译方式1. 类型检查时机2. 空值安全设计 二、并发模型对比1. 并发单元实现4. 锁机制差异 三、内存管理机制1. 垃圾回收对比2. 对象模型差异 四、工程实践差异1. 依赖管理工具4. 异常处理范式 五、跨平台能力对比1. 编译输出目标 综合对比表五角星说…...
梯度下降法
梯度下降法是一种常见的求最小值(或最值)的方法。它是通过沿着函数梯度的负方向进行迭代更新,直到找到局部最小值或最大值。梯度下降法应用于多元函数时,通过更新参数的方式找到最优解。 梯度下降法步骤: 初始化参数&…...
【Java 数据结构】List,ArrayList与顺序表
目录 一. List 1.1 什么是List 1.2 List 的常见方法 1.3 List 的使用 二. 顺序表 2.1 什么是顺序表 2.2 实现自己的顺序表 2.2.1 接口实现 2.2.2 实现顺序表 三. ArrayList 3.1 ArrayList简介 3.2 ArrayList的三个构造方法 3.2.1 无参构造方法 3.2.2 带一个参数的…...
用Python做有趣的AI项目1:用 TensorFlow 实现图像分类(识别猫、狗、汽车等)
项目目标 通过构建卷积神经网络(CNN),让模型学会识别图片中是什么物体。我们将使用 CIFAR-10 数据集,它包含 10 类:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。 🛠️ 开发环境与依赖 安装依赖&…...
正确应对监管部门的数据安全审查
首席数据官高鹏律师团队编著 在当今数字化时代,数据安全已成为企业及各类组织面临的重要议题,而监管部门的数据安全审查更是关乎其生存与发展的关键挑战。随着法律法规的不断完善与监管力度的加强,如何妥善应对这一审查,避免潜在…...
Springboot用IDEA打jar包 运行时 错误: 找不到或无法加载主类
Springboot用IDEA打jar包 运行时 错误: 找不到或无法加载主类 今天遇到个很神奇的问题。 就是我在打包我项目后。用java -jar命令的话 是无法启动这个项目的。 但是我在idea里面进行运行 就可以运行 先说结论 因为我这个是jdk17的项目 而我本机的jdk是1.8 所以说就会出现…...
【Linux网络】构建与优化HTTP请求处理 - HttpRequest从理解到实现
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
【高频考点精讲】实现垂直居中的多种CSS方法比较与最佳实践
前端工程师必看:7种CSS垂直居中方案大比拼(附真实代码) 今天咱们聊聊前端开发中最让人头疼的问题之一——垂直居中。不知道你们有没有遇到过这种情况:明明设置了margin: 0 auto水平居中了,垂直方向怎么折腾都不对劲。全栈老李当年刚入行时,为了一个div居中能折腾一晚上,…...
Java 字符串基础介绍
在 Java 编程中,字符串是不可或缺的一部分。无论是用户界面的消息显示、文件路径的处理,还是用户信息的存储,字符串都扮演着至关重要的角色。本文将带您深入了解 Java 字符串的特性、用法以及一些高级技巧,帮助您在编程实践中更加…...
SpringBoot中暗藏的设计模式
一、工厂模式 想象一下你去奶茶店点单——你只需要告诉店员要"珍珠奶茶",后厨就会自动完成煮茶、加料、封口整套流程。这就是工厂模式在SpringBoot中的体现。 典型应用场景: Bean的创建过程(ApplicationContext就是超级工厂&…...
使用 AFL++ 对 IoT 二进制文件进行模糊测试 - 第一部分
American fuzzy lop 是一款面向安全的模糊测试器,它采用一种新型的编译时插桩和遗传算法,可以自动发现干净、有趣的测试用例,从而触发目标二进制文件中新的内部状态。这显著提高了模糊测试代码的功能覆盖率。 AFL 的地址是https://lcamt uf.coredump.cx/afl/ 。它已经有一段…...
Java 线程的六种状态与完整生命周期详解
🚀 Java 线程的几种状态详解 在 Java 中,线程状态(Thread State)是由 Thread.State 枚举定义的,总共有六种: 状态含义典型场景示例NEW新建状态,线程对象刚创建,还未调用 start() 方…...
常见的机器视觉通用软件
国际常用软件 OpenCV : 特点 :开源免费,社区支持强大,拥有丰富的图像处理和计算机视觉算法库,支持多种编程语言,如 C、Python、Java 等,可实现对象检测、图像分割、特征提取等功能,具…...
使用 Frida 绕过 iOS 应用程序中的越狱检测
在这篇博文中,我们将介绍**Frida**,它是用于移动应用程序安全分析的真正有趣的工具之一。 我们在高级 Android 和 iOS 漏洞利用培训中也深入讲解了这一点,您可以在这里注册 -培训链接 即使您从未使用过 Frida,本文也将作为指南,帮助您进入 Frida 的世界,进行移动应用程…...
创建可执行 JAR 文件
📦 创建可执行 JAR 文件 🔹 概述 在完成示例的最后环节,我们将创建一个完全自包含的可执行 jar 文件,该文件可直接在生产环境运行。可执行 jar(又称 uber jar 或 fat jar)是一种包含编译后类文件及全部运行…...