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

Linux网络基础 -- 局域网,广域网,网络协议,网络传输的基本流程,端口号,网络字节序

目录

1. 计算机网络背景

1.1 局域网

1.1.2 局域网的组成

1.2 广域网

1.1.2 广域网的组成

2. 初始网络协议

2.1 网络协议的定义和作用

2.2 网络协议的分层结构

2.2.1 OSI七层模型

2.2.2 TCP/IP 五层(四层)模型

3. 再识网络协议

3.1 为什么要有 TCP/IP 协议

3.2 TCP/IP 协议与操作系统的关系

4. 网络传输基本流程

4.1 局域网网络传输流程图

4.1.1 认识 MAC 地址

4.1.2 局域网通信原理(以太网为例) 

4.1.3 TCP/IP 协议通讯过程

4.1.3.1 网络协议栈

4.1.3.2 数据包封装和分用

4.2 跨网络传输流程

4.2.1 网络种的地址管理 -- 认识 IP 地址

5. Socket 编程预备

5.1 认识端口号

5.2 传输层的典型代表

5.2.1 简单介绍 TCP 协议和 UDP 协议

5.3 网络字节序

5.4 socket 编程接口

5.4.1 socket 常见 API

5.4.2 sockaddr 结构


1. 计算机网络背景

        计算机一开始是相互独立的,是用于处理一些数据计算任务的。数据处理的过程一般都需要很多步骤,所以当人使用计算机进行数据的协作处理的时候,就需要进行数据间的传输。但是再没有网络的时代,只能通过人使用软盘在各个计算机之间进行拷贝,效率极低。

        为了提高数据信息传输的效率,就产生了网络,使人们能远距离且高效的传输数据信息

1.1 局域网

        局域网(Local Area Network,LAN)是指在某一区域内由多台计算机及相关设备(路由器、交换机)相互连接而成的计算机网络

1.1.2 局域网的组成

        (1)计算机设备:包括服务器和客户端计算机。服务器是局域网中的核心设备,用于存储和管理共享资源,如文件、数据库、打印机等,并为客户端提供服务;客户端计算机是用户直接使用的设备,通过网络连接到服务器获取服务和资源。

        (2)网络连接设备:如交换机、路由器、集线器等。交换机用于连接多台计算机,实现数据帧的转发和交换,提高网络的性能和效率路由器主要用于连接不同的局域网,实现网络之间的数据路由和通信;集线器则将多个计算机连接在一起,形成一个共享的网络环境,但它的性能相对较低。

        (3)传输介质:负责在计算机和网络设备之间传输数据,常见的传输介质有双绞线、光纤和无线信号。双绞线成本较低,适用于短距离传输;光纤具有高带宽、低损耗、抗干扰能力强等优点,常用于长距离和高速网络传输;无线信号则为移动设备提供了便捷的网络接入方式,使用户可以在一定范围内自由移动并保持网络连接。

        上图左右分别是两个局域网,通过路由器来连接。 

1.2 广域网

        广域网(Wide Area Network,WAN)是一种覆盖范围广泛的计算机网络,通常用于连接不同城市、地区甚至不同国家的计算机系统和局域网

1.1.2 广域网的组成

        (1)通信子网:主要负责数据的传输和交换,由通信线路和通信设备组成。通信线路包括电话线、光纤、卫星链路等,通信设备有路由器、交换机、调制解调器等。这些设备用于将不同的局域网或计算机连接起来,实现数据在广域范围内的传输。

        (2)资源子网:由连接在广域网上的各种计算机系统和终端设备组成,负责提供各种网络资源和服务,如服务器上的文件、数据库、应用程序等,以及用户使用的个人计算机、工作站等终端设备。

        上图就是将各个地区的局域网通过路由器连接起来,形成了一个更大的局域网,把这种大的局域网称为广域网。所谓的局域网和广域网只是一个相对的概念。 

2. 初始网络协议

2.1 网络协议的定义和作用

        协议本质就是一种约定网络协议是指为计算机网络中进行数据交换而建立的规则、标准或约定的集合

        网络协议的作用:如同人类社会中的交通规则或语言规范,网络协议确保了不同设备之间能够准确、高效地进行数据通信。它规定了数据的格式、传输顺序、错误处理方式以及通信双方如何进行交互等内容,使得各种计算机设备和网络系统能够相互理解和协同工作

2.2 网络协议的分层结构

        为了更好的进行模块化以及解耦合,网络协议的设计和实现通常采用分层的体系结构,常见的有 OSI(Open System Interconnection,开放系统互连)七层模型(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)和 TCP/IP 四层模型(网络接口层、网际层、传输层、应用层)。每一层都有其特定的功能和任务,并且通过层与层之间的接口进行通信。例如,物理层负责处理物理介质上的信号传输,数据链路层则负责将物理层接收到的信号转换为数据帧,并进行差错检测和纠正等。

