后台智能传输服务

后台智能传输服务（Background Intelligent Transfer Service，缩写BITS）是微软在Windows 2000及后续版本中包含的一个组件。它有助于利用空闲网络带宽在计算机之间异步、有优先级及自我限制地传输文件，并主要在较新版本的Windows Update、Microsoft Update、Windows Server更新服务和系统管理服务器用于交付修补程式到客户端。反病毒软件Microsoft Security Essentials（及之后的Windows Defender）也使用它获取签名更新，并且微软的即时通讯产品会使用它来传输文件。BITS通过组件对象模型（COM）接口供外部调用。

**技术**
BITS只采用空闲的带宽传输数据。通常来说，BITS在后台传输数据，即BITS仅在其他应用程序没有使用带宽时传输数据。BITS支持在中断后继续传输。
BITS的1.0版只支持下载。自1.5版开始，BITS支持下载与上传。上传需要接收方使用网际网路资讯服务及BITS服务器扩展。

**传输**
BITS会代表请求的应用程序异步完成传输，即应用程序请求BITS服务进行传输后，可以自由地去执行其他任务，乃至终止。只要网络已连接并且任务所有者已登录，则传输就会在后台进行。当任务所有者未登录时，BITS任务不会进行。
BITS将在网络连接断开或操作系统关闭时暂停所有正在进行的传输。在计算机重新开启并恢复网络连接时，它将从之前的位置继续重新开始传输。BITS支持通过SMB、HTTP和HTTPS进行传输。

**带宽**
BITS只会尝试利用空闲带宽。例如，当应用程序使用80%的可用带宽时，BITS将只使用剩下的20%。 BITS会不断监控网络流量以增加或减少流量，并遏制自己的传输以确保其他前台应用程序（如网页浏览器）获得所需的带宽。注意，BITS不需要测量实际带宽。BITS 3.0及更高版本将尝试使用互联网网关设备计数器，从而更准确地计算可用带宽。如果其不可用，BITS将使用网卡（NIC）报告的速度来计算带宽。这可能导致带宽的计算错误，例如当快速的网络适配器（如10 Mbit/s）通过慢速链路（56 kbit/s）接入网络。

**任务**
BITS采用队列管理文件传输。一个BITS会话是由一个应用程序创建一个任务（Job）而开始。一个任务就是一份容器，它有一个或多个要传输的文件。新创建的任务是空的，需要指定来源与目标URI来添加文件。下载任务可以包含任意多的文件，而上传任务中只能有一个文件。可以为各个文件设置属性。任务将继承创建它的应用程序的安全上下文。BITS提供API接口来控制任务。通过编程可以来启动、停止、暂停、继续任务以及查询状态。在启动一个任务前，必须先设置它相对于传输队列中其他任务的优先级。默认情况下，所有任务均为正常优先级，而任务可以被设置为高、低或前台优先级。BITS将优化后台传输被，根据可用的空闲网络带宽来增加或减少（抑制）传输速率。如果一个网络应用程序开始耗用更多带宽，BITS将限制其传输速率以保证用户的交互式体验，但前台优先级的任务除外。

**调度**
BITS的调度采用分配给每个任务有限时间片的机制，一个任务被暂停时，另一个任务才有机会获得传输时机。较高优先级的任务将获得较多的时间片。BITS采用循环制处理相同优先级的任务，并防止大的传输任务阻塞小的传输任务。
在任务新建时，它被自动挂起（暂停），等待明确的继续（激活）。继续会将任务转移到排队状态。在它开始传输数据时，它首先需要连接到远端服务器，然后开始传输。在任务的时间片到期时，传输将被暂停，任务返回到排队状态。当作业获得另一个时间片时，它必须重新连接才能传输。当任务完成时，BITS将任务的所有权转移到创建任务的应用程序。
BITS内置有一个错误处理和尝试恢复的机制。错误可以是致命（fatal）或暂时（transient）的，这分别移动错误到不同的状态；暂时错误可以在一段时间后自我解决。对于暂时错误，BITS会等待一段时间并重试。对于致命错误，BITS会将任务的控制转移到创建它的应用程序，并尽量提供错误的相关信息。

**工具**
BITSAdmin date=20140321144807  - BITS管理工具，管理BITS任务的命令行工具。
它存在于 Windows XP Service Pack 2 Support Tools date=20220117044312 或 Windows Server 2003 Service Pack 1 Support Tools date=20051217103848 及两者的更新版本中，以及是Windows Vista中的标准命令行工具。在Windows 7，BITSAdmin.exe已不推荐使用，建议改用Windows PowerShell cmdlets。

