2-2-18-14 QNX系统架构之 TCP/IP 网络

阅读前言

本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个或多个系列进行发布,从遵从原文的翻译,到针对某些重要概念的穿插引入,以及再到各个重要专题的梳理,大致分为这三个层次部分,分不同的文章进行发布,依据这样的原则进行组织,读者可以更好的查找和理解。


1. TCP/IP 网络

随着互联网在我们日常生活中的影响力日益显著,其所依托的协议 IP(Internet Protocol,互联网协议)也变得愈发重要。IP 协议及其相关工具无处不在,这使得 IP 成为众多专用网络事实上的首选协议。

IP 被用于从简单任务(例如远程登录)到更复杂任务(例如提供实时股票报价)等诸多方面。大多数企业都在借助通常基于 IP 协议栈运行的万维网来与客户进行沟通、开展广告宣传以及实现其他业务连接。QNX Neutrino 实时操作系统(RTOS)非常适合在这个全球网络中扮演各种各样的角色,从被连接到互联网的嵌入式设备,到用于构建互联网本身的路由器,都能胜任。

鉴于这些以及许多其他用户需求,我们打造了相对节省资源的 TCP/IP 协议栈(包含在 io-pkt * 中),同时采用了通用的 BSD 应用程序编程接口(API)。

@>>阅读扩展:

Q:这里的BSD是什么单词的缩写?是什么意思?

BSD 是指伯克利软件套件(Berkeley Software Distribution)。

历史背景

  • BSD 起源于加州大学伯克利分校(University of California, Berkeley)。在 20 世纪 70 年代末,伯克利的计算机系统研究组(Computer Systems Research Group,CSRG)在 AT&T 公司的 Unix Version 6 和 Version 7 的基础上进行开发。他们对 Unix 系统进行了大量的修改和扩展,添加了许多新的功能和工具,最终形成了自己的 Unix 版本,这就是 BSD。
  • BSD 在 Unix 的发展历程中起到了关键的作用,它推动了 Unix 系统在学术和商业领域的广泛应用。许多现代操作系统的技术和理念都源于 BSD。

技术特点

  • 网络功能强大:BSD 包含了 TCP/IP 协议栈的早期实现,这使得它在网络方面具有先天的优势。例如,它能够高效地处理网络连接、数据包传输等任务,为互联网的发展奠定了基础。许多网络服务器软件最初都是基于 BSD 开发的。
  • 高度可定制性:BSD 允许用户根据自己的需求灵活配置系统。用户可以选择安装不同的软件包,调整系统参数,甚至修改内核源代码来满足特定的应用场景。比如,对于一个高性能计算中心,可以通过定制 BSD 系统来优化计算资源的分配和利用。
  • 稳定性和安全性高:BSD 以其稳定性和安全性闻名。它经过了多年的实践检验,在关键系统和网络服务中被广泛应用。其安全机制包括访问控制、用户认证等多种手段,可以有效防止系统被非法访问和攻击。

主要版本和应用场景

  • FreeBSD:这是最知名的 BSD 衍生版本之一。它被广泛应用于服务器领域,尤其是网络服务器,如 Web 服务器、邮件服务器、文件服务器等。许多互联网服务提供商(ISP)使用 FreeBSD 来构建稳定可靠的服务器环境。
  • NetBSD:NetBSD 的设计目标是能够在尽可能多的硬件平台上运行,具有良好的移植性。它可以用于嵌入式系统、小型网络设备以及对硬件兼容性要求较高的场景。
  • OpenBSD:OpenBSD 注重系统安全,在安全审计、加密技术等方面投入了大量精力。它常用于对安全要求极高的环境,如防火墙系统、安全研究机构的实验平台等。

我们提供以下几种协议栈配置:


NetBSD TCP/IP 协议栈