2.2.1 OSI七层模型

        OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。

        其实在网络角度,ISO(国际标准化组织) 定义的协议7层模型非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,既复杂又不实用,所以在工程实践中,最终落地的 TCP/IP  五层(四层)模型。

2.2.2 TCP/IP 五层(四层)模型

        TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇。TCP/IP 通讯协议采用了 5 层的层级结构。

      (1)应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。

        (2)传输层:负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。

        (3)网络层: 负责地址管理和路由选择。例如在 IP 协议中, 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线(路由)。路由器(Router)工作在网路层。

        (4)数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网, 无线 LAN 等标准。交换机(Switch)工作在数据链路层。

        (5)物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。

         物理层我们考虑的比较少,我们只考虑软件相关的内容。因此很多时候我们直接称为 TCP/IP 四层模型。

3. 再识网络协议

3.1 为什么要有 TCP/IP 协议

        首先,即便是单台主机,计算机内部也是存在协议的,比如:其他设备和内存通信,会有内存相关的协议;其他设备和磁盘通信,会有磁盘相关的协议。这些协议都是在本地主机各自的硬件中,通信的成本、问题比较少。

        其次,网络通信最大的特点就是主机之间距离变远了。任何通信特征的变化一定会带来新的问题。比如当距离变远了之后,数据在传输的过程中丢失的问题,怎么定位目标主机的问题,怎么等等。

        所以TCP/IP 协议本质就是通信主机的距离变远了,为了解决距离变远产生的问题而诞生的解决方案。

3.2 TCP/IP 协议与操作系统的关系

        (1)所有主机上的操作系统可以不同,但是主机上的网络协议栈的实现必须按照标准进行相同的实现,这也是不同操作系统的主机可以进行网络通信的原因。

        (2)网卡就是网络通信的底层硬件,处于物理层;数据链路层在网卡的驱动程序中进行实现;网络层和传输层被集成在内核中,在操作系统中进行实现;应用层在操作系统之上,由用户进行实现。

        (3)整个网络协议栈涉及到硬件、驱动、操作系统以及用户,所以协议一定是需要IT各行各业都进行支持和配合。

        (4)传输层最著名的协议就是 TCP,网络层最著名的协议就是 IP,而这两层都处于操作系统中,网络是操作系统的一部分,所有不同的操作系统在 TCP/IP 的实现上一样

        所谓协议,朴素的可以理解为,就是通信双方都认识的结构化数据类型,也就是不同操作系统在网络部分实现时具有相同的网络协议相关的结构体。当进行网络传输时,发过来的数据能够使用相同的方式进行解析。因为协议栈是分层的,所以每层双方都有协议,同层之间互相可以认识对方的协议。

        就像快递单子一样,发货方和收货方都能看懂,约定使用快递单来传递信息,快递单就对应着结构体。

4. 网络传输基本流程

4.1 局域网网络传输流程图

4.1.1 认识 MAC 地址

        MAC 地址用来识别数据链路层中相连的节点,长度为 48 位(6字节)。一般用 16 进制数字加冒号的形式来表示(例如:08:00:27:03:fb:19)。

        在网卡出厂时就确定了,不能修改。MAC 地址通常是唯一的(虚拟机中的 MAC 地址不是真实的 MAC 地址,可能会冲突;也有些网卡支持用户配置 MAC 地址)。MAC 地址在一个子网中唯一就够用了。

        可是使用命令 ifconfig 进行查看:

4.1.2 局域网通信原理(以太网为例) 

        如上图所示,当主机 A 向主机 E 发送数据包时,该数据包会被子网中的所有主机所看到,但是当其他主机看到数据包发现目标地址不是自己,就不会进行理会,当主机 E 识别到该数据包是发给自己的,就会进行接收。 

        (1)以太网中,任何时刻只允许一台机器向网络中发送数据(以太网的本质就是共享的资源)

        (2)如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞(这也是为什么一个子网用的人多了之后网速降低了,因为人多之后,数据碰撞的概率增加了,单位时间发出去的报文就减少了)。

        (3)没有交换机的情况下,一个以太网就是一个碰撞域。

        (4)所有发送数据的主机要进行碰撞检测和碰撞避免(碰撞检测和碰撞避免用于维持使用该以太网主机的互斥关系)。

        (5)局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标 MAC 地址判定

4.1.3 TCP/IP 协议通讯过程

4.1.3.1 网络协议栈

        如上图所示,两台主机之间进行通信,用户进行网络通信的时候,要贯穿每层的协议,每一台主机从上到下的所有网络协议称为网络协议栈。而所以当进行上述传输流程的时候,每层都要进行封装和解包。如下图所示:

        (1)报头:对应协议层的结构体字段。

        (2)有效载荷:该数据包传输的有效字段。

        (3)报文:报头 + 有效载荷。

        明确一下不同层完整报文的叫法:在传输层叫做段(segment),网络层叫做数据报(datagram),链路层叫做帧(frame)。