**版本历史**
 版本1.0（2001年10月）
** 初始版本。包含在Windows XP RTM中。- 版本1.2（2002年7月）
** 包含在Windows XP Service Pack 1和Windows 2000 Service Pack 3中。Windows 2000的BITS将自动更新功能带入了操作系统的核心。
** 没有其他外部变更。- 版本1.5（2003年9月）
** 包含在Windows Server 2003，并提供适用于Windows 2000和Windows XP的单独下载。
** 添加上传和上传回复能力，事件的命令行执行，显式凭证，以及对Windows 2000的支持。- 版本2.0（2004年8月）
** 包含在Windows XP Service Pack 2和Windows Server 2003 Service Pack 1中，并可以为Windows 2000 Service Packs 3、4以及Windows XP和Server 2003的早期版本单独下载。 
** 添加支持：并发执行前台下载，为远程名称使用Server Message Block路径，下载文件某部分，更改远程名称的前缀或完整名称，以及限制客户端的带宽使用。
** BITS 2.0是Windows Server Update Services必备设施。- 版本2.5（2007年6月）
** 添加对在安全HTTP传输和自定义HTTP标头时基于证书的客户端身份验证的支持。
** 支持IPv6。
** 可以为Windows XP和Windows Server 2003下载，并包含在Windows XP Service Pack 3中。 - 版本3.0（2006年11月）
** 添加支持：加入域的计算机可以对等缓存（允许同一子网中的计算机从对等端下载内容，以及将内容提供给对等端）；在文件已下载时得到通知；在下载进行时访问临时文件；控制HTTP重定向。BITS 3.0还使用互联网网关设备计数器来更准确地计算可用带宽。
** 添加组策略来控制对等缓存、下载时间和任务数量与文件下载。BITS 3.0还会将诊断和故障排除事件写入系统日志，可以使用事件检视器查看。
** BITS 3.0随Windows Vista引入，并包含在后续Windows版本中。BITS 2.5功能也包含在Windows Vista和Windows Server 2008中。- 版本4.0（2009年7月）
** 随Windows 7和Windows Server 2008 R2引入，并可用于Windows Vista SP2和Windows Server 2008 RTM
** 添加一个新的资源访问模型，允许应用程序使用BITS分配两个不同权限的访问令牌进行BITS传输任务。
** 对于Windows Server，BITS 4.0添加了一个基于HTTP的文件服务器，称为BITS紧凑型服务器，适用于同一个域内的计算机。
** 更细粒度的带宽限制组策略。
** 在BITS 4.0中，对等缓存模型已不推荐使用，并被BranchCache子网级对等缓存取代。- 版本5.0（2012年8月）
** 随Windows 8和Windows Server 2012引入。
** 添加新的应用程序编程接口（API） 
** 可以允许或禁止BITS任务通过按流量计费/蜂窝链路传输。 
** BITS 5.0也包含在Windows 8.1和Windows 10中。 Windows 10中的BITS版本支持在PowerShell远程会话中的传输任务。

**使用BITS的非微软应用程序**
 AppSense：使用BITS在客户端安装软件包。-  BITS Download Manager date=20200815174921 ：一个面向Windows的下载管理器，它创建BITS任务。-  BITSync：开源工具，在SMB网络共享上执行使用BITS执行文件同步。- Civilization V：使用BITS下载游戏模组（mod）包。- EVE Online：它使用BITS下载所有补丁。也在客户端修复工具中使用。- 部分Google服务（包括Chrome、Gears, Pack和YouTube Uploader）使用BITS。date=2013-04- KBOX Systems Management Appliance：一个系统管理应用程序，可以使用BITS来交付文件到Windows系统。- RSS Bandit：使用BITS下载网络供稿中的附件。-  Oxygen media platform：使用BITS分发媒体内容和软件更新。-  SharpBITS date=20180122034559 ：一个适用于Windows的开源下载管理器，它处理BITS任务。-  WinBITS date=20190518063307 ：一个适用于Windows的开源下载器，它创建BITS任务来下载文件。- Novell ZENworks Desktop Management：一个系统管理软件，可以使用BITS来交付应用程序文件到工作站。-  Specops Deploy/App date=20201220233322 ：一个系统管理软件，在可用时使用BITS在后台交付包到客户端。

**参见**
 Windows 组件列表- 文件传输协议列表

**参考资料**

**外部链接**
  Background Intelligent Transfer Service in Windows Server 2003 date=20100315050413 -  Background Intelligent Transfer Service in Windows Server 2008 date=20170826192541 -  BITS version history date=20071012032532