基于最新的请求注解(RFC)文档,涵盖用户数据报协议(UDP)、IP 协议以及传输控制协议(TCP)。还支持转发、广播和多播,具备硬件校验和支持、路由套接字、Unix 域套接字、多链路点到点协议(PPP)、以太网上的点到点协议(PPoE)、无类别域间路由(CIDR,即超网划分)、网络地址转换 / IP 过滤、地址解析协议(ARP)、互联网控制消息协议(ICMP)以及互联网组管理协议(IGMP),此外还支持通用互联网文件系统(CIFS)、动态主机配置协议(DHCP)、自动 IP 配置(AutoIP)、域名系统(DNS)、网络文件系统(NFS,包含第 2 版和第 3 版的服务器 / 客户端功能)、网络时间协议(NTP)、路由信息协议(RIP)、路由信息协议第 2 版(RIPv2)以及一个嵌入式网络服务器。
要为该协议栈创建应用程序,需使用行业标准的 BSD 套接字 API。当该协议栈作为网络网关运行时,它还包含经过优化的转发代码,以实现更出色的性能以及高效的数据包路由。

@>> 补充概念:

“RFC” 全称为 “Request for Comments”,在网络技术领域通常为 “请求注解”,它实际上是一系列以编号排定的文件,内容涵盖了互联网相关的技术规范、协议、过程等诸多方面,用于记录互联网通信协议的相关标准以及对这些标准的修改、补充说明等信息。

互联网工程任务组(IETF)等相关组织会通过发布 RFC 文档来对网络协议等进行定义和规范,众多网络协议(比如文中提到的 TCP、IP 等相关协议)的具体内容、实现细节、运作规则等都是依据对应的 RFC 文档来确定的,网络技术领域的专业人员会参考这些 RFC 文档去进行相应的系统开发、网络构建等工作,使其符合标准规范。例如,开发某个遵循 IP 协议的应用时,开发者就要参照涉及 IP 协议的最新 RFC 文档中规定的各项要求和细节来进行编码等操作。

带有 IPsec(互联网协议安全)和 IPv6(互联网协议第 6 版)的增强型 NetBSD 协议栈


包含标准协议栈中的所有功能,再加上针对新一代移动和安全通信的功能特性。该协议栈通过 KAME 扩展提供对 IPv6 和 IPsec(涵盖 IPv4 和 IPv6)的全面支持,以及对基于 IPsec 隧道的虚拟专用网络(VPN)的支持。
这种双模协议栈可同时支持 IPv4 和 IPv6,并且包含针对自动配置的 IPv6 支持,这使得设备能在即插即用的网络环境中进行配置。IPv6 支持还包括支持 IPv6 的实用工具以及支持动态路由的路由信息协议 / 路由信息协议下一代(RIP/RIPng)。此外,还提供了一个高级套接字 API,用以补充标准套接字 API,以便充分利用 IPv6 扩展开发能力。
对 IPsec 的支持,能够实现主机之间或网络之间的安全通信,通过强大的加密算法提供数据保密性以及数据认证功能。对 IPsec 的支持还包括用于建立安全主机关联的互联网密钥交换(IKE,即 ISAKMP/Oakley)密钥管理协议。


QNX Neutrino TCP/IP 套件也是模块化的。例如,它将网络文件系统(NFS)作为独立模块提供。凭借这种模块化特性以及小巧的模块设计,嵌入式系统开发人员能够更轻松、更快速地构建具备 TCP/IP 功能的小型系统。

1.1. TCP/IP管理器的结构

作为资源管理器,io-pkt-* 得益于精简的代码以及所有本地资源管理器都具备的标准接口。由于 QNX Neutrino 进程间通信(IPC)具有天然的优先级继承特性,客户端将按照优先级和时间顺序得到处理,这使得 CPU 资源能得到更合理的分配。

io-pkt套件及其依赖项。
io-pkt套件及其依赖项。