知识点1:
        任何协议必须要做到以下两点:(a)将有效载荷进行分离。(b)将自己的有效载荷交付给具体的上层协议。

知识点2:

        在数据链路层,收到报文之后对其进行解包,发现该报文不是发给目标主机的则在数据链路层直接丢弃。

4.1.3.2 数据包封装和分用

        如下图所示:自顶向下将报头和有效载荷合在一起的过程叫做封装。

        如下图所示:通过网卡接收到数据包之后,自底向上依次解包并传递到上层对应的某一种协议的过程叫做分用。

4.2 跨网络传输流程

4.2.1 网络种的地址管理 -- 认识 IP 地址

        IP 协议有两个版本,IPv4 和 IPv6。没有特殊说明,默认都是指的 IPv4。

        IP 地址是 IP 协议中,IP 地址是一个 4 字节,32 位的整数;我们通常也使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;

        跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。

        下图是一张两台主机跨局域网通信的示意图,路由器也可以近似看作一台主机,目的 IP 地址表示最终的主机地址,而 MAC 地址表示的是当前时刻要去到的下一个节点的地址。

        如下图所示,用户 A 和路由器在第一个子网中,用户 B 和路由器在第二个子网中,在同一个子网中,里面主机的 IP 地址前半部分都是相同的,当 IP 为 192.168.2.2 的主机要发送数据给 IP 为 172.168.2.2 的主机时,发现该 IP 地址不属于当前局域网,然后就先给到 IP 为 192.168.2.1 的路由器,然后在路由器中进行 IP 地址的转换,转换为第二个子网中的 IP 地址 172.168.2.1,再传输到目标主机。 

        结合封装与解包,体现路由器解包和重新封装的特点。如下图所示,在网络层发现不是传给第一个局域网中的主机时,进行 MAC 帧的封装,传给下一个节点(也就是路由器),路由器拿到数据帧之后向上交付对链路报文进行解包,发现对应的目的 IP 地址在第二个子网中,然后向下交付重新封装 MAC 帧,传送给用户 B

        路由的过程中,数据帧中的 IP 地址不变,MAC 地址一直在变,所以 MAC 地址只会在本局域网内有效。

        如下图所示,就是跨网络传输的整个宏观的流程图: 

        IP 网络层存在的意义:提供网络虚拟层, 让世界的所有网络都是 IP 网络,屏蔽最底层网络的差异。

5. Socket 编程预备

5.1 认识端口号

        IP 在网络中,用来标识主机的唯一性。

        使用网络进行数据的传输并不是目的,是两台主机进行数据交互的手段。但是数据传输到主机是没有用的,要将数据传递到目标进程,让进程使用数据才是目的。所以网络通信的本质就是两台主机中两个进程的进程间通信。

        进程是人在系统中的代表,只要把数据给到进程,就相当于人拿到了数据。

        但是系统中同时会存在非常多的进程,当数据到达目标主机之后,怎么转发给目标进程呢?这时候就需要引入端口号。

        端口号(port)是传输层协议的内容。端口号是一个 2 字节 16位的整数

        一台计算机可能同时运行多个网络应用程序,仅仅依靠 IP 地址只能确定目标计算机,而端口号则用于进一步区分该计算机上的不同应用程序或服务,确保数据能够准确的交付到对应的程序或服务中。

        IP 地址 + 端口号 用于标识网络上的某一台主机的某一个进程,一个端口号只能被一个进程占用。

        端口号是 16 位的整数:

        0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的。

        1024 - 65535:操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的。

        传输层协议(TCP 和 UDP )的数据段中有两个端口号,分别叫做源端口号和目的端口号,描述数据是谁发的和发给谁的

知识点1:

        端口号和进程 PID 都是用于标识进程唯一性的,为什么还要使用端口号。主要是因为不是所以的进程都是网络进程,其次是将网络部分与系统部分进行解耦。比如身份证号(PID)和学号(端口号),当身份证系统进行改变的时候,在学校对于一个学生的标识还是使用的学号,实现了解耦。

        另外,一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定。

        IP 地址用来标识互联网中唯一的一台主机,port 用来标识该主机上唯一的一个网络进程,所以 IP + port 就能标识互联网中唯一的一个网络进程。IP + port 叫做套接字 socket。 

5.2 传输层的典型代表

        传输层是属于操作系统内核的,那么要通过网络协议栈进行通信,必定调用的是传输层提供的系统调用来进行的网络通信,如下图所示:

