尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

远程桌面报“数据加密错误”莫慌,先关网卡TCP校验卸载试试

远程桌面报“数据加密错误”莫慌,先关网卡TCP校验卸载试试 前阵子帮一家客户处理远程桌面故障症状很典型局域网里的Windows Server 2022开了远程桌面白天办公时段一切正常一到下午4点之后几台Win10/Win11客户端就开始轮流掉线屏幕上弹出一句“由于数据加密错误这个会话将结束”。这句话的迷惑性非常大第一反应都会往账号密码、RD授权、TLS证书上去查可折腾了一圈之后才发现问题居然出在网卡设置里的TCP校验卸载TCP Checksum Offload上。这篇就把完整的排查思路和关闭教程整理出来给所有被“数据加密错误”折磨过的运维同行一个参考。先说结论远程桌面报“数据加密错误”不代表你的密码错了更不代表远程桌面服务被暴力破解了。它的本质是RDP通信过程中加密层的完整性校验失败底层数据在传输时已经被破坏。而网卡驱动里的校验卸载功能恰恰是导致这种破坏的高发嫌疑对象。1.1 “数据加密错误”是在哪一层抛出来的要理解这个报错得先看一眼RDP的数据流。客户端点“连接”之后实际上经历了这么几步TCP三次握手、TLS/SSL握手协商加密参数、CredSSP身份认证、建立会话、传输桌面图形数据。绝大多数情况下“数据加密错误”不会出现在输入密码的阶段而是出现在会话建立已经完成、开始刷桌面数据的时候。为什么会这样因为RDP的画布数据封装在加密通道里每一条TLS记录都自带完整性校验值。接收端拿到一段数据后要先做校验校验通过就正常显示校验不过就直接把整个会话掐掉。这和我们平时下载大文件后校验MD5是一个道理只不过RDP没有“重新下载”的机会它在协议层面就选择了最保守的处置方式立刻断开避免在错误数据的基础上继续解析。很多朋友第一次遇到这个报错时会疯狂检查远程桌面服务的“加密级别”设置。实际上组策略里的“加密级别”只是规定了RDP安全层使用哪种加密算法它管不到物理网卡和驱动这一层的数据完整性。如果加密算法配置没问题系统日志里又没有明显的TLS握手失败记录那就要把视野放到OSI模型的下层去。1.2 一个真实故障现场的完整还原那个客户的网络环境并不复杂一台Dell PowerEdge服务器做远程桌面主机双千兆网口做了Switch Embedded Teaming客户端走的是普通千兆交换机。故障现象有三个特征第一掉线时间集中在下午网络流量高峰期第二客户端本机和服务器之间互ping不丢包但RDP会话说断就断第三服务器端事件查看器里出现大量TerminalServices会话中断记录但并没有任何安全事件日志提示登录失败。我当时的排查顺序是先关了服务器端防火墙无效再换了一台全新安装的Windows 11笔记本测试同样掉线然后用Wireshark在服务器管理口上抓包终于发现了问题——客户端发出的TCP报文里校验和错误的比例明显异常而且这些坏包集中在某个网卡队列的接收方向上。这里要说明一个关键点抓包软件看到的“校验和错误”不一定是链路真实损坏很有可能是网卡硬件已经重新计算过校验和但抓包工具拿到的是协议栈里的原始数据两边对不上。不过结合“高峰期掉线”这个规律我当时已经基本锁定问题出在网卡卸载功能上。2. 网卡卸载功能为了省CPU结果弄坏了加密数据流2.1 TCP校验卸载到底在干什么TCP/IP协议在设计时为了保证数据在传输过程中没有被篡改给每个包都算了一个校验和。计算校验和的活儿传统上由CPU的TCP/IP协议栈完成。网卡的“校验卸载Checksum Offload”功能把这个计算任务从CPU挪到了网卡硬件上。理论上网卡硬件算校验和比CPU更快能释放不少CPU占用尤其在万兆网卡场景下收益非常明显。听上去很美但问题也出在这里。打个比方寄快递时仓库发货员本来要在包裹上贴一张重量标签现在改成由货车自己打印重量标签。如果货车的称重系统偶尔抽风贴上去的重量和实际重量对不上快递网点一复核发现不符就会把包裹原路退回。网卡卸载引擎就是这个“货车称重系统”它一旦在特定条件下算出错误的校验和接收方网卡一验证发现不符就会把数据包标记为损坏。这种损坏在普通上网场景下通常不会被察觉。比如打开网页TCP层遇到校验和错误的包会直接丢弃并要求重传浏览器只是慢了几十毫秒用户几乎感知不到。但RDP不一样它需要在一个低延迟的长连接里持续传输大量交互数据任何一个被上层加密层判定为“完整性校验失败”的包都会直接触发会话终止。2.2 千兆网卡高级设置里那些“默认开启”的坑现在的网卡无论是板载的Realtek 8125/8168、Intel I219/I225/I226还是Killer游戏网卡高级设置里都默认开启了一堆加速功能。和远程桌面掉线相关的主要有这么几个高级属性名称实际作用常见默认值故障相关性IPv4 Checksum Offload网卡硬件计算IPv4层校验和Enabled高TCP Checksum Offload (IPv4/IPv6)网卡硬件计算TCP层校验和Enabled高UDP Checksum Offload网卡硬件计算UDP层校验和Enabled低RDP走TCPLarge Send Offload V2 (LSO)大报文由网卡硬件分段减轻CPU负担Enabled中Energy Efficient Ethernet空闲时降低网卡功耗节省电能Enabled中Receive Segment Coalescing网卡把多个TCP分段合并后再交给CPUEnabled低很多驱动对名称的翻译还不一样比如Intel的驱动叫“校验和卸载”Realtek的驱动叫“TCP Checksum Offload(IPv4)”实际上说的是同一个东西。不熟悉的人打开这个窗口看到一大串英文缩写就直接懵了根本不知道哪些该动、哪些不该动这也是很多人明明故障就在眼前却不敢下手的原因。2.3 为什么RDP对这种错误格外敏感我之前一直强调一个观点RDP是一个“对数据完整性零容忍”的协议。普通HTTP应用遇到坏包可以重试下载工具遇到错误还能断点续传但远程桌面的图形数据是连续的、实时的、有严格顺序的。如果一个加密记录里的某个字节被网卡卸载引擎改错了TLS层计算出来的完整性校验值就对不上连接只能整个断掉。偶发一个坏包用户看到的就是一次“数据加密错误”掉线。这种问题还有个麻烦的地方它不是100%必现而是呈“概率性触发”的特征。流量小的时候网卡卸载引擎负载低一切正常流量一大驱动程序或者硬件状态稍微出点岔子就开始批量产坏包。排查的时候最难的就是“复现”因为很多时候你坐在电脑前盯着它它反而不掉了。3. 完整排查链路一步步把矛头指向网卡3.1 先区分系统层问题还是链路层问题遇到“数据加密错误”我建议先做一组快速分流测试而不是直接去动网卡设置。具体做法是查看服务器事件查看器里“Microsoft-Windows-TerminalServices-LocalSessionManager/Operational”日志如果日志显示会话是正常断开而不是异常终止说明客户端主动断开系统层认证大概率没问题。换一个完全不同品牌的电脑、网线、交换机端口连接远程桌面如果问题依旧基本可以排除单点硬件故障。在客户端和服务器两端同时抓包观察TCP重传率和对端窗口变化。重传率高于正常水平时链路层嫌疑就很大。这套分流动作看起来简单但非常有效。我自己见过太多同行一上来就重装网卡驱动、重装系统结果折腾半天问题还在。其实只要把问题层面的边界划清楚就能少走很多弯路。3.2 用排除法验证网卡驱动和硬件确认链路层有嫌疑之后再按“从易到难”的顺序做排除更新网卡驱动到官网最新版本注意不要用Windows Update推送的通用驱动。打开设备管理器找到网卡属性里的“电源管理”取消勾选“允许计算机关闭此设备以节省电源”。在网卡高级设置里把“Energy Efficient Ethernet”和“Power Saving Mode”设为Disabled。最后一步才是去关闭校验卸载类选项。需要说明的是前三步解决的是“网卡休眠后恢复异常”和“省电状态下手忙脚乱”的问题第四步才是直接针对“校验和错误”的精准打击。有些环境里关闭省电功能就已经能稳住那就不需要进一步关校验卸载。3.3 怎么找到网卡高级设置里的校验卸载选项Windows的网卡高级设置入口藏得比较深但找到一次之后就很直观了。右键“开始”菜单打开“设备管理器”展开“网络适配器”双击当前使用的网卡切到“高级”选项卡往下滚动就能看到一大串功能选项。不同驱动在“高级”选项卡里显示的名称不太一样但核心关键词就几个Checksum、Offload、LSO、Coalescing、EEE。只要看到带这些词的项目基本就是本文讨论的范畴。我遇到过的驱动里Intel和Realtek的驱动翻译还算友好Killer的驱动默认还会自带一个“Killer Control Center”软件里面也有网络加速开关这个软件偶尔会覆盖网卡驱动里的设置排查时要一并考虑。3.4 真正定位元凶的“反向验证法”在我处理的那个案例里把IPv4 Checksum Offload和TCP Checksum Offload都改成Disabled之后远程桌面立刻恢复稳定。但做到这一步还不算完为了确认到底是哪个选项在作怪我后续又逐个把选项恢复成Enabled每恢复一个就做一次高负载连接测试。最终发现是TCP Checksum Offload单独开启就会出问题而IPv4 Checksum Offload开关都无所谓。这种“反向验证法”非常建议照搬先全部关闭确认稳定再逐个开启找到罪魁祸首。不要图省事直接把所有卸载功能永久关闭因为有些卸载功能在正常驱动下是有性能收益的。4. 关掉TCP校验Windows端操作教程4.1 图形界面修改法通过设备管理器修改最直观步骤非常简单右键“开始”菜单打开“设备管理器”。展开“网络适配器”双击正在使用的物理网卡注意不要选“Microsoft Wi-Fi Direct Virtual Adapter”这类虚拟网卡。切到“高级”选项卡在“属性”列表里找到“TCP Checksum Offload (IPv4)”。把右侧的“值”从“Enabled”改成“Disabled”点击确定。如果驱动里只有“IPv4 Checksum Offload”这个笼统选项也要一并改掉。修改完成后网络会瞬断一下这个是正常现象不需要重启电脑。如果你用的是无线网卡高延迟环境下远程桌面本身就不稳定但“数据加密错误”的概率也比有线网卡高一些建议优先测试时改用有线连接排除无线信号干扰这一变量。4.2 PowerShell命令行修改法在服务器或需要批量处理多台电脑时图形界面太慢了用PowerShell效率更高。先运行下面的命令看当前网卡的高级属性名称和对应的注册表键值Get-NetAdapterAdvancedProperty -Name 以太网 | Format-Table DisplayName, DisplayValue, RegistryKeyword注意中文系统的网卡名是“以太网”英文系统是“Ethernet”。如果你不确定先用Get-NetAdapter查看当前激活的网卡名称。看到了RegistryKeyword之后用Set-NetAdapterAdvancedProperty精确关闭校验Set-NetAdapterAdvancedProperty -Name 以太网 -RegistryKeyword *ChecksumOffloadIPv4 -RegistryValue 0 Set-NetAdapterAdvancedProperty -Name 以太网 -RegistryKeyword *ChecksumOffloadTCP -RegistryValue 0不同驱动对RegistryKeyword的命名规则略有差异有的是*ChecksumOffloadIPv4有的是*TCPChecksumOffloadIPv4。所以执行之前一定要先用Get-NetAdapterAdvancedProperty查清楚当前驱动实际使用的关键字不要照抄命令。这也是我踩过的坑一开始按网上的命令直接执行结果系统提示找不到对应属性白费了十分钟。4.3 建议修改的参数清单针对远程桌面“数据加密错误”场景我建议按下面的表格处理。表格里的“建议状态”是针对故障排查阶段不是永久方案参数建议状态备注IPv4 Checksum OffloadDisabled优先级最高TCP Checksum Offload (IPv4)Disabled优先级最高TCP Checksum Offload (IPv6)Disabled如果内网使用IPv6则关闭否则可先不动Large Send Offload V2 (IPv4)Disabled优先级中等问题还未解决时关闭UDP Checksum Offload保持默认RDP主流场景走TCP影响不大Energy Efficient EthernetDisabled减少省电状态干扰Green EthernetDisabledRealtek驱动常见这里特别提醒一句不要为了省事把所有跟网卡相关的卸载功能全部关闭。像“虚拟机队列VMQ”“Receive Side Scaling”这些功能在现代服务器网卡上对多核负载均衡很有帮助乱关反而会引入新的性能问题。目标要精准就是校验卸载和可能会导致报文被网卡重写的功能。4.4 局域网远程桌面用户的一个忠告如果你所在的网络是普通办公局域网路由器、交换机都比较老旧关闭校验卸载后问题通常会立刻消失。但如果问题只在特定时间段出现我仍然建议做一次持续观察不要改完设置就撒手不管。TCP校验卸载功能本身是成熟的绝大多数环境下它工作得很好。它“惹祸”往往是驱动版本和特定网卡的兼容性问题而不是这个功能的设计初衷有问题。驱动会在Windows更新时被悄悄重装高级属性里的自定义值也会被重置回默认。如果说有什么一劳永逸的做法那就是记下当前设置并定期检查。我自己习惯把重要机器的网卡高级属性导出到CSV存档Get-NetAdapterAdvancedProperty -Name 以太网 | Export-Csv -Path D:\backup\nic-settings.csv -NoTypeInformation以后驱动更新出现异常直接拿这个CSV比对各参数恢复成本极低。5. 如果你对端是Linux或虚拟化环境也要学会看offload5.1 ethtool -k 一眼看清当前卸载状态Windows远程桌面的服务端不只有Windows Server很多朋友实际是在Linux主机上用虚拟化方案跑Windows虚拟机或者用Linux工作站作为客户端。这种情况下网卡卸载问题的排查思路是一样的只是工具换成了ethtool。查看网卡当前所有卸载功能的状态ethtool -k enp3s0 | grep -E checksum|tcp-segmentation|generic-segmentation|rx-gro|tx-gso输出内容大致是这个样子tx-checksumming: on tx-checksum-ipv4: on tx-checksum-ipv6: on scatter-gather: on tcp-segmentation-offload: on udp-fragmentation-offload: on generic-segmentation-offload: on generic-receive-offload: on看到tx-checksum-ipv4: on就意味着发送方向上的IPv4校验和由网卡计算。如果现象和Windows场景一致就可以先关掉它试试。5.2 用tcpdump确认校验和错误在Linux端tcpdump抓到包后Wireshark或tshark可以帮你进一步确认校验和问题。一个比较实用的快速检查方法是sudo tcpdump -i enp3s0 -n tcp port 3389 -c 1000 | tail -n 20如果再配合-vv参数tcpdump会对TCP报文的checksum做校验并在异常时输出类似checksum mismatch的标记。不过要注意tcpdump对checksum的校验结果同样存在“抓包点不同导致误报”的问题。最可靠的方式还是看对端的反应——如果对端不断重传或直接断开说明数据确实不完整。5.3 Linux下临时关闭和永久生效临时关闭发送方向和接收方向的校验卸载sudo ethtool -K enp3s0 tx off rx off立即查看效果ethtool -k enp3s0 | grep checksum此时tx-checksumming应该显示为off。这个修改重启网卡或者重启系统后就会失效需要永久生效的话可以用systemd服务来实现。我常用的做法是创建一个oneshot服务[Unit] DescriptionDisable NIC checksum offload Afternetwork-online.target Wantsnetwork-online.target [Service] Typeoneshot ExecStart/usr/sbin/ethtool -K enp3s0 tx off rx off ExecStart/usr/sbin/ethtool -K enp3s0 sg off tso off gso off gro off RemainAfterExityes [Install] WantedBymulti-user.target把它保存到/etc/systemd/system/disable-offload.service然后执行sudo systemctl daemon-reload sudo systemctl enable --now disable-offload.service5.4 虚拟化环境里的额外排查点如果Windows远程桌面跑在VMware或Hyper-V虚拟机里故障还可能来自宿主机物理网卡到虚拟交换机的链路。VMXNET3这类半虚拟化网卡自带卸载功能但它的卸载引擎依赖宿主机物理网卡并不会独立计算校验和。我处理过一个案例宿主机物理网卡的Tx Checksum Offload出了问题虚拟机里无论怎么改Windows设置都没用最后是关闭宿主机物理网卡的校验卸载才解决。所以遇到虚拟机里的远程桌面掉线排查顺序应该是先测宿主机物理网卡再测虚拟交换机最后才轮到虚拟机内部的网卡设置。不要一上来就钻进虚拟机里折腾。6. 改完之后怎么验证以及几个容易混淆的近邻问题6.1 定向测试比“用两天看看”靠谱得多关闭校验卸载后不要只是开着远程桌面挂机那样等半天也可能复现不了。我建议做一组定向压力测试让问题在短时间内暴露确认修复有效先在局域网内复制一个大文件比如从服务器复制一个4GB的镜像到本地让网络流量拉起来。复制进行的同时打开一个新的远程桌面连接持续做一些滚动页面、拖动窗口的操作。重复三次以上如果“数据加密错误”不再出现基本可以判断问题被解决。如果测试期间依旧掉线再考虑关闭Large Send Offload或者检查交换机端口的双工模式和CRC错误计数。有些交换机支持查看端口的CRC错误包计数这也是一个很有用的辅助指标。在交换机管理界面上找到服务器所连的端口看统计信息里有没有持续增长的Rx CRC Errors。如果一直增长说明物理链路层面的丢包/错误是真实存在的网卡设置反而是背锅侠。6.2 常见网卡型号的表现差异供你快速参考这些年经手过不少现场环境简单总结一下不同网卡在RDP场景下的表现。注意这只是个人经验不代表某个品牌的所有批次都有问题网卡型号常见表现Realtek 8168/8111板载最常见老驱动开启Checksum Offload时偶发RDP掉线更新官网新驱动或关闭校验可解决Realtek 8125 2.5G在2.5G模式下部分驱动对RSC和LSO支持有bug关闭LSO比关闭Checksum更管用Intel I219-V/I225-V/I226-V整体稳定但开启EEE时偶发“唤醒后掉线”优先关闭EEEKiller E2400/E2500自带管理工具会实时调整网卡参数建议先在管理工具里关掉“自动优化”再排查6.3 “0x204”、“授权过期”这些别和网卡问题混为一谈远程桌面相关的报错五花八门但不是所有报错都能靠网卡设置解决。“0x204”错误通常表示“无法连接到远程计算机”主要排查方向是网络连通性、防火墙放行规则、远程桌面服务状态、目标主机是否关机——和网卡校验卸载关系不大。还有一种很常见的提示“远程桌面授权模式尚未配置。远程桌面服务将在11天后停止工作。”这个纯粹是Windows Server的RD授权问题需要到“远程桌面服务”管理工具里配置授权模式并在远程桌面授权管理器中激活授权服务器。测试环境可以用评估授权模式满足临时需求生产环境必须购买并通过正规渠道配置RDS许可这不是通过修改网卡或注册表能绕过的。为什么我要单独提这些因为我在实际处理中见过太多次“病急乱投医”数据加密错误没解决然后看到0x204又去改防火墙看到授权过期又去网上找各种工具最后绕了一大圈发现网卡校验才是根因。把报错分类清楚才能避免这种混乱。6.4 设置被重置三个最容易忽略的原因关闭校验卸载后过了一段时间又复发大概率是下面三种情况之一Windows更新自动升级了网卡驱动高级属性被重置为驱动默认值。这是最常见的“复发”原因。网卡电源管理里的“允许计算机关闭此设备以节省电源”又被开启尤其是笔记本睡眠唤醒后。Killer、Realtek等网卡自带的控制中心软件在后台“自动优化”覆盖了你手动设置的值。这种管理软件建议设置成不自动运行或者卸载后用系统驱动。我在前面提到的PowerShell导出CSV存档就是为了应对这类问题。每次Windows大版本更新之后直接把存档里的关键项重新比对一遍能省去大量反复测试的时间。就我个人而言现在遇到远程桌面报“数据加密错误”第一反应已经不会去改什么加密级别或者重装系统了。先把网卡高级属性里的校验卸载关掉做一遍定向压力测试大概率就能真相大白。这台机器的问题解决后我又顺手把另外几台同样型号网卡的电脑也改成了相同的配置从那之后整个办公室再没出现过类似掉线。所以排查这类问题最重要的不是记住某个固定的答案而是建立一套“报错→分层定位→精准修改→反向验证”的流程。希望这篇内容能帮你少走几趟弯路一次就把问题按下去。
返回列表