用户名电脑用户名是什么
TortoiseGit是一款开放的系统操控软件,TortoiseGit是非常专业的文件服务器,那么,TortoiseGit如何更换用户名和密码呢?下面就是TortoiseGit如何更换用户名和密码的操...
2024.09.19Windows 更新的工作原理
Windows 服务器更新服务
验证场景客户端配置
服务端配置
验证过程实验环境准备
复现步骤
分析过程解决方案参考哎,这是个 Windows 的bug因为业务需要,需要验证 Windows 的更新系统在某个场景下是否正常工作。开始的时候一切如预期,结果后半段卡住了。不敢轻易怀疑是 Windows 的问题,毕竟 Windows 是服务亿万用户的,尤其是更新系统,用于 x86、x64、arm 等各个平台 Windows 系统的更新。只能从自己身上找原因:哪里的问题呢?是不是场景非官方支持?是不是测试环境搭建的有问题?是不是...虽然现在回过头来看这个问题很清楚,但当时掉坑里的时候,爬出来还真是费了点儿劲。下面介绍一下到底怎么回事儿。
背景知识这一部分只是简要介绍 Windows 更新原理及过程,详细内容可以参考系列文章《Windows update 技术详解系列》。
Windows 更新的工作原理1Windows 更新服务(Windows update) 是微软提供的一个工具,专门用于为 Windows 操作系统软件和基于 Windows 的硬件提供更新程序。更新程序可以解决已知的问题并帮助修补已知的安全漏洞。当使用该服务时,Windows update 将扫描计算机获取适用于当前计算机的软件和硬件的更新程序。Windows 更新过程分为四个阶段完成:扫描:计算机上的更新代理 Windows update Agent(WUA) 通过http通信连接到更新服务器,检查更新服务器上是否有适合当前设备的更新,若有,得到更新包下载url;下载:确定了适用于当前设备的更新后,下载服务(根据配置决定采用哪个下载程序)开始下载更新;安装:下载的更新文件交由安装代理(CBS或安装程序)安装;提交:安装更新后,根据需要重启设备以使更新生效;
本文讨论内容主要发生在 Windows 更新过程的下载阶段。
Windows 服务器更新服务2Windows 服务器更新服务(简称WSUS)作为企业组织内计算机 Windows 操作系统或者其他WSUS服务器的更新源。默认情况下WSUS服务器从 Windows update(微软更新服务器) 获取更新,包含更新包文件以及它的描述信息。
验证场景客户端配置企业网络环境复杂多样,一种可能的网络配置是企业内部计算机通过代理服务器访问网络,同时要求企业用户在使用代理服务器的时候进行身份认证。这是客户端的网络环境。
服务端配置Windows 有很多种更新包,仅每月都会发布的累积更新包大小约为几百MB,并且随着时间的推移增加。如果将WSUS作为开放服务,将所有的更新包文件放到同一台WSUS服务器并不是一个好的选择:随着更新包数量的增多,随着连接WSUS服务器的 Windows 更新客户端增多,WSUS 很大可能出现反应迟钝、负载过大、服务不可用现象。CDN 作为缓解服务端流量的一种有效方式,大多数服务器都可以利用CDN的支持进行部署,WSUS也不例外(详细实现方案见后续文章)。Windows 更新客户端请求更新包文件的url地址后,会被重定向到CDN,由CDN提供更新包文件的下载服务。整个场景的网络拓扑如下图所示:
企业内网用户计算机经由HTTP代理服务进行系统更新,代理服务器对用户身份认证通过后,继续请求更新服务器(update Server)。在内网用户计算机获得适用于该设备的更新包信息后,请求下载更新包文件。该更新包文件最终由CDN提供下载服务。
验证过程实验环境准备搭建代理服务器(squid http proxy),要求用户名和密码进行代理连接认证,配置为采用最基本的basic认证即可搭建 WSUS 更新服务器,配置更新包文件url重定向到CDN准备Windows 系统,版本信息:21H2 enterprise版本(操作系统内部版本19044.1202)Windows 配置组策略配置以设置 Windows 更新源为 WSUS: a.计算机配置 / 管理模板 / Windows 组件 / 传递优化 / 下载模式, 选择“启用”,选择“简单(99)” b.计算机配置 / 管理模板 / Windows 组件 / Windows 更新 / 允许来自Intranet Microsoft更新服务位置的签名更新,选择“启用” c.计算机配置 / 管理模板 / Windows 组件 / Windows 更新 / 不要连接任何Windows更新Internet位置,选择“启用” d.计算机配置 / 管理模板 / Windows 组件 / Windows 更新 / 配置自动更新,选择 "启用" e.计算机配置 / 管理模板 / Windows 组件 / Windows 更新 / 指定Intranet Microsoft更新服务位置,填入 update server 地址;选择"当使用系统代理进行检测时,允许将用户代理用作回退" 设置 Windows 更新使用代理服务: 设置 / 网络和Internet / 代理,在"手动设置代理"条目下填入代理服务器地址和端口,保存设置代理服务器认证信息: 控制面板 / 用户帐户 / 凭据管理器 / 添加普通凭据,输入代理服务器的用户名和密码 准备抓包软件: Wireshark 复现步骤以上环境准备完毕后,进行以下操作:
将适用于21H2的更新包导入到WSUS及CDN;对更新包进行审批;Windows 系统中利用wireshark进行抓包;点击 "设置" 中的 "Windows更新"。一段时间后,在更新面板处显示“正在下载进度为 0”。但等待较长时间后,仍无法下载更新。 最终会提示下载失败。
分析过程通过wireshark抓包分析,过程如下:
如图所示,更新包下载agent为 Microsoft-Delivery-Optimization(ms_do)
更新包下载过程抓包如图所示
对以上抓包内容进行分析,可以得到以下描述过程,
Microsoft-Delivery-Optimization(ms_do)首次请求下载更新地址后,未携带代理服务器的认证信息,在收到407(需要认证代理)的的返回报文后,再次请求下载更新地址后,携带认证信息。此后收到了来自 update server的 302 重定向报文。此后,ms_do不再携带认证信息进行新的地址请求。 对于更新包的下载止步于此!最终,下载超时后,提示下载失败。
解决方案这个问题在和微软的同学多次交流后,他们承认了这是 Windows 的一个bug,并说不会在这个版本的 Windows 中修复了,会在后面的版本中修复...
如果 Windows 一直没有修复,针对这个问题有什么解决方案呢?一个简单的解决方案是将代理服务器对用户的认证要求去掉,这虽然能够解决问题,但存在风险;进一步的方案是在代理服务器上添加"白名单",针对 Windows 更新包文件的请求不再验证用户身份,直接放行,其他网络访问要求认证。除了这两个,还有个更复杂一些的方案,这个放到后面再聊。 ^_^
参考How Windows update works (https://learn.microsoft.com/en-us/windows/deployment/update/how-windows-update-works)Windows Server update Services (WSUS) (https://learn.microsoft.com/en-us/windows-server/administration/windows-server-update-services/get-started/windows-server-update-services-wsus)TortoiseGit是一款开放的系统操控软件,TortoiseGit是非常专业的文件服务器,那么,TortoiseGit如何更换用户名和密码呢?下面就是TortoiseGit如何更换用户名和密码的操...
2024.09.19打开电脑,进入桌面。windows键+R输入:gpedit.msc(点确定)2.计算机I配置3.4.5.6.7.
2024.09.19电脑账户名称是指用户在电脑系统中的用户名。想要改变电脑账户名称,需要进行以下步骤。前言在进行更改电脑账户名称之前,请注意备份重要文件,以防万一。此外,在更改电脑账户名称时,需要管理员权限。操作步骤1....
2024.09.19前几天,有一位朋友咨询:快速格式化是什么?或许你知道快速格式化是什么?那你知道与格式化相关的,比如全面格式化是什么,低级格式化是什么,格式化了文件会丢失吗?可以找回吗?什么情况可以找回,什么情况不可以...
2024.09.20日常办公时,若电脑经常性的出现故障,对工作效率会产生极大的影响,试想一下当一个项目即将完工时,突然电脑黑屏,项目没有及时保存会让人非常抓狂。因此对于电脑黑屏这件事不容小觑,即便是偶尔出现一次也应该认真...
2024.09.20