5.2.1 简单介绍 TCP 协议和 UDP 协议

        TCP(Transmission Control Protocol 传输控制协议)和 UDP(Transmission Control Protocol 传输控制协议) 都是传输层的协议。

        TCP协议的特点

        (1)连接特性:TCP 是面向连接的协议。在数据传输之前,需要在发送方和接收方之间建立一条连接,就像打电话时先拨号建立连接一样。连接建立后,双方才能进行数据传输,传输完成后再释放连接。

        (2)可靠性:TCP 提供可靠的数据传输服务。它通过序列号、确认应答、重传机制等保证数据无差错、按顺序到达接收方。如果发送方发送的数据在规定时间内没有收到接收方的确认应答,就会重新发送数据,以确保数据的完整性。

        (3)流量控制与拥塞控制:TCP 具有流量控制和拥塞控制机制。流量控制可以防止发送方发送数据过快,导致接收方处理不过来而丢失数据。拥塞控制则是当网络出现拥塞时,通过调整发送方的发送速率,避免网络进一步拥塞,保证网络的稳定性和可靠性。

        (4)数据传输单位:TCP 以字节流的方式传输数据,将应用程序交下来的数据看成是一连串的字节流,没有明确的消息边界。接收方在接收数据时,需要根据应用层的协议来解析数据的边界和含义。

        UDP协议的特点

        (1)连接特性:UDP 是无连接的协议。发送方在发送数据时不需要与接收方建立连接,就像写信一样,直接将数据报发送出去,不管接收方是否准备好接收。

        (2)不可靠性:UDP 不保证数据的可靠传输,它没有确认应答、重传等机制。数据报可能会在传输过程中丢失、重复或乱序到达接收方,但 UDP 也因此具有较低的延迟和较小的开销。

        (3)数据传输单位:UDP 以数据报的形式传输数据,每个数据报都是独立的,有明确的边界。UDP 对数据报的长度有一定限制,一般不超过 64KB。

        (4)应用场景:UDP 适用于对实时性要求较高,而对数据准确性要求相对较低的应用,如视频会议、在线游戏、音频流等。这些应用可以容忍少量的数据丢失或错误,更注重数据的实时性和流畅性。

5.3 网络字节序

        内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端和小端之分,网络数据流同样有大端和小端之分。

        发送主机通常发送缓冲区中的数据按内存地址从低到高的顺序发送;接收主机把网络上街道的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存。

        因此,网络数据流的地址这样规定:先发出的数据是低地址,后发出的数据是高地址。TCP/IP 协议规定,网络数据流应采用大端字节序,即低地址存高权值位。

        如果当前发送主机是小端,就需要先将数据转成大端;否则就忽略,直接发送。

        为了网络程序具有可移植性,使同样的 C 代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。

        h 表示 host ,n 表示 network,l 表示 32 位长整数,s 表示 16位短整数。

        htonl 表示将 32 位长整数从主机字节序转换为网络字节序。

        如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回;如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回。

5.4 socket 编程接口

5.4.1 socket 常见 API

// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);// 绑定端口号 (TCP/UDP, 服务器)
int bind(int socket, const struct sockaddr *address, socklen_t address_len);// 开始监听 socket (TCP, 服务器)
int listen(int socket, int backlog);// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address, socklen_t* address_len);// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

5.4.2 sockaddr 结构

        socket API 是一层抽象的网络编程接口,适用于各种底层网络协议,如 IPv4,IPv6以及 UNIX Domain Socket。 

        IPv4 和 IPv6 的地址格式定义在 netinet/in.h 中,IPv4 地址用 sockaddr_in 结构体表示,包括 16 位地址类型,16 位端口号和 32 位 IP 地址。

        IPv4、IPv6 地址类型分别定义为常数 AF_INET、AF_INET6。这样只要取得某种 sockaddr 结构体的首地址,不需要知道具体是哪种类型的 sockaddr 结构体,就可以根据地址类型字段确定结构体中的内容。

        地址类型为 AF_UNIX 是用于本地进程通信的结构体。

         socket API 可以都用 struct sockaddr *类型表示,在使用的时候需要强制转化成sockaddr_in; 这样的好处是程序的通用性, 可以接收 IPv4, IPv6, 以及 UNIX DomainSocket 各种类型的 sockaddr 结构体指针做为参数

        上述就好比 C++ 中,sockaddr 作为基类,而sockaddr_in 和 sockaddr_un 是其子类,是一种 C 风格的继承和多态。

相关文章:

Linux网络基础 -- 局域网,广域网,网络协议,网络传输的基本流程,端口号,网络字节序

目录 1. 计算机网络背景 1.1 局域网 1.1.2 局域网的组成 1.2 广域网 1.1.2 广域网的组成 2. 初始网络协议 2.1 网络协议的定义和作用 2.2 网络协议的分层结构 2.2.1 OSI七层模型 2.2.2 TCP/IP 五层(四层)模型 3. 再识网络协议 3.1 为什么要有…...

当 Manus AI 遇上 OpenAI Operator,谁能更胜一筹?