点到点协议(PPP)是作为io-pkt的一部分来实现的。由于 io-pkt负责处理 PPP 数据包的传输,因此无需对数据包数据进行内存拷贝。这种方式可实现高性能的以太网上的点到点协议(PPoE)连接。
TCP/IP 协议套件的其他组件(例如网络文件系统等)是在io-pkt* 之外实现的。这样能实现更好的模块化以及具备更强的容错能力。

1.2. Socket API

伯克利软件套件(BSD)套接字应用程序编程接口(API)显然是 QNX Neutrino 实时操作系统(RTOS)的不二之选。该 API 是 UNIX 领域中进行 TCP/IP 编程的标准接口。在 Windows 领域,Windows 套接字(Winsock)API 基于 BSD 套接字 API 构建,并且与之有诸多共通之处,这使得在两者之间进行转换相当容易。

应用程序开发人员所期望的所有例程均可供使用,包括(但不限于)以下这些:

  • accept()(用于接受连接请求)
  • bind()(用于绑定地址和端口)
  • bindresvport()(用于绑定保留端口)
  • connect()(用于建立连接)
  • dn_comp()(域名压缩相关函数)
  • dn_expand()(展开域名相关函数)
  • endprotoent()(关闭协议数据库相关操作)
  • endservent()(关闭服务数据库相关操作)
  • gethostbyaddr()(通过网络地址获取主机信息)
  • gethostbyname()(通过主机名获取主机信息)
  • getpeername()(获取连接端的地址信息)
  • getprotobyname()(通过协议名获取协议信息)
  • getprotobynumber()(通过协议编号获取协议信息)
  • getprotoent()(获取协议数据库入口)
  • getservbyname()(通过服务名获取服务信息)
  • getservent()(获取服务数据库入口)
  • getsockname()(获取套接字的本地地址信息)
  • getsockopt()(获取套接字选项)
  • herror()(处理主机相关错误信息)
  • hstrerror()(将主机错误码转换为字符串描述)
  • htonl()(将主机字节序转换为网络字节序,长整型)
  • htons()(将主机字节序转换为网络字节序,短整型)
  • h_errlist(主机错误信息列表)
  • h_errno(主机错误编号)
  • h_nerr(主机错误信息数量)
  • inet_addr()(将点分十进制 IP 地址转换为网络字节序的整型表示)
  • inet_aton()(将点分十进制 IP 地址转换为网络字节序的二进制表示)
  • inet_lnaof()(获取 IP 地址的本地网络地址部分)
  • inet_makeaddr()(组合网络地址和本地地址部分生成 IP 地址)
  • inet_netof()(获取 IP 地址的网络地址部分)
  • inet_network()(将点分十进制 IP 地址转换为网络字节序的网络地址表示)
  • inet_ntoa()(将网络字节序的 IP 地址转换为点分十进制表示)
  • ioctl()(输入 / 输出控制操作)
  • listen()(监听端口,等待连接请求)
  • ntohl()(将网络字节序转换为主机字节序,长整型)
  • ntohs()(将网络字节序转换为主机字节序,短整型)
  • recv()(接收数据)
  • recvfrom()(从指定地址接收数据)
  • res_init()(初始化域名解析相关资源)
  • res_mkquery()(构建域名解析查询)
  • res_query()(执行域名解析查询)
  • res_querydomain()(在指定域名下执行域名解析查询)
  • res_search()(搜索域名解析信息)
  • res_send()(发送域名解析请求)
  • poll()(轮询 I/O 事件)
  • send()(发送数据)
  • sendto()(向指定地址发送数据)
  • setprotoent()(设置协议数据库相关操作)
  • setservent()(设置服务数据库相关操作)
  • setsockopt()(设置套接字选项)
  • shutdown()(关闭连接)
  • socket()(创建套接字)

如需更多信息,请参阅《QNX Neutrino C 语言库参考手册》。

互联网中常见的守护进程和实用工具可以很容易地在这个环境中进行移植或者直接编译。这使得在开发应用程序时能够轻松利用已有的相关资源。

1.2.1. 数据库例程(Database routines)

