使用 mstsc 连接远程主机时,如果弹出「由于协议错误(代码:0x112f),此会话将被中断,请重新连接到远程计算机」,说明 RDP 客户端与服务端之间的协议通道被异常终止了。微软官方对 0x112f 的解释很直接:远程计算机可用内存不足。但在实际场景里,网络传输层的问题同样会触发它,所以不能只盯着内存看。

典型表现有两种,值得先区分清楚:一是刚连上就立刻掉线,多半是配置或缓存问题;二是用一段时间后才断,且往往在打开大型程序或多个窗口之后,这种更倾向于内存耗尽。

方法一:检查远程主机的内存占用

这是命中率最高的一条。通过云服务商的网页控制台、VNC 或物理机键鼠登录目标机器,打开任务管理器查看内存使用率。如果长期在 90% 以上,结束占用大的进程或直接重启即可恢复连接。

想长期解决,除了加内存条或升级云主机配置,还可以把页面文件调大:在「系统属性 → 高级 → 性能设置 → 高级 → 虚拟内存」中改为自定义大小,初始值和最大值设为物理内存的 1.5 至 2 倍。对于 Windows Server,如果同时有多人远程登录,还应该检查是否有断开但未注销的会话在后台占用资源,可以用 quser 查看、logoff 清理,并在组策略里设置「已断开会话的时间限制」自动注销。

顺便在事件查看器中打开「应用程序和服务日志 → Microsoft → Windows → TerminalServices-RemoteConnectionManager」,里面会记录每次断开的具体原因,比盲猜有效得多。

方法二:在客户端关闭 UDP 传输

从 RDP 8.0 开始,远程桌面默认启用 UDP 来提升响应速度,但在丢包率较高、跨运营商或走 VPN 的线路上,UDP 通道不稳定会直接表现为协议错误。

专业版及以上系统运行 gpedit.msc,定位到「计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面连接客户端」,将「关闭客户端上的 UDP」设为“已启用”。家庭版没有组策略编辑器,可以改注册表,在 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Client 下新建 DWORD 值 fClientDisableUDP,数值设为 1,然后重新连接。

方法三:清理损坏的位图缓存

RDP 会把界面元素缓存到本地,缓存文件损坏是这个报错的已知诱因之一。关闭所有远程桌面窗口,删除 %LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache 目录下的全部文件即可,这些文件会自动重建,删除没有风险。

也可以在 mstsc 的「显示选项 → 体验」标签里取消勾选「持久位图缓存」,从根源上避开这个问题。

方法四:降低连接的资源开销

在 mstsc 中点开「显示选项」,把分辨率从全屏改为固定的较小值,颜色深度降到 16 位,取消「将所有监视器用于远程会话」,并在「体验」标签里选择较低带宽的连接方式,关闭桌面背景、字体平滑、视觉样式等效果。远程主机内存本就紧张时,这些设置能显著减少会话占用。

方法五:调整 MTU 与网卡卸载功能

如果连接经过 VPN 隧道或链路质量一般,过大的数据包会被分片甚至丢弃。以管理员身份打开命令提示符,先用 netsh interface ipv4 show subinterface 查看当前网卡名称,然后执行:

netsh interface ipv4 set subinterface "以太网" mtu=1400 store=persistent

虚拟化环境下还可以在「设备管理器 → 网络适配器 → 属性 → 高级」中关闭 Large Send Offload、Receive Segment Coalescing 等卸载选项,同时把网卡驱动更新到最新版本。

方法六:排除安全软件与系统版本因素

第三方杀毒软件和防火墙有时会拦截 RDP 的部分数据包,可以临时禁用做一次对比测试。另外确保客户端和服务端都安装了最新的 Windows 更新,早期版本的 RDP 组件存在若干已修复的兼容性缺陷。企业环境中如果通过 RD 网关连接,也需要检查网关服务器自身的资源与证书状态。

小结

排查顺序建议是:先看远程主机内存,再关客户端 UDP,然后清缓存、降画质,最后处理 MTU 和网卡卸载。按这个顺序走,绝大多数 0x112f 都能在前两步解决。如果所有方法都无效,可以考虑在服务端重置 RDP 服务(net stop TermService 后再启动),或者用 sfc /scannow 检查系统文件完整性。