自主智能体通过实现任务自动化,改变了我们与技术交互的方式,让我们的生活变得更加便捷。去年,OpenAI 为人工智能聊天机器人引入了定时任务和操作智能体,赋予了其代理功能,而 Anthropic 则在 Claude 上实现了类似的功能…...

iOS实名认证模块的具体实现过程(swift)

实名认证是当前APP的一个基础功能了,今天我集成了实名认证模块在iOS应用中的具体实现步骤,结合技术细节与最佳实践: 一、手机号验证 1. 发送短信验证码 技术实现:// 使用Alamofire调用第三方短信API AF.request("https://s…...

UE5定序器中摇臂挂载摄像机 让摄像机始终朝向目标

1. 搭建摄像机摇臂并加入 Sequencer 在关卡中: Cinematics → Add Level Sequence,新建并打开一个 Level Sequence。 在视口里 右键 → Cinematic → Cine Camera Actor Rig → Crane,放一个 CameraRig_Crane。 默认 Crane 自带一个 CineCa…...

Redis BigKey 问题是什么

BigKey 问题是什么 BigKey 的具体表现是 redis 中的 key 对应的 value 很大,占用的 redis 空间比较大,本质上是大 value 问题。 BigKey怎么找 redis-cli --bigkeysscanBig Key 产生的原因 1.redis数据结构使用不恰当 2.未及时清理垃圾数据 3.对业务预…...

硬件中断请求号和lspci命令查看到的device id有关系吗?

这是我忽然想到的一个人问题 硬件中断请求号(IRQ)与lspci命令查看到的设备ID(Device ID)​没有直接对应关系,但两者在系统硬件管理中通过以下方式间接关联: ​一、硬件层面的独立标识​ ​Device ID的本质…...

Qt 中 QWidget涉及的常用核心属性介绍

欢迎来到干货小仓库 一匹真正的好马,即使在鞭子的影子下,也能飞奔 1.enabled API说明isEnabled()获取到控件的可用状态setEnabled()设置控件是否可使用.true:可用,false:禁用 禁用:指该控件不能接收任何用…...

编程日志5.3

串的习题 1.Problem - 2030 #include<iostream> using namespace std; int main() { char s[500]; int n; cin >> n; getchar();//去掉空格部分 while (n--) { gets(s);//老式写法 vs显示错误题目解答正确 int cnt 0; …...

sql的性能分析

慢查询日志&#xff1a;通过慢查询日志需要优化的sql语句。 慢查询日志记录了所有执行时间超过指定参数的所有sql语句。 开启慢日志查询开关&#xff1a;show_query_log1 设置慢查询日志的时间&#xff1a;long_query_time?。 show variables like ‘slow_query_log’&…...

JAVA 锁—— synchronized

32 位机器上java对象头中&#xff0c;markWord 示意图如上所示&#xff0c;64 位机器扩展前面标识位数&#xff0c;如 hashcode(25 -> 31)&#xff0c;线程ID(23 -> 54) 如果启用了偏向锁&#xff1a; synchronized添加偏向锁&#xff1a;只有1个线程加锁的情况下&#…...

游戏引擎学习第274天:基于弹簧的动态动画

回顾前一天内容&#xff0c;并为今天的工作设定目标 我们昨天展示了一些内容&#xff0c;现在先回顾一下昨天的进展。我们目前正在处理的是角色跳跃的动画——特别是身体部分的跳跃。 现在角色的动画状态如下&#xff1a; 正在实现角色的移动和跳跃。跳跃中已经加入了一些预备…...

【英语笔记(二)】句子成分、基本句型;简单描述十大词类与从句的分类、助动词和非谓语动词的使用

1. 介词 at, in, on 的用法区别 1.1 表示时间的区别 1. 表示时间的某一点、某一时刻或年龄等用 at。如&#xff1a; I get up at six in the morning. 我早上六点钟起床。He got married at the age of 25. 他 25 岁结婚。 2. 泛指一般意义的上午、下午或晚上以及月或年等较…...

TAPIP3D:持久3D几何中跟踪任意点

简述 在视频中跟踪一个点&#xff08;比如一个物体的某个特定位置&#xff09;听起来简单&#xff0c;但实际上很复杂&#xff0c;尤其是在3D空间中。传统方法通常在2D图像上跟踪像素&#xff0c;但这忽略了物体的3D几何信息和摄像机的运动&#xff0c;导致跟踪不稳定&#xf…...

RabbitMQ的工作队列模式和路由模式有什么区别?

RabbitMQ 的工作队列模式&#xff08;Work Queues&#xff09;和路由模式&#xff08;Routing&#xff09;是两种不同的消息传递模式&#xff0c;主要区别在于消息的分发逻辑和使用场景。以下是它们的核心差异&#xff1a; 1. 工作队列模式&#xff08;Work Queues&#xff09…...

