RDP协议详解
以下内容包含对 RDP(Remote Desktop Protocol,远程桌面协议)及其开源实现 FreeRDP 的较为系统、深入的讲解,涵盖协议概要、历史沿革、核心原理、安全机制、安装与使用方法、扩展与未来发展趋势等方面,
---
## 一、引言
远程桌面技术是现代信息技术不可或缺的重要组成部分,无论在企业内部还是个人场景中都发挥着至关重要的作用。通过远程桌面协议,用户可以在异地访问并控制另一台计算机的桌面环境,不仅可以进行文件访问,甚至能够进行完整的图形化操作和应用程序运行,从而极大地提升工作效率和灵活性。微软推出并不断完善了 RDP(Remote Desktop Protocol,远程桌面协议),在 Windows 平台上构建了广泛且可信赖的基础设施。与此同时,为了在开源社区及跨平台领域进一步增强此类应用的可扩展性,不同的组织和爱好者基于微软的技术规范进行了逆向工程或基于公开协议详细文档,开发出了多种跨平台远程桌面解决方案,FreeRDP 就是其中的佼佼者。
针对 RDP 协议本身和 FreeRDP 工程的发展历程,本文将进行较为翔实的讨论,包括 RDP 协议的基本架构、通信原理、图形渲染方法以及加密和安全性机制等;同时还会重点阐述 FreeRDP 的安装、使用、特性、扩展能力以及在实际场景中的优化经验,使读者从理论到实践都能对 RDP 和 FreeRDP 有一个系统全面的认识。
---
## 二、RDP 协议概述
RDP(Remote Desktop Protocol)是微软设计和实现的一种多通道协议,用于远程连接 Windows 系统的桌面环境,使客户端可以仿佛身处目标计算机之前一样进行图形交互、音频播放、文件操作等。RDP 在最初的 Windows NT 4.0 Terminal Server Edition 中已经出现,之后在 Windows 2000、Windows XP、Windows Server 2003 等多个操作系统逐步演化。如今,RDP 已成为远程连接到 Windows 系统的事实标准之一。
RDP 协议位于应用层之上,利用 3389 端口进行网络传输。它采用多通道设计,将不同类型的数据(如键盘鼠标输入、图形数据、设备映射等)分配到各自的逻辑通道,以便进行更好的带宽利用和流量控制。RDP 协议的核心目标是将服务端桌面变化经过编码后高效地传输到客户端,并让客户端的输入操作可以及时传回服务端,形成流畅的远程交互体验。
在网络层面,RDP 可以使用 TLS(Transport Layer Security)加密,从而为数据传输提供机密性与完整性保护。为适应不同网络带宽和延迟,RDP 还在编码方式上提供了多种编解码算法,并支持压缩以及图形差分传输等策略,以减小带宽占用并提升用户体验。
---
## 三、RDP 的历史与发展
RDP 的发展可以分为早期阶段与持续演进两个大方面。早期,微软的设计目标是为终端服务器(Terminal Services)提供远程连接功能,使多用户可以共享一台性能较强的 Windows 服务器。而后随着 PC 计算能力的不断提升和网络基础设施的逐步完善,远程桌面逐渐变得日常化,越来越多的普通个人用户也开始用远程桌面进行维护、访问或协同工作。
在 Windows XP 及 Windows Server 2003 时代,RDP 版本逐步升级,加入了更高效的图像编码以及更好的安全特性。Windows Vista / Windows Server 2008 时代,RDP 引入了多种增强功能,包括多显示器支持、改进的音视频重定向、USB 设备重定向等。进入 Windows 7 / Windows Server 2008 R2 乃至 Windows 10 及后续版本后,RDP 又在图形渲染、视频解码、网络拥塞控制、触控支持等方面均有持续改进。
在此过程中,随着 RDP 协议的日趋完善,开源社区对 RDP 的研究兴致高涨,纷纷试图通过逆向工程或官方文档(有时微软会公开部分协议规范,以促进互操作性)了解其细节。最终,FreeRDP 以及 xrdp 等多种与 RDP 协议互操作的开源项目得以成长并形成一定规模。但是,RDP 的核心依旧由微软掌控,其在各大 Windows 平台中的实现始终所占份额最高。
---
## 四、RDP 协议的核心原理
### 4.1 多通道结构
RDP 的多通道结构是其重要特征之一,协议将不同类型的数据映射为不同的逻辑通道,以便独立处理和控制。例如:
- **主会话通道**:用来传输主要的图形数据、输入数据等。
- **输入设备通道**:专门处理键盘、鼠标以及触控笔等用户输入消息。
- **音频通道**:处理音频数据的双向传输(如远程播放声音、或将本地麦克风输入传给服务端)。
- **剪贴板通道**:支持剪贴板共享,使两端能够复制粘贴文本或文件。
- **设备重定向通道**:允许将本地打印机、存储设备、智能卡读取器等映射到远程主机。
多通道结构便于 RDP 针对不同类型的数据应用不同的压缩、打包算法,有效提升整体效率和吞吐。
### 4.2 图形编码与传输
RDP 需要不断将服务端操作系统桌面(Windows 桌面)上的绘图指令或最终渲染结果发送给客户端。最初,RDP 使用的是基于 GDI(Windows 图形设备接口)的绘图命令转发;后来为提升性能,引入了更高级的图像压缩编码,甚至在比较新版本中也考虑到多媒体播放的需求,对视频流进行专用的编解码策略。
常见的图形传输方式包括:
- **BitBlt** 操作序列:将像素块复制、移动或绘制到屏幕区域,客户端处理相同的绘图指令来重建画面。
- 基于 **RemoteFX** 的渲染增强:RemoteFX 是微软为 RDP 引入的一套扩展组件,通过更高效的编码,在弱网络环境下也能获得较为流畅的图形、视频和 3D 渲染能力。
### 4.3 输入设备映射
在远程桌面中,完整的用户交互需要将客户端的鼠标、键盘等输入反射到服务端系统,这要求 RDP 提供精细的事件转发机制。客户端监测到鼠标移动、点击或键盘敲击等操作后,会将这些指令通过输入通道发送给服务端,从而让远程 Windows 系统将其视为本地输入进行处理,实现真正的远程操控。
### 4.4 安全与加密
RDP 默认使用 3389 TCP 端口,支持多种安全层级,最简单的方式是基于 TLS 进行加密,也可以采用微软专有的多层安全机制(CredSSP、RDP Security Layer、TLS Security Layer 等)。在较新的版本中,大多数情况下都推荐启用 TLS 来确保会话的加密传输与身份验证,以防中间人攻击、窃听或冒充服务器等风险。
---
## 五、RDP 协议的安全机制
RDP 的安全不只依赖网络层的 SSL/TLS 加密,也包括以下机制:
1. **网络级身份验证(NLA)**:即 CredSSP(Credential Security Support Provider),要求客户端在建立远程桌面会话之前先通过一轮凭证验证(如用户名密码、或其他认证方式),从而有效防止在远程连接尚未完成协商时对服务器资源的恶意利用。
2. **双向身份验证**:服务器需要向客户端展示有效的证书,而客户端也需要向服务器提供正确的账号密码或其他认证手段,保证双方身份都可信。
3. **策略与组策略控制**:在 Windows 域环境或本地策略中,管理员可以设定 RDP 连接的加密级别、是否允许弱加密算法、是否需要强制使用网络级身份验证等。
4. **集中监控与日志**:企业在使用 RDP 时往往还采用相关的日志审计工具,对终端服务器的会话进行监控与记录,以满足合规与安全需求。
当然,RDP 也存在潜在的风险,例如如果系统未打安全补丁,则可能存在针对 RDP 协议的漏洞(如著名的“BlueKeep”漏洞),因此保持系统更新、启用访问控制和强密码策略至关重要。
---
## 六、RDP 协议的典型应用场景
1. **服务器远程维护**:管理员可在数据中心或异地通过 RDP 登录并管理 Windows Server 系统,执行软件安装、故障排除、服务重启等运维操作,无需亲临现场。
2. **虚拟桌面基础架构(VDI)**:企业可通过 RDP 向用户提供虚拟机的桌面访问,将所有应用及数据集中在服务器端,方便管理与维护,还可统一进行安全策略布置。
3. **跨区域协同办公**:在疫情或互联网普及的背景下,很多个人或组织都需要在家办公或异地协同,RDP 可使他们直接访问公司内部计算机的图形界面。
4. **应用程序远程发布**:借助 Terminal Services 或 RemoteApp 模式,企业可只将特定应用程序的窗口发布给客户端,而非整个桌面,提升安全性和易用性。
---
## 七、FreeRDP 简介
FreeRDP 是一个基于 Apache License 2.0 协议开源的 RDP 客户端实现项目,最早起源于 rdesktop(另一个早期的开源 RDP 客户端项目)社区。由于 rdesktop 的更新维护陷入瓶颈,部分开发者转而通过逆向和参考微软公开的协议文档,建立了全新的、模块化更好的 FreeRDP 项目。它旨在实现对最新版 RDP 协议的兼容,并提供丰富的扩展和配置能力。
FreeRDP 拥有以下显著特点:
- **跨平台支持**:支持在 Linux、FreeBSD、macOS、Windows(包含 Cygwin/MinGW 环境)等多种操作系统上编译运行。
- **丰富的特性集合**:覆盖音视频转发、剪贴板、多个安全层(TLS、NLA、RDP Security Layer 等)、多显示器以及 USB 重定向等多种功能。
- **插件化设计**:通过编写插件或模块,开发者可以为 FreeRDP 添加新的功能,比如自定义的加密、认证、图形渲染方式等。
- **不断追随微软的协议更新**:随着微软在 Windows 新版本中对 RDP 的改进,FreeRDP 社区也会尽量跟进并实现对应的新特性。
---
## 八、FreeRDP 重点特性
### 8.1 网络级身份验证 (NLA)
FreeRDP 支持基于 CredSSP 的网络级身份验证,这通常也是现代 Windows 系统默认启用的认证方式。通过命令行选项或配置,可灵活启用或禁用 NLA,并配合用户名、密码、域等信息进行登录。
### 8.2 TLS/SSL 加密
FreeRDP 能支持 TLS 连接,以对 RDP 会话进行加密,防止敏感信息在网络上被窃听。此外,如果服务器端启用了更高级别的安全策略,客户端需要配置正确的加密算法或证书验证方式。
### 8.3 多显示器支持
若用户使用多显示器环境,可以使用 FreeRDP 命令行参数告诉客户端启用多显示器模式,以在远程系统中映射多块显示设备,从而最大限度地模拟本地工作环境。
### 8.4 音视频与麦克风输入重定向
对于需要远程播放音频、视频或进行语音会话的场景,FreeRDP 的音频通道功能非常实用。用户可以将服务端的音频流重定向到本地播放,也可以将本地麦克风输入发送给服务端。
### 8.5 剪贴板同步
通过剪贴板通道,FreeRDP 可以实现远程主机与本地主机之间的文本或文件复制粘贴。对于跨系统的工作流程(比如在本地编辑一段文本再粘贴到远程应用里)非常方便。
### 8.6 USB 设备重定向
FreeRDP 还支持 USB over RDP 等扩展,通过特定插件可以把本地 USB 设备映射为远程系统可见的设备(如存储、摄像头、智能卡读卡器等),满足更广泛的应用需求。
---
## 九、FreeRDP 的安装与使用
在 Linux 发行版中,许多软件源都提供了预编译的 FreeRDP 包。例如在 Ubuntu/Debian 中,可以简单地通过以下命令进行安装:
```bash
sudo apt update
sudo apt install freerdp2-x11
```
安装完成后,就可以使用 `xfreerdp` 命令连接远程主机,示例命令如下:
```bash
xfreerdp /u:用户名 /p:密码 /v:远程主机地址
```
其中 `/v:` 后跟远程主机 IP 或域名,`/u:`、`/p:` 表示要使用的账户名和密码。若需要指定域,可使用 `/d:` 参数。例如:
```bash
xfreerdp /d:MYDOMAIN /u:john /p:123456 /v:192.168.1.100
```
另外,FreeRDP 命令行支持大量参数,比如:
- `/multimon` 用于启用多显示器
- `/sound` 用于接收远程音频
- `/mic` 用于发送本地麦克风输入
- `/clipboard` 开启剪贴板同步
- `/drive:盘符,本地路径` 映射本地文件夹
用户可根据需求灵活组合这些参数,定制化程度很高。
---
## 十、FreeRDP 的编译与常见参数
对于想要使用最新功能或对源码进行研究的开发者,可以从 FreeRDP 的 GitHub 仓库(https://github.com/FreeRDP/FreeRDP)克隆项目并自行编译。常见的编译流程大致如下:
1. **安装依赖**:FreeRDP 依赖 cmake、OpenSSL、libX11、libXext、libXinerama、libxcursor、libxdamage、libxkbfile、libpulse 等库。
2. **获取源码并创建构建目录**:
```bash
git clone https://github.com/FreeRDP/FreeRDP.git
cd FreeRDP
mkdir build && cd build
```
3. **调用 cmake**:
```bash
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_SSE2=ON -DWITH_CAIRO=ON ..
```
其中可以添加更多的选项,比如 `-DWITH_PULSE=ON` 以启用脉冲音频支持,`-DWITH_X11=ON` 以启用 X11 相关功能,等等。
4. **编译并安装**:
```bash
make -j4
sudo make install
```
在编译完成后,通过 `xfreerdp --version` 验证安装的 FreeRDP 版本,以确保编译选项正确生效。
---
## 十一、FreeRDP 的扩展与插件体系
FreeRDP 采用模块化结构,可以通过插件(插件也称“通道”)方式对某些功能进行额外扩展或更改。典型的扩展包括:
- **音视频编解码插件**:在特定网络环境或操作系统中,有针对性的使用不同的编解码库,以降低延迟或提升兼容性。
- **加密插件**:如果组织需要自定义的加密算法,或需要符合特定合规要求,可编写专用的加密插件。
- **外设重定向插件**:针对 USB、音频设备、甚至自定义硬件设备进行专用的映射,实现更多远程交互场景。
在设计插件时,需要熟悉 FreeRDP 的内部通道处理机制,并按照社区的接口规范进行封装,让主进程能够在启动或运行时动态加载相应插件。
---
## 十二、性能及优化
远程桌面的性能主要受网络状况、服务器端处理能力以及客户端解码能力的影响。当网络带宽有限或延迟较高时,图形传输将面临巨大的挑战。因此,在使用 FreeRDP 或任何 RDP 客户端时,可以从以下几个方向进行优化:
1. **降低分辨率或颜色深度**:在网络受限时,减少远程桌面的分辨率或采用 16 位色深,可以大幅度降低数据传输量。
2. **禁用窗口特效**:在 Windows 侧禁用过多的桌面特效(如 Aero 透明、动画等),可减少渲染传输的负担。
3. **适当提高图形压缩**:若服务器端支持 RemoteFX 或其他高级编码,可以在 FreeRDP 客户端中启用相应选项,但同时要考虑客户端 CPU 的解码能力。
4. **充分使用硬件辅助**:针对音视频流重定向时,若 FreeRDP 的编解码模块或操作系统支持 GPU 硬件解码,则可让客户端显卡分担解码工作,以提升流畅度。
5. **网络层面优化**:采用更稳定、低延迟的网络链路,或通过 VPN 进行就近接入,这些都能显著改善远程桌面体验。
---
## 十三、与其他远程桌面协议比较
在远程桌面领域,除了 RDP 以外,VNC(Virtual Network Computing)、TeamViewer 和 NoMachine(NX 协议)等也都广受使用。它们各有优缺点:
- **VNC**:相对简单、通用,跨平台度高,但在高延迟或低带宽下体验较差,通常没有 RDP 那样强大的多媒体优化支持。
- **TeamViewer**:商业化程度高,连接简单,支持穿透 NAT,适合临时远程协助,但对企业级扩展控制和自定义不够灵活。
- **NoMachine(NX 协议)**:对网络带宽的利用效率非常出色,压缩算法优秀,且可跨平台,但其开源版本的功能相对有限,部分特性需要付费版支持。
- **RDP**:整合度高,尤其对于 Windows 环境官方支持最好,Enterprise 级别的管理功能丰富,随着微软不断改进,其兼容性及效率均表现良好。
FreeRDP 则是专门面向 RDP 生态的一款开源客户端,在开放性与可定制化上具有相当大的优势。
---
## 十四、常见问题与故障排查
1. **无法连接或连接失败**
- 检查服务器 Windows 系统是否开启 RDP 服务,或在防火墙中放行 3389 端口。
- 确认是否启用了 NLA,如果客户端不支持 NLA 则会连接失败。
- 查看安全日志或使用 Wireshark 抓包诊断网络通信是否正常。
2. **身份验证错误**
- 若开启了网络级身份验证,需要确保客户端版本支持 CredSSP,且用户名密码无误。
- 当服务器使用自签名证书时,某些客户端可能会提示证书无效,需要在命令行中忽略证书验证或导入证书。
3. **图形或显示问题**
- 若远程桌面的分辨率超出客户端物理显示器上限,可能需添加 `/f`(全屏)或 `/size:WIDTHxHEIGHT` 参数。
- 如出现撕裂或画面卡顿,可尝试关闭 RemoteFX,或降低色深、分辨率后测试。
4. **设备重定向失败**
- 确认编译时启用了相关插件(如 USB、音频、打印机重定向)。
- Windows 侧也需要开启并允许对应的设备重定向策略,比如组策略中“允许音频重定向”等。
---
## 十五、未来发展趋势
在云计算与虚拟化技术的进一步发展下,远程桌面协议会在以下方向继续演变:
1. **更优化的多媒体体验**:包括高清视频和实时音频,甚至支持 AR/VR 相关的远程协作场景,需要在压缩与延迟之间取得更好平衡。
2. **混合云与容器化**:大量企业开始将 Windows 应用容器化或放置在混合云环境中,需要更灵活的远程访问方式,RDP 也会与容器技术、云控制面板结合更紧密。
3. **进一步提升安全性**:伴随网络威胁的不断升级,RDP 协议将与零信任体系的理念结合,通过更细粒度访问控制、多因素认证、行为监控等手段来应对恶意攻击。
4. **自动化运维与 DevOps 集成**:未来可能会有更多 RDP 的自动化管理接口,对远程桌面的监控、脚本化操作、批量部署等予以支持。
对于 FreeRDP 而言,随着微软在新一代的 Windows Server 和 Windows 10/11 继续升级 RDP 协议,项目也会引入新的特性扩展。社区保持活跃的开发状态,将不断合并各类 PR、修复漏洞、增强对特定平台或硬件的兼容性。相信 FreeRDP 在后续的远程桌面多样化应用中仍将扮演不可或缺的角色。
---
## 十六、总结
RDP 协议是微软在远程桌面领域的得力之作,它通过多通道架构、高效的图形与输入设备映射以及安全加密策略,成为 Windows 平台下远程访问的不二之选。无论是企业服务器运维、个人电脑协作,还是基于虚拟化/云桌面方案,RDP 都提供了稳定可靠的远程访问体验。
FreeRDP 作为开源世界中的重要实现,紧跟 RDP 协议的更新幅度,通过跨平台特性、插件式设计和灵活配置方式,满足了更广泛的使用需求。对普通用户而言,FreeRDP 提供了可替代官方 Windows 客户端的解决方案;对开发者和企业而言,FreeRDP 还能作为底层库被集成到自定义的远程桌面产品或功能中。
尽管远程桌面概念已不算新鲜,但随着云计算、分布式办公及远程运维的继续深化,RDP 与 FreeRDP 的应用前景仍旧广阔,甚至还会在各种新兴技术场景中衍生出新的使用模式。对广大技术爱好者、运维管理员或企业 IT 部门人员而言,深入了解 RDP 协议的工作原理,熟练掌握并运用 FreeRDP,无疑能够大大提高远程协作的效率和灵活性。
---
以上即是对 RDP 协议与 FreeRDP 的较为详尽介绍。希望通过对协议机制、历史演变、核心特性、安装配置与使用示例、常见问题及难点的剖析,让读者对二者的内涵与外延都有充分的理解,并能在实际场景中正确、熟练地加以运用。
相关文章:
RDP协议详解
以下内容包含对 RDP(Remote Desktop Protocol,远程桌面协议)及其开源实现 FreeRDP 的较为系统、深入的讲解,涵盖协议概要、历史沿革、核心原理、安全机制、安装与使用方法、扩展与未来发展趋势等方面, --- ## 一、引…...
Spring Boot - 数据库集成06 - 集成ElasticSearch
Spring boot 集成 ElasticSearch 文章目录 Spring boot 集成 ElasticSearch一:前置工作1:项目搭建和依赖导入2:客户端连接相关构建3:实体类相关注解配置说明 二:客户端client相关操作说明1:检索流程1.1&…...
虚幻UE5手机安卓Android Studio开发设置2025
一、下载Android Studio历史版本 步骤1:虚幻4.27、5.0、5.1、5.2官方要求Andrd Studio 4.0版本; 5.3、5.4、5.5官方要求的版本为Android Studio Flamingo | 2022.2.1 Patch 2 May 24, 2023 虚幻官网查看对应Andrd Studiob下载版本: https:/…...
Flutter开发环境配置
下载 Flutter SDK 下载地址:https://docs.flutter.cn/get-started/install M1/M2芯片选择带arm64字样的Flutter SDK。 解压 cd /Applications unzip ~/Downloads/flutter_macos_arm64_3.27.3-stable.zip执行 /Applications/flutter/bin/flutterManage your Flut…...
[免费]微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序智能商城系统(uniappSpringboot后端vue管理端),分享下哈。 项目视频演示 【免费】微信小程序智能商城系统(uniappSpringboot后端vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…...
rust操作pgsql、mysql和sqlite
rust中,有很多技术可以操作pgsql、mysql和sqlite,以sqlx为主流技术。我们以sqlx操作sqlite为示例,操作pgsql和mysql的办法是一样的。 Cargo.toml: [package] name "test" version "0.1.0" edition "2021"…...
5. 【Vue实战--孢子记账--Web 版开发】-- 主页UI
我们在实现个人中心的时候简单的搭建了一个主页UI,但是这个主页并不是我们需要的,在这一节我们将一起实现主页UI的搭建。 一、功能 主页UI的原型如下: 首页UI原型包括左侧菜单和顶部header,左侧菜单包含多个功能模块的链接:首页…...
RabbitMQ5-死信队列
目录 死信的概念 死信的来源 死信实战 死信之TTl 死信之最大长度 死信之消息被拒 死信的概念 死信,顾名思义就是无法被消费的消息,一般来说,producer 将消息投递到 broker 或直接到queue 里了,consumer 从 queue 取出消息进…...
使用 PyTorch 实现逻辑回归并评估模型性能
1. 逻辑回归简介 逻辑回归是一种用于解决二分类问题的算法。它通过一个逻辑函数(Sigmoid 函数)将线性回归的输出映射到 [0, 1] 区间内,从而将问题转化为概率预测问题。如果预测概率大于 0.5,则将样本分类为正类;否则分…...
Rust 函数使用详解
Rust 函数使用详解 函数是 Rust 程序的基本构建块之一。通过函数,我们可以将代码组织成可重用的模块。本文将从函数签名语法、函数参数、语句与表达式、函数返回值等角度详细介绍 Rust 函数的使用,并通过综合示例展示这些知识点的实际应用。 1. 函数签名…...
ARM TEE
在ARM的语境中,TEE是Trusted Execution Environment(可信执行环境)的缩写。ARM TEE就是基于ARM架构实现的可信执行环境,以下是具体介绍: 定义与原理 定义:ARM TEE是基于独立硬件,和主操作系统…...
Miniconda 安装及使用
文章目录 前言1、Miniconda 简介2、Linux 环境说明2.1、安装2.2、配置2.3、常用命令2.4、常见问题及解决方案 前言 在 Python 中,“环境管理”是一个非常重要的概念,它主要是指对 Python 解释器及其相关依赖库进行管理和隔离,以确保开发环境…...
解析 Oracle 中的 ALL_SYNONYMS 和 ALL_VIEWS 视图:查找同义词与视图的基础操作
目录 前言1. ALL_SYNONYMS 视图2. ALL_VIEWS 视图3. 扩展 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. ALL_SYNONYMS 视图 在 Oracle 数据库中,同义词(Synonym)是对数…...
C#面向对象(封装)
1.什么是封装? C# 封装 封装 被定义为“把一个或多个项目封闭在一个物理的或者逻辑的包中”。 在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。 抽象和封装是面向对象程序设计的相关特性。 抽象允许相关信息可视化,封装则使开发者实现所…...
【深度分析】DeepSeek大模型技术解析:从架构到应用的全面探索
深度与创新:AI领域的革新者 DeepSeek,这个由幻方量化创立的人工智能公司推出的一系列AI模型,不仅在技术架构上展现出了前所未有的突破,更在应用领域中开启了无限可能的大门。从其混合专家架构(MoE)到多头潜…...
【新春特辑】2025年1月科技浪潮中的AI最新时事与科技趋势
2025年1月科技浪潮中的AI最新时事与科技趋势 一、AI科技时事 人工智能代理(AI Agent)的发展 最新进展:人工智能代理正逐步成为科技领域的新热点。这些代理能够自主执行特定任务,如管理日程、回复邮件等。然而,它们仍…...
使用PyTorch实现逻辑回归:从训练到模型保存与性能评估
1. 引入必要的库 首先,需要引入必要的库。PyTorch用于构建和训练模型,pandas和numpy用于数据处理,scikit-learn用于计算性能指标。 import torch import torch.nn as nn import torch.optim as optim import pandas as pd import numpy as …...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.24 随机宇宙:生成现实世界数据的艺术
1.24 随机宇宙:生成现实世界数据的艺术 目录 #mermaid-svg-vN1An9qZ6t4JUcGa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vN1An9qZ6t4JUcGa .error-icon{fill:#552222;}#mermaid-svg-vN1An9qZ6t4JUc…...
C#面试常考随笔8:using关键字有哪些用法?
1. using 指令:引入命名空间 最常用的用法。通过using 命名空间名字,可以在程序中直接使用该命名空间中的类型,而无需指定类型的完整命名空间路径。例如: using System; using System.Collections.Generic; class Program {sta…...
lstm代码解析1.2
在使用 LSTM(长短期记忆网络)进行训练时,model.fit 方法的输入数据 X 和目标数据 y 的形状要求是不同的。具体来说: 1. 输入数据 X 的形状 LSTM 层期望输入数据 X 是三维张量,形状为 (samples, timesteps, features)…...
JavaScript系列(52)--编译优化技术详解
JavaScript编译优化技术详解 🚀 今天,让我们深入探讨JavaScript的编译优化技术。通过理解和应用这些技术,我们可以显著提升JavaScript代码的执行效率。 编译优化基础概念 🌟 💡 小知识:JavaScript引擎通常…...
【Python】第七弹---Python基础进阶:深入字典操作与文件处理技巧
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、字典 1.1、字典是什么 1.2、创建字典 1.3、查找 key 1.4、新增/修改元素 1.5、删除元素 1.6、遍历…...
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_82648291?typebbshttps://blog.csdn.net/2401_8264829…...
Electricity Market Optimization 探索系列(一)
本文参考链接:Linear Programming Mini Example 先从一个线性规划的例子说起: 问题背景: 现在需要使用两台发电机满足用户的用电需求,发电机一的发电功率上限是 6MW,发电机二的发电功率上限是 4MW,发电…...
<iframe>标签和定时调用函数setInterval
iframe 标签和定时调用函数 setInterval 问题描述:解决方法: 问题描述: 今天遇到一个前端问题,在浏览器页面上传Excel文件后,然后点击导入按钮,经后端Java类读取文件内容校验后,将校验结果返回…...
网工_HDLC协议
2025.01.25:网工老姜学习笔记 第9节 HDLC协议 9.1 HDLC高级数据链路控制9.2 HDLC帧格式(*控制字段)9.2.1 信息帧(承载用户数据,0开头)9.2.2 监督帧(帮助信息可靠传输,10开头…...
Elasticsearch:如何搜索含有复合词的语言
作者:来自 Elastic Peter Straer 复合词在文本分析和标记过程中给搜索引擎带来挑战,因为它们会掩盖词语成分之间的有意义的联系。连字分解器标记过滤器等工具可以通过解构复合词来帮助解决这些问题。 德语以其长复合词而闻名:Rindfleischetik…...
【Go语言圣经】第六节:方法
第六章:方法 6.1 方法声明 在函数声明时,在其名字之前放上一个变量,这就是声明了变量对应类型的一个方法,相当于为这种类型定义了一个独占的方法。 下例为 Point 类型声明了计算两个点之间距离的方法: package mai…...
[答疑]DDD伪创新哪有资格和仿制药比
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 远航 2025-1-24 10:40 最近的热门话题仿制药,想到您经常批评的伪创新,这两者是不是很像? UMLChina潘加宇 伪创新哪有资格和仿制药比。 仿制药的…...
MySQL(高级特性篇) 13 章——事务基础知识
一、数据库事务概述 事务是数据库区别于文件系统的重要特性之一 (1)存储引擎支持情况 SHOW ENGINES命令来查看当前MySQL支持的存储引擎都有哪些,以及这些存储引擎是否支持事务能看出在MySQL中,只有InnoDB是支持事务的 &#x…...
javascript常用函数大全
javascript函数一共可分为五类: •常规函数 •数组函数 •日期函数 •数学函数 •字符串函数 1.常规函数 javascript常规函数包括以下9个函数: (1)alert函数:显示一个警告对话框,包括一个OK按钮。 (2)confirm函数:显…...
第26节课:内容安全策略(CSP)—构建安全网页的防御盾
目录 CSP基础CSP的作用CSP的主要属性 配置CSP通过响应头配置CSP通过HTML <meta>标签配置CSP属性设置详解指定多个来源 配置示例说明 常见错误配置实践:CSP与XSS防护示例1:防止内联脚本和样式说明示例2:限制图片来源说明 限制与注意事项…...
【大坑】使用element-ui弹窗$confirm自动弹出
插入element-ui的弹窗后页面一刷新自动弹出,事件绑定、调用位置(生命周期)均没有问题,通过不断注释组件发现是main.js全局引入导致的问题。如果需要在某些组件中使用三方弹窗,可以按需引入,而不是全局注册 …...
Spring的AOP思想中事物管理注意点
我们以事务管理实现AOP思想 通过在Service层加入事务管理,因为Service层可能使用多个DAO(多条SQL语句) 要保证这些SQL要么同时成功,要么同时失败,例如:学生Serivce:删除学生的时候,还需要删除学生关联信息(选课信息) 只有都删除成功才提交,如果有一条执行失败…...
PHP Mail:高效邮件发送解决方案详解
PHP Mail:高效邮件发送解决方案详解 引言 在互联网时代,邮件作为最常用的沟通方式之一,已经成为企业和个人不可或缺的通讯工具。PHP作为一种流行的服务器端脚本语言,在邮件发送方面具有天然的优势。本文将详细介绍PHP Mail&…...
python recv的概念和使用案例
recv 是网络编程中用于从套接字接收数据的核心函数,常见于 TCP/UDP 通信。以下是其概念、用法和案例详解: 概念 作用:从已连接(TCP)或已绑定(UDP)的套接字接收数据。参数: bufsize:…...
安卓(android)读取手机通讯录【Android移动开发基础案例教程(第2版)黑马程序员】
一、实验目的(如果代码有错漏,可在代码地址查看) 1.熟悉内容提供者(Content Provider)的概念和作用。 2.掌握内容提供者的创建和使用方法。 4.掌握内容URI的结构和用途。 二、实验条件 1.熟悉内容提供者的工作原理。 2.掌握内容提供者访问其…...
Java知识速记 == 与equals
Java知识速记 与equals 1. 操作符概述 操作符用于比较基本数据类型的值,或者比较引用类型的对象是否指向同一内存地址。对于基本数据类型,例如int、float等,会比较其值;但对于对象,只会比较两个对象的引用ÿ…...
web集群
项目名称 基于keepalivednginx构建一个高可用、高性能的web集群 项目架构图 项目描述 基本描述 构建一个基于 Nginx 的 7 层负载均衡的 Web 集群系统,模拟企业级业务环境,实现高并发和高可用性的 Web 集群。通过压力测试验证集群性能,找…...
HTMLCSS :下雪了
这段代码创建了一个动态的雪花飘落加载动画,通过 CSS 技术实现了雪花的下落和消失效果,为页面添加了视觉吸引力和动态感。 大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能…...
Kafka SSL(TLS)安全协议
文章目录 Kafka SSL(TLS)安全协议1. Kafka SSL 的作用1.1 数据加密1.2 身份认证1.3 数据完整性1.4 防止中间人攻击1.5 确保安全的分布式环境1.6 防止拒绝服务(DoS)攻击 2. Kafka SSL 配置步骤(1)创建 SSL 证…...
WebForms SortedList 深度解析
WebForms SortedList 深度解析 引言 在Web开发领域,对于数据结构的理解与应用至关重要。其中,SortedList类在WebForms中是一个常用的数据结构,它能够帮助开发者高效地管理有序数据集合。本文将深入解析SortedList类在WebForms中的应用,包括其基本概念、常用方法、性能特点…...
项目集成Spring Security认证部分
一、需求分析 在本项目中,使用了Spring Security框架来进行认证和授权管理。由于是前后端分离的项目,所有认证的请求需要通过Token来验证身份,系统中包括了用户登录、角色授权以及资源访问控制等功能。 系统中的资源控制: 白名单…...
【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙
目录 1. 梯度基本计算 2. 控制梯度计算 3. 梯度计算注意 4. 小节 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活…...
【算法】回溯算法专题① ——子集型回溯 python
目录 引入变形实战演练总结 引入 子集 https://leetcode.cn/problems/subsets/description/ 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 …...
Nginx 安装配置指南
Nginx 安装配置指南 引言 Nginx 是一款高性能的 HTTP 和反向代理服务器,同时也可以作为 IMAP/POP3/SMTP 代理服务器。由于其稳定性、丰富的功能集以及低资源消耗而被广泛应用于各种场景。本文将为您详细介绍 Nginx 的安装与配置过程。 系统要求 在安装 Nginx 之…...
深度学习 DAY3:NLP发展史
NLP发展史 NLP发展脉络简要梳理如下: (远古模型,上图没有但也可以算NLP) 1940 - BOW(无序统计模型) 1950 - n-gram(基于词序的模型) (近代模型) 2001 - Neural language models&am…...
Spring Data JPA 实战:构建高性能数据访问层
1 简介 1.1 Spring Data JPA 概述 1.1.1 什么是 Spring Data JPA? Spring Data JPA 是 Spring Data 项目的一部分,旨在简化对基于 JPA 的数据库访问操作。它通过提供一致的编程模型和接口,使得开发者可以更轻松地与关系型数据库进行交互,同时减少了样板代码的编写。Spri…...
全程Kali linux---CTFshow misc入门(25-37)
第二十五题: 提示:flag在图片下面。 直接检查CRC,检测到错误,就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filen…...
【Elasticsearch】match_bool_prefix 查询 vs match_phrase_prefix 查询
Match Bool Prefix Query vs. Match Phrase Prefix Query 在 Elasticsearch 中,match_bool_prefix 查询和 match_phrase_prefix 查询虽然都支持前缀匹配,但它们的行为和用途有所不同。以下是它们之间的主要区别: 1. match_bool_prefix 查询…...