以下列出的数据库例程已经过修改,以便能更好地适配嵌入式系统。

文件节点 /etc/resolv.conf

你可以使用配置字符串(通过confstr()函数)来覆盖通常包含在 “/etc/resolv.conf” 文件中的数据。你也可以使用 “RESCONF” 环境变量来执行此操作。这两种方法中的任意一种都能让你在不使用 “/etc/resolv.conf” 文件的情况下使用域名服务器。这会对gethostbyname()以及其他域名解析例程产生影响。

文件节点 /etc/protocols

getprotobyname()getprotobynumber()函数已经过修改,使其包含少量内置协议,包括 IP 协议、互联网控制消息协议(ICNP)、用户数据报协议(UDP)以及传输控制协议(TCP)。对于许多应用程序来说,这意味着 “/etc/protocols” 文件并非必须存在。

文件节点 /etc/services

getservbyname()函数已经过修改,使其包含少量内置服务,包括文件传输协议(ftp)、远程登录协议(telnet)、简单邮件传输协议(smtp)、域名系统(domain)、网络新闻传输协议(nntp)、网络基本输入输出系统名称服务(netbios-ns)、网络基本输入输出系统会话服务(netbios-ssn)、太阳微系统远程过程调用(sunrpc)以及网络文件系统守护进程(nfsd)。对于许多应用程序而言,这意味着 “/etc/services” 文件并非一定要存在。

1.3. 多个协议栈(Multiple stacks)

QNX Neutrino 网络管理器(io-pkt)允许你加载多个协议共享对象。你甚至可以运行网络管理器(io-pkt*)本身的多个独立实例。与所有 QNX Neutrino 系统组件一样,得益于微内核架构,每个 io-pkt * 都能自然而然地从完备的内存保护中获益。

1.4. IP 过滤和网络地址转换(NAT)

进行 IP 过滤与 NAT(网络地址转换)的 io-pkt* 模块是一个可动态加载的 TCP/IP 协议栈模块。

lsm-pf-*.so 模块提供了高效的防火墙服务,具备以下功能特性:

  • 规则分组:可对不同的数据包应用不同的规则组;
  • 有状态过滤:一种可选配置,允许与已授权连接相关的数据包绕过过滤规则;
  • NAT:用于将多个内部地址映射到单个公网地址,使多个内部系统能够共享同一个公网 IP 地址;
  • 代理服务:允许文件传输协议(ftp)、网络基本输入输出系统(netbios)以及 H.323 协议使用 NAT;
  • 端口重定向:用于将传入流量重定向到内部服务器或服务器池。

IP 过滤和 NAT 规则可以在运行的系统中动态地添加或删除。该工具套件还提供了日志记录服务,以便对这个模块进行监控和管理。

1.5. NTP(Network Time Protocol)

网络时间协议(NTP,Network Time Protocol)能够让你将网络中各设备的时间与互联网标准时间服务器保持同步。QNX Neutrino 的网络时间协议守护进程同时支持服务器模式和客户端模式。

在服务器模式下,本地网络中的一个守护进程会与标准时间服务器进行同步。随后,它会将获取到的时间信息通过广播或多播的方式发送给本地网络中的客户端,或者等待客户端发起请求。之后,客户端的网络时间协议系统就会与服务器端的网络时间协议系统实现同步。网络时间协议套件实现了网络时间协议第 4 版,同时还保持了与第 3 版、第 2 版以及第 1 版的兼容性。

1.6. 动态主机配置

我们支持动态主机配置协议(DHCP),该协议用于获取 TCP/IP 配置参数。

我们的动态主机配置协议客户端(dhclient)会从动态主机配置协议服务器获取其配置参数,并为用户配置 TCP/IP 主机。这使得用户在不清楚主机需要哪些参数(如 IP 地址、网关等)的情况下,就能将主机添加到网络中。动态主机配置协议还允许系统管理员控制主机添加到网络中的方式。我们也提供了动态主机配置协议服务器守护进程(dhcpd)和中继代理(dhcrelay)来管理这些客户端。