armv7 backtrace

ref&#xff1a; ARM Cortex-M3/M4/M7 Hardfault异常分析_arm hardfault-CSDN博客...

Python并发编程:开启性能优化的大门(7/10)

1.引言 在当今数字化时代&#xff0c;Python 已成为编程领域中一颗璀璨的明星&#xff0c;占据着编程语言排行榜的榜首。无论是数据科学、人工智能&#xff0c;还是 Web 开发、自动化脚本编写&#xff0c;Python 都以其简洁的语法、丰富的库和强大的功能&#xff0c;赢得了广大…...

泰勒展开式

常用的 泰勒展开式&#xff08;Taylor series expansion&#xff09;是指把一个函数在某点的邻域内展开成幂级数的形式。以函数 f ( x ) f(x) f(x) 在点 a a a 处展开为例&#xff0c;其泰勒展开式为&#xff1a; f ( x ) f ( a ) f ′ ( a ) ( x − a ) f ′ ′ ( a ) 2 …...

深入理解 Polly:.NET Core 中的健壮错误处理策略

在现代软件开发中&#xff0c;错误处理是构建高可用、健壮系统的关键之一。尤其是当应用依赖外部服务&#xff08;如 API、数据库或其他网络资源&#xff09;时&#xff0c;临时的服务中断、超时或其他不可预见的错误都会影响应用的稳定性。为了提升系统的容错能力&#xff0c;…...

【Bootstrap V4系列】学习入门教程之 组件-巨幕(Jumbotron)和列表组(List group)

Bootstrap V4系列 学习入门教程之 组件-巨幕&#xff08;Jumbotron&#xff09;和列表组&#xff08;List group&#xff09; 一、巨幕&#xff08;Jumbotron&#xff09;1.1 带有圆角1.2 全宽且无圆角 二、列表组&#xff08;List group&#xff09;2.1 Basic example2.2 Acti…...

02.three官方示例+编辑器+AI快速学习webgl_animation_skinning_blending

本实例主要讲解内容 这个示例展示了Three.js中骨骼动画混合(Skeletal Animation Blending)的实现方法&#xff0c;通过加载一个士兵模型&#xff0c;演示了如何在不同动画状态&#xff08;如站立、行走、跑步&#xff09;之间进行平滑过渡。核心技术包括动画混合器(AnimationM…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1商用服务开通教程以及模型体验

在当今数字化浪潮迅猛推进的时代&#xff0c;云计算与人工智能技术的深度融合正不断催生出众多创新应用与服务&#xff0c;为企业和个人用户带来了前所未有的便利与发展机遇。本文将重点聚焦于在华为云这一行业领先的云计算平台上&#xff0c;对 DeepSeek-V3/R1 商用服务展开的…...

大语言模型通过MCP控制STM32-支持Ollama、DeepSeek、openai等

MCP控制STM32 MCP部分 1.下载源码 git clone https://github.com/ana52070/MCP_Control_STM32.git cd MCP_Control_STM32 cd mcp-led_oled2. 创建并激活虚拟环境 为了避免不同项目之间的依赖冲突&#xff0c;建议使用虚拟环境。根据你的操作系统和 Python 版本&#xff0c;…...

Linux-Ubuntu安装Stable Diffusion Forge

SD Forge在Win上配置起来相对简单且教程丰富&#xff0c;而在Linux平台的配置则稍有门槛且教程较少。本文提供一个基于Ubuntu24.04发行版&#xff08;对其他Linux以及SD分支亦有参考价值&#xff09;的Stable Diffusion ForgeUI安装配置教程&#xff0c;希望有所帮助 本教程以N…...

LoRA(Low-Rank Adaptation)原理详解

LoRA(Low-Rank Adaptation)原理详解 LoRA(低秩适应)是一种参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)技术,旨在以极低的参数量实现大模型在特定任务上的高效适配。其核心思想基于低秩分解假设,即模型在适应新任务时,参数更新矩阵具有低秩特性,可用少量参…...

分享一个可以用GPT打标的傻瓜式SD图片打标工具——辣椒炒肉图片打标助手

一、打标效果展示 请参考下图&#xff0c;了解最终的打标效果&#xff1a; 打标速度提升百分之300&#xff1b; 打标成本&#xff1a; gpt4o每百张图约5毛rmb&#xff1b; gpt4o-mini价格更低&#xff1b; 更有claude&#xff0c;grok&#xff0c;gemini&#xff0c;豆包等…...

实战项目2(03)

目录 任务场景一【重点】 【sw1配置】 【sw2配置】 任务场景二【重点】 【sw1配置】 【sw2配置】 【sw3配置】 任务场景一【重点】 掌握基于SVI实现跨VLAN通信——某公司网络为了减少广播包对网络的影响&#xff0c;网络管理员对网络进行了VLAN划分&#xff0c;完成VLA…...

