Введение

Компонент Microsoft Windows

Служба интеллектуальной передачи фона (Background Intelligent Transfer Service, BITS) — это компонент Microsoft Windows XP и более поздних версий операционной системы, обеспечивающий асинхронную, приоритезированную и регулируемую передачу файлов между компьютерами с использованием неиспользуемой пропускной способности сети. Она чаще всего используется в последних версиях Windows Update, Microsoft Update, Windows Server Update Services и System Center Configuration Manager для доставки обновлений программного обеспечения клиентам, антивирусным сканером Microsoft Security Essentials (более поздней версией Windows Defender) для загрузки обновлений сигнатур, а также продуктами мгновенных сообщений Microsoft для передачи файлов. BITS реализован через модель компонентных объектов (COM).

Технология

BITS использует неиспользуемую полосу пропускания для передачи данных. Как правило, BITS передает данные в фоновом режиме, то есть BITS будет передавать данные только тогда, когда доступна полоса пропускания, не используемая другими приложениями. BITS также поддерживает возобновление передачи в случае прерываний. Версия 1.0 BITS поддерживает только загрузку. Начиная с версии 1.5, BITS поддерживает как загрузку, так и выгрузку. Для выгрузки требуется веб-сервер IIS с расширением BITS Server Extension на стороне получателя.

Трансферы

BITS передает файлы от имени запрашивающих приложений асинхронно, то есть, как только приложение запрашивает у службы BITS передачу, оно может свободно выполнять любые другие задачи или даже завершить работу. Передача будет продолжаться в фоновом режиме, пока есть сетевое соединение и пользователь, инициировавший задачу, авторизован в системе. Задачи BITS не выполняются, если пользователь, инициировавший задачу, не авторизован. BITS приостанавливает любую текущую передачу при потере сетевого соединения или выключении операционной системы. Передача возобновляется с места остановки при восстановлении сетевого соединения (после включения компьютера). BITS поддерживает передачу данных по протоколам SMB, HTTP и HTTPS.

Пропускная способность

BITS стремится использовать только незанятую полосу пропускания. Например, если приложения используют 80% доступной полосы пропускания, BITS будет использовать только оставшиеся 20%. BITS постоянно отслеживает сетевой трафик, реагируя на любое увеличение или уменьшение нагрузки, и регулирует скорость своих передач, чтобы обеспечить необходимую полосу пропускания для других активных приложений (например, веб-браузера). Важно отметить, что BITS не обязательно измеряет фактическую пропускную способность. Начиная с версии 3.0, BITS будет использовать счетчики устройств интернет-шлюза, если они доступны, для более точного определения доступной полосы пропускания. В противном случае BITS будет использовать скорость, сообщаемую сетевым адаптером, для расчета пропускной способности. Это может приводить к ошибкам в расчете полосы пропускания, например, при подключении быстрого сетевого адаптера (10 Мбит/с) к сети через медленное соединение (56 кбит/с).

Рабочие места

BITS использует очередь для управления передачей файлов. Сессия BITS должна быть запущена из приложения путем создания задания. Задание — это контейнер, содержащий один или несколько файлов для передачи. Новое задание создается пустым. Файлы необходимо добавлять, указывая URI источника и назначения. Задание на скачивание может содержать любое количество файлов, а задание на загрузку — только один. Для отдельных файлов можно задавать свойства. Задания наследуют контекст безопасности приложения, которое их создало. BITS предоставляет доступ к API для управления заданиями. Задание можно программно запустить, остановить, приостановить, возобновить и запросить его статус. Перед запуском задания необходимо установить для него приоритет, чтобы определить порядок обработки задания относительно других заданий в очереди передачи. По умолчанию все задания имеют нормальный приоритет. Задания могут быть установлены с высоким, низким или фоновым приоритетом. BITS оптимизирует фоновые передачи, увеличивая и уменьшая (или ограничивая) скорость передачи в зависимости от объема доступной свободной пропускной способности сети. Если сетевое приложение начинает потреблять больше пропускной способности, BITS снижает скорость передачи, чтобы обеспечить комфортную работу пользователя, за исключением скачиваний с фоновым приоритетом.

Расписание

BITS планирует выполнение каждой задачи, выделяя ей лишь ограниченный временной интервал, в течение которого только эта задача может осуществлять передачу данных, после чего она временно приостанавливается, чтобы предоставить возможность передачи другой задаче. Задачи с более высоким приоритетом получают больший временной интервал. BITS использует алгоритм циклического планирования для обработки задач с одинаковым приоритетом и предотвращения блокировки небольших задач крупными передачами. При создании новой задачи она автоматически приостанавливается (или ставится на паузу). Для ее активации необходимо явно возобновить выполнение. Возобновление перемещает задачу в состояние очереди. Когда подходит ее очередь для передачи данных, она сначала подключается к удаленному серверу, а затем начинает передачу. По истечении временного интервала задачи передача временно приостанавливается, и задача возвращается в состояние очереди. Когда задача получает новый временной интервал, ей необходимо повторно подключиться, прежде чем она сможет продолжить передачу. После завершения задачи BITS передает право владения задачей приложению, которое ее создало. BITS включает встроенный механизм обработки ошибок и попыток восстановления. Ошибки могут быть критическими или временными, в зависимости от этого задача переводится в соответствующее состояние. Временная ошибка – это непостоянная ошибка, которая устраняется сама собой через некоторое время. При возникновении временной ошибки BITS ожидает некоторое время и затем повторяет попытку. В случае критических ошибок BITS передает управление задачей создавшему приложению, предоставляя максимально возможную информацию об ошибке.

Список приложений, не принадлежащих Microsoft, использующих BITS

AppSense – Использует BITS для установки пакетов на клиенты. BITS Download Manager – Менеджер загрузок для Windows, создающий задания BITS. BITSync – Утилита с открытым исходным кодом, использующая BITS для синхронизации файлов в сетевых папках Server Message Block. Civilization V – Использует BITS для загрузки пакетов модификаций. Инсталлятор Endless OS для Windows – Использует BITS для загрузки образов операционной системы. Eve Online – Использует BITS для загрузки всех патчей после Apocrypha (10 марта 2009 года). Также используется в инструменте восстановления клиента. Некоторые сервисы Google, включая Chrome, Gears, Pack, Flutter updater и YouTube Uploader, использовали BITS. Firefox (начиная с версии 68) – для обновлений. KBOX System Management Appliance – Устройство управления системами, которое может использовать BITS для доставки файлов в системы Windows. RSS Bandit – Использует BITS для загрузки вложений в веб-каналах. Медиаплатформа Oxygen – Использует BITS для распространения медиаконтента и обновлений программного обеспечения. SharpBITS – Менеджер загрузок с открытым исходным кодом для Windows, обрабатывающий задания BITS. WinBITS – Загрузчик с открытым исходным кодом для Windows, загружающий файлы посредством создания заданий BITS. Novell ZENworks Desktop Management – Программное обеспечение для управления системами, которое может использовать BITS для доставки файлов приложений на рабочие станции. Specops Deploy/App – Программное обеспечение для управления системами, которое (при наличии возможности) использует BITS для доставки пакетов клиентам в фоновом режиме.