如需更多信息,请查阅《实用工具参考手册》中关于 dhclient、dhcrelay 和 dhcpd 的条目内容。

1.6.1. 自动 IP

自动 IP(AutoIP)功能由零配置网络(Zeroconf)互联网工程任务组(IETF)草案发展而来,自动 IP 守护进程(autoipd)是一个 io-pkt* 模块,它能通过与网络中的对等节点进行协商,在无需服务器(与动态主机配置协议(DHCP)不同,DHCP 需要服务器)的情况下自动配置接口的 IPv4 地址。该模块还能与动态主机配置协议(DHCP,通过其客户端 dhclient 体现)共存,使得你的接口能够同时被分配一个链路本地 IP 地址以及一个由动态主机配置协议分配的 IP 地址。

@ >> 补充扩展:

Q:什么是自动IP?什么是DHCP?两者的区别?

自动 IP(Auto - IP)

  • 定义
    • 自动 IP 是一种在网络中自动配置设备 IPv4 地址的机制。它基于 Zeroconf(零配置网络)IETF 草案,通过设备与网络中的对等节点进行协商来确定自身的 IP 地址。这种方式不需要专门的服务器来分配地址,适用于小型的、临时的或没有 DHCP 服务器的网络环境。例如,在一个小型的家庭网络或临时搭建的办公网络中,如果没有配置 DHCP 服务器,设备可以利用自动 IP 来快速获得一个可用的链路本地 IP 地址,使设备能够在本地网络段内进行通信。
  • 工作原理
    • 设备在启动时,会在本地网络中发送探测消息,检查是否有其他设备正在使用特定范围内的 IP 地址。如果发现某个 IP 地址没有被使用,就会将该地址分配给自己。这个过程是通过与同一网络中的其他设备进行通信和协商来完成的,设备之间会交换信息以避免 IP 地址冲突。

动态主机配置协议(DHCP)

  • 定义
    • DHCP 是一种网络管理协议,用于集中分配和管理 IP 地址以及其他 TCP/IP 配置参数(如子网掩码、默认网关、DNS 服务器地址等)。它依赖于 DHCP 服务器来为网络中的客户端设备动态地分配 IP 地址。在大多数企业网络、校园网络以及家庭网络(如果有路由器作为 DHCP 服务器)中广泛使用。例如,当你将新的笔记本电脑接入公司的办公网络时,DHCP 服务器会自动为你的笔记本电脑分配一个在该网络中可用的 IP 地址,使你能够访问网络资源。
  • 工作原理
    • DHCP 的工作过程主要包括四个阶段:发现(Discover)、提供(Offer)、请求(Request)和确认(Acknowledge)。首先,客户端设备在网络中广播一个 DHCP 发现消息,寻找 DHCP 服务器。DHCP 服务器收到发现消息后,会从其可用的 IP 地址池中选择一个 IP 地址,并将该地址以及其他配置信息(如子网掩码、默认网关等)通过 DHCP 提供消息发送给客户端。客户端收到提供消息后,会发送一个 DHCP 请求消息,请求使用该 IP 地址。最后,DHCP 服务器发送一个 DHCP 确认消息,将 IP 地址正式分配给客户端,同时客户端将配置信息应用到自己的网络接口。

两者的区别

  • 配置方式
    • 自动 IP 是设备之间通过自主协商来配置 IP 地址,没有专门的服务器参与。而 DHCP 是由专门的 DHCP 服务器来集中管理和分配 IP 地址。
  • 适用场景
    • 自动 IP 适用于小型、临时或没有服务器支持的网络环境,如小型的家庭物联网设备网络或临时的对等网络。DHCP 适用于需要集中管理 IP 地址的网络环境,如企业网络、校园网络等,能够更有效地管理和分配 IP 地址资源,方便网络管理员进行网络规划和控制。
  • 功能丰富程度
    • DHCP 除了分配 IP 地址外,还可以为客户端提供子网掩码、默认网关、DNS 服务器地址等其他重要的 TCP/IP 配置参数。自动 IP 主要侧重于自动分配一个本地链路可用的 IP 地址,一般不涉及其他复杂的网络配置参数的分配。

1.7. PPP over Ethernet

QNX RTOS 支持以太网上点到点协议(PPPoE),它常被宽带服务提供商所采用。

QNX 对 PPPoE 的支持包含 io-pkt-* 协议栈以及 pppoectl 实用工具,pppoectl 实用工具可用于协商 PPPoE 会话。一旦 PPPoE 会话建立起来,pppd 守护进程就会创建一个点到点协议(PPP)连接。

当你使用 PPPoE 时,无需指定任何配置参数 —— 我们的模块会自动从你的互联网服务提供商(ISP)那里获取相应的配置数据,并为你完成所有设置工作。

如需更多信息,请查阅《实用工具参考手册》中的以下内容:

  • io-pkt:网络管理器。
  • pppoectl:用于显示或设置 PPPoE 接口的参数。

1.8. /etc/autoconnect

自动连接功能会在任何 TCP/IP 应用程序启动时,自动建立与互联网服务提供商(ISP)的连接。例如,假设你想要启动一个拨号上网连接。当你启动网络浏览器时,它会暂停运行,而“/etc/autoconnect”脚本将会自动拨打你的互联网服务提供商的号码进行拨号连接。当点到点协议(PPP)会话建立起来后,浏览器就会恢复运行。

如需更多信息,请查阅《实用工具参考手册》中关于 “/etc/autoconnect” 的条目内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/932112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实战:MyBatis适配多种数据库:MySQL、Oracle、PostGresql等

概叙 很多时候,一套代码要适配多种数据库,主流的三种库:MySQL、Oracle、PostGresql,刚好mybatis支持这种扩展,如下图所示,在一个“namespace”,判断唯一的标志是iddatabaseId,刚好写…

电子信息工程自动化 单片机彩灯控制

摘要 随着社会经济和科学技术的不断进步,人们在保持发展的同时,环境带给人类的影响已经不足以让我们忽视,所以城市的美化问题慢慢的进入了人们的眼帘,PLC的产生给带电子产品带来了巨大变革,彩灯的使用在城市的美化中变…

【后台管理系统】-【组件封装】

目录 组件封装搜索组件table列表组件content组件自定义插槽定制modal组件动态获取options数据 组件封装 搜索组件 给页面写一个配置文件,将配置文件传入组件,可直接生成页面,以下面页面为例, 新建src/views/main/system/depart…

「嵌入式系统设计与实现」书评:学习一个STM32的案例

本文最早发表于电子发烧友论坛:【新提醒】【「嵌入式系统设计与实现」阅读体验】 学习一个STM32的案例 - 发烧友官方/活动 - 电子技术论坛 - 广受欢迎的专业电子论坛!https://bbs.elecfans.com/jishu_2467617_1_1.html 感谢电子发烧友论坛和电子工业出版社的赠书。 …

设计模式:20、状态模式(状态对象)

目录 0、定义 1、状态模式的三种角色 2、状态模式的UML类图 3、示例代码 0、定义 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 1、状态模式的三种角色 环境(Context):环境是一个类&#xff0…

idea中新建一个空项目

目的,为了在同一个目录下有多个小的项目:使用IDE为idea2022。 步骤: 点击新建项目,点击创建空项目,这里选择空项目是将其作为其他项目的一个容器,如图所示: 然后点击文件->项目结构&#xf…

Java基础复习

“任何时候我也不会满足,越是多读书,就越是深刻地感到不满足,越感到自己知识贫乏。科学是奥妙无穷的。” ——马克思 目录 一、方法&方法重载 二、运算符 三、数据类型 四、面向对象 1. 面向对象思想 2. 引用传递 3. 访问权限修饰…