PyCharm软件下载和配置Python解释器

以下是详细的PyCharm下载及解释器环境配置步骤&#xff1a; 有什么问题可以留评论&#xff08;看见会回复的&#xff09; 一、PyCharm下载 1. 访问官网 进入JetBrains官网&#xff1a;https://www.jetbrains.com/pycharm/ 2. 选择版本 Community版&#xff08;免费&…...

《从零构建一个简易的IOC容器,理解Spring的核心思想》

大家好呀&#xff01;今天我们要一起探索Java开发中最神奇的魔法之一 —— Spring框架的IOC容器&#xff01;&#x1f9d9;‍♂️ 我会用最最最简单的方式&#xff0c;让你彻底明白这个看似高深的概念。准备好了吗&#xff1f;Let’s go! &#x1f680; 一、什么是IOC容器&…...

差分与位移算子

差分与位移算子是数值分析和离散数学中处理序列或离散函数的重要工具。它们通过算子代数简化差分的计算和分析&#xff0c;以下是关键概念和关系的总结&#xff1a; 1. 位移算子&#xff08;Shift Operator&#xff09; 定义&#xff1a; 位移算子 ( E ) 将函数 ( f(x) ) 沿自变…...

Robot之VideoMimic:《Visual Imitation Enables Contextual Humanoid Control》翻译与解读

Robot之VideoMimic&#xff1a;《Visual Imitation Enables Contextual Humanoid Control》翻译与解读 导读&#xff1a;这篇论文介绍了VIDEOMIMIC&#xff0c;一个基于视觉模仿的真实到模拟到真实流水线&#xff0c;用于训练人形机器人执行上下文相关的全身动作。该方法通过分…...

【Java学习日记34】:this关键字和成员变量

为什么不需要加 this&#xff1f; 作用域规则&#xff1a; Java编译器在查找变量时遵循“就近原则”。 先在当前方法内查找局部变量或参数。 若找不到&#xff0c;则去类的成员变量中查找。 getName() 的上下文&#xff1a; 该方法没有参数或局部变量名为 name&#xff0c;因…...

包名查看器APP:高效管理手机应用的实用工具

包名查看器APP是一款功能强大的文件查看软件&#xff0c;专为安卓用户设计&#xff0c;能够帮助用户快速了解手机上安装和未安装的APK包信息。作为酷安首发的APK信息查看工具&#xff0c;它提供了比系统设置更详细的信息&#xff0c;如版本号、包名、MD5等&#xff0c;帮助用户…...

左右括号的最小处理次数

1、题目描述 多多君在处理一个由左结号(和右语号&#xff09;组成的字符串&#xff0c;多多君每次处理时可以顺序读取一个字符或者一个有效括号子串&#xff0c;求问多多的最小处理次数。 输入描述&#xff1a; 第一行为一个整数N&#xff0c;表示字符串长度&#xff08;1<…...

22.第二阶段x64游戏实战-分析周围对象类型

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;21.第二阶段x64游戏实战-分析采集物偏移 上一个内容里发现采集物的名字通过我们…...

【C/C++】无符号调试:GDB解栈实战指南

文章目录 无符号调试&#xff1a;GDB解栈实战指南1 生成并加载 Core Dump2 查看原始堆栈信息&#xff08;地址形式&#xff09;3 确认加载的共享库地址范围4 手动转换地址为函数名5 反汇编关键代码段6 加载外部符号文件&#xff08;如有&#xff09;7 结合系统库文档分析8 示例…...

梦熊联盟:202505基础语法-题解

202505基础语法-题解 T1 - 九的倍数 解法&#xff1a; 对于 9 的倍数&#xff0c;只需要判定其各位的数码和是否为 9 的倍数即可。 例如判断一个数是不是 9 的倍数&#xff0c;只要判断其各位数字之和是不是 9 的倍数&#xff0c;因为一个数能被 9 整除当且仅当它的各位数字之和…...

Java SE(11)——内部类

1.内部类 定义&#xff1a;Java中的内部类(Inner Class)是指在一个类的内部定义的类。 使用场景&#xff1a;当一个类的内部&#xff0c;存在一个部分需要完成的结构进行描述&#xff0c;而该内部结构只为外部类提供服务&#xff0c;那么这个内部结构就可以使用内部类&#xff…...

优化审核模块响应时间从8s降至1.2s的数据库解决方案

优化审核模块响应时间从8s降至1.2s的数据库解决方案 要优化审核模块的数据库性能&#xff0c;需要从多个层面进行分析和优化。以下是具体的SQL语句设计和优化方案&#xff1a; 1. 分析当前性能瓶颈 首先需要找出慢查询&#xff1a; -- 查看慢查询日志中的审核模块相关查询 …...

YOLO-World:基于YOLOv8的开放词汇目标检测

文章目录 前言1、出发点2、方法2.1.TextEncoder2.2.ReparmVLPAN2.3.输出头 3、实验3.1.数据集3.2.LVIS测试集 总结 前言 本文介绍一篇来自腾讯的开放词汇检测工作&#xff0c;发表自CVPR2024&#xff0c;论文链接&#xff0c;开源地址。 1、出发点 GroundingDINO在开放词汇检测…...

NX989NY104美光科技芯片NY109NY113

NX989NY104美光科技芯片NY109NY113 存储市场新势力&#xff1a;美光科技的崛起与技术突围 在半导体行业波澜壮阔的浪潮中&#xff0c;美光科技宛如一颗璀璨的明珠&#xff0c;以其独特的技术实力和敏锐的市场洞察力&#xff0c;在存储领域占据了重要的一席之地。尤其是其旗下…...

LabVIEW的PID参数自适应控制

在工业控制领域&#xff0c;PID 控制凭借结构简单、稳定性好、工作可靠等优点被广泛应用。然而&#xff0c;传统固定参数的 PID 控制在面对复杂多变的工况时&#xff0c;控制效果往往难以达到最优。基于 LabVIEW 实现 PID 控制根据情况选择参数&#xff08;即参数自适应调整&am…...

Quartus与Modelsim-Altera使用手册

目录 文章内容&#xff1a; 视频内容&#xff1a; Quartus&#xff1a; ModelSim&#xff1a; 顶层设计与子模块&#xff1a; 只是对所查阅的相关文章的总结与视频总结 文章内容&#xff1a; 这篇对基础操作很详细&#xff1a; 一、Quartus II软件的使用_quartus2软件上…...

设计模式之工厂模式(二):实际案例

设计模式之工厂模式(一) 在阅读Qt网络部分源码时候&#xff0c;发现在某处运用了工厂模式&#xff0c;而且编程技巧也用的好&#xff0c;于是就想分享出来&#xff0c;供大家参考&#xff0c;理解的不对的地方请多多指点。 以下是我整理出来的类图&#xff1a; 关键说明&#x…...

数据可视化大屏——智慧社区内网比对平台

综述分析&#xff1a; 智慧社区内网数据比对信息系统 这段代码实现了一个智慧社区内网数据比对信息系统的前端界面&#xff0c;采用三栏式布局展示各类社区安全相关数据。界面主要由左侧数据统计、中间地图展示和右侧数据分析三部分组成&#xff0c;使用了多种图表可视化技术…...

Spark任务调度流程详解

1. 核心调度组件 DAGScheduler&#xff1a;负责将Job拆分为Stage&#xff0c;处理Stage间的依赖关系。 TaskScheduler&#xff1a;将Task分配到Executor&#xff0c;监控任务执行。 SchedulerBackend&#xff1a;与集群管理器&#xff08;如YARN、K8s&#xff09;通信&#x…...

LeetCode 215题解 | 数组中的第K个最大元素

数组中的第K个最大元素 一、题目链接二、题目三、算法原理四、编写代码 一、题目链接 数组中的第K个最大元素 二、题目 三、算法原理 法一&#xff1a;排序 法二&#xff1a;优先级队列&#xff08;堆&#xff09; 重点看法二&#xff1a; 默认建大堆&#xff0c;意味着以…...

探秘 Cursor 核心:解锁系统提示词的进阶之路

在 AI 编程领域&#xff0c;Cursor 无疑是一颗耀眼的明星&#xff0c;其母公司 Anysphere 在短短三个月内&#xff0c;估值从 25 亿美元狂飙至 100 亿美元&#xff0c;这样的发展速度令人咋舌。而 Cursor 强大功能背后的核心 —— 系统提示词&#xff0c;始终笼罩着一层神秘的面…...

ElasticSearch入门详解

1.ElasticSearch 1.1 ElasticSearch(简称es) Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速&#xff0c;安装使用方便。 客户端支持Java、.NET&#xff08;C#&#xff09;、PHP、Py…...

【计算机网络01】 网络组成与三种交换方式

【参考资料】 《自顶向下的计算机网络第八版》湖科大计算机网络&#xff08;b站&#xff09;王道考研&#xff08;b站&#xff09; 文章目录 一、网络基础概念解析1.1 网络、互联网与因特网 二、因特网发展三阶段&#xff08;了解&#xff09;三、ISP3.1 ISP基本概念3.2 基于I…...

计算机网络——以太网交换机

目录 交换机的作用 以太网交换机的自学习功能 因为以太网交换机有自学习功能&#xff0c;所以以太网交换机支持即插即用 交换机的作用 它工作在数据链路层&#xff0c;为结点转发帧&#xff0c;并且可以根据一个帧的目的MAC地址去进行相应的转发&#xff0c;以及交换机的每…...