嵌入式里的“移植”概念

这里因为最近一年看到公司某项目很多代码上有直接硬件的操作,这里有感而发,介绍移植的概念。 一、硬件 先上一个图: 举个例子,大学里应该都买过开发板,例如st的,这里三个层次, 内核&#xff…

量子计算与商业转型之旅

近年来,各组织对量子计算的应用有所增加,并使全球商业运营发生了显著变化。《财富商业洞察》的一份报告显示,2022 年量子计算市场价值为 7.17 亿美元,预计到 2030 年将达到 65.28 亿美元。 从本质上讲,量子计算机与经…

周末和男朋友户外运动美好时光

周末的时光总是那么令人期待,仿佛一周的忙碌和疲惫都在这一刻得到了释放。这次,我和男朋友决定到户外去锻炼身体,享受一下大自然的馈赠。 清晨的阳光透过窗帘的缝隙洒进房间,我懒洋洋地睁开眼睛,看到男朋友已经在一旁整…

【Git】:标签管理

目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本:标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样…

QT的ui界面显示不全问题(适应高分辨率屏幕)

//自动适应高分辨率 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);一、问题 电脑分辨率高,默认情况下,打开QT的ui界面,显示不全按钮内容 二、解决方案 如果自己的电脑分辨率较高,可以尝试以下方案:自…

【Elasticsearch】初始化默认字段及分词

1、添加分词插件 1)在线安装 执行命令 需要指定相同的版本 bin/elasticsearch-plugin.bat install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.24 2)离线安装 将安装包解压到 /plugins 目录下 安装包可以从对应的资源处下载 启动成…

MATLAB直流电机模型,直流电机控制

直流电机控制简介 直流电机(DC motor)广泛应用于各种机械驱动和电力控制系统中,其运行性能的控制至关重要。为了精准地控制直流电机的输出特性,可以通过不同的控制方式进行调节。常见的控制方式包括电枢电流控制、速度控制、电机位…

Linux之封装线程库和线程的互斥

Linux之封装线程库和线程的互斥与同步 一.封装线程库二.线程的互斥2.1互斥量的概念2.2初始化和销毁互斥量2.3加锁和解锁2.4互斥量的原理2.5可重入和线程安全2.6死锁 一.封装线程库 其实在我们C内部也有一个线程库而C中的线程库也是封装的原生线程库的函数,所以我们…

PHP语法学习(第九天)—PHP连接mysql详解(下)

首先,温馨提示,该部分内容跟昨天“PHP语法学习(第八天)—PHP连接mysql详解(上)”一起食用更佳噢!! 学习本篇内容必须掌握数据库基础命令点击“MYSQL 数据库”~~ 本文是接着PHP连接mysql的知识点接着讲,今天主要讲述PHP…

qt基本部分控件用法(一)

前言: 以前 windows下做工具主要是MFC,趁有点空时间,研究了QT,感觉跟MFC 差不多,VS 比 QT CREATOR 还是强大,不过QT可以跨平台,功能更强大,MFC 只能在win平台下.; 1:环境…

Mysql索引,聚簇索引,非聚簇索引,回表查询

什么是索引 数据库索引是为了实现高效数据查询的一种有序的数据数据结构,类似于书的目录,通过目录可以快速的定位到想要的数据,因为一张表中的数据会有很多,如果直接去表中检索数据效率会很低,所以需要为表中的数据建立…

以MP6924A为核心的LLC拓扑学习【一】

PFCLLC: 在PFC(功率因数校正)和LLC(谐振变换器)组成的电源系统中,各个电路有特定的作用,它们协同工作以实现高效率和高功率因数的电能转换。 1. PFC(功率因数校正)电路的作用 PFC电…

️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南20241206

🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型的完整指南 📝 引言 随着大语言模型(LLM)和人工智能的飞速发展,越来越多的开发者尝试在本地环境中部署大模型进行实验。然而,由于资源需求高、网络限制多…