Открыть сервис

Remote Differential Compression

Remote Differential Compression (RDC) — это протокол сетевой передачи данных, предназначенный для эффективной синхронизации файлов между двумя компьютерами по сети с низкой пропускной способностью или высокими задержками. Основной принцип работы RDC заключается в том, что вместо полной передачи изменённого файла протокол вычисляет и передаёт только те фрагменты данных, которые были изменены или добавлены, используя метод дифференциального сжатия. Это позволяет значительно сократить объём передаваемого трафика и время синхронизации, особенно при работе с большими файлами, где изменения затрагивают лишь небольшую часть содержимого.

История

Протокол Remote Differential Compression был разработан корпорацией Microsoft и впервые представлен в составе операционной системы Windows Server 2003 R2 (выпущенной в 2005 году) и Windows Vista. Изначально RDC предназначался для оптимизации работы службы репликации файлов (File Replication Service, FRS) и Distributed File System Replication (DFSR) — компонентов, используемых в корпоративных средах для синхронизации данных между серверами. Позднее поддержка RDC была включена в Windows 7, Windows 8, Windows 10 и соответствующие серверные версии (Windows Server 2008, 2012, 2016, 2019, 2022).

В 2012 году Microsoft опубликовала спецификацию протокола RDC в рамках программы «Microsoft Open Specification Promise», что позволило сторонним разработчикам реализовывать его в своих продуктах без лицензионных отчислений. Однако RDC не получил широкого распространения за пределами экосистемы Microsoft, уступив место более универсальным протоколам, таким как rsync (использует алгоритм передачи дельты) и zsync.

Принцип работы

RDC работает на уровне приложений, используя транспортный протокол TCP/IP. Процесс синхронизации состоит из нескольких этапов:

  1. Разбиение на блоки: Исходный файл на стороне отправителя разбивается на блоки фиксированного или переменного размера. Для каждого блока вычисляется хеш-сумма (контрольная сумма) с использованием алгоритма SHA-1 или MD5.
  2. Передача сигнатуры: Отправитель отправляет получателю сигнатуру файла — список хешей всех блоков. Получатель сравнивает полученные хеши с хешами блоков своей локальной копии файла.
  3. Выявление различий: Получатель определяет, какие блоки совпадают (не изменились), а какие отсутствуют или отличаются. Для отличающихся блоков получатель запрашивает у отправителя только эти фрагменты.
  4. Передача дельты: Отправитель передаёт только изменённые блоки. Получатель собирает новый файл, комбинируя неизменённые блоки своей локальной копии с полученными новыми блоками.

Этот подход позволяет избежать передачи всего файла целиком, если изменения затрагивают лишь небольшую часть данных. Например, при изменении одного абзаца в текстовом документе размером 100 МБ протокол передаст только несколько килобайт изменённых данных.

Классификация

По типу разбиения на блоки

  • Фиксированное разбиение: Файл делится на блоки одинакового размера (например, 64 КБ). Простота реализации, но неэффективно при вставке или удалении данных в середине файла, так как сдвигает границы всех последующих блоков.
  • Переменное разбиение: Размер блоков варьируется, а границы определяются на основе содержимого (например, по контрольной сумме скользящего окна). Более устойчиво к сдвигам данных, но сложнее в реализации.

По области применения

  • Серверная репликация: Используется в DFSR для синхронизации данных между серверами в домене Active Directory.
  • Удалённое резервное копирование: Применяется в некоторых решениях для резервного копирования, где требуется экономить трафик.
  • Синхронизация файлов: Встроена в Windows для работы с сетевыми папками (например, в Windows 7 и 10 при использовании функции «Работа в автономном режиме»).

Устройство и характеристики

Алгоритмы хеширования

RDC использует два уровня хеширования:

  • Блочные хеши: Для каждого блока вычисляется хеш с помощью SHA-1 (длина 160 бит) или MD5 (длина 128 бит). Эти хеши используются для сравнения блоков.
  • Сигнатура файла: Список всех блочных хешей передаётся получателю. Размер сигнатуры пропорционален размеру файла (например, для файла 1 ГБ с блоками 64 КБ сигнатура составит около 2,5 МБ).

Размер блока

По умолчанию в RDC используется размер блока 64 КБ, но он может быть изменён администратором. Меньший размер блока увеличивает точность дифференциации, но увеличивает размер сигнатуры и нагрузку на процессор. Больший размер блока уменьшает накладные расходы, но снижает эффективность при малых изменениях.

Производительность

RDC эффективен при следующих условиях:

При равномерном изменении всего файла (например, перекодирование видео) RDC может быть менее эффективен, чем полная передача, так как накладные расходы на вычисление хешей и передачу сигнатуры могут превысить выигрыш от сжатия.

Применение

Репликация файловых серверов

Основное применение RDC — в службе репликации DFSR (Distributed File System Replication), которая входит в состав Windows Server. DFSR используется для синхронизации данных между несколькими серверами в распределённой файловой системе (DFS). Это позволяет обеспечить отказоустойчивость и доступность данных в корпоративных сетях. RDC в DFSR снижает нагрузку на сеть при репликации, особенно в сценариях с частыми небольшими изменениями (например, обновление документов в офисной среде).

Синхронизация файлов в Windows

В клиентских версиях Windows (начиная с Vista) RDC используется для оптимизации работы с сетевыми папками, настроенными на автономный доступ. При синхронизации изменений между локальной копией и сервером RDC передаёт только изменённые блоки, что ускоряет процесс и экономит трафик.

Резервное копирование

Некоторые системы резервного копирования (например, встроенные средства Windows Server Backup) могут использовать RDC для инкрементального копирования больших файлов. Однако в современных решениях чаще применяются более специализированные протоколы, такие как rsync или zsync.

Примеры

Пример 1: Репликация базы данных

Предположим, на сервере A и сервере B хранится файл базы данных размером 500 МБ. После внесения изменений на сервере A (добавлено 10 записей, что изменило 2 МБ данных) RDC передаёт только эти 2 МБ, а не весь файл. Это сокращает трафик в 250 раз.

Пример 2: Синхронизация документов

Пользователь редактирует текстовый документ размером 50 МБ, добавляя одну страницу (изменение ~0,5 МБ). При синхронизации с сетевым сервером RDC передаёт только изменённые блоки, что занимает несколько секунд вместо минут при полной передаче.

Критика

Несмотря на преимущества, RDC имеет ряд ограничений:

  • Зависимость от платформы: Протокол тесно интегрирован с Windows и не поддерживается нативно в Linux или macOS. Сторонние реализации (например, в Samba) ограничены и не всегда совместимы.
  • Высокие накладные расходы при малых файлах: Для файлов размером менее 1 МБ накладные расходы на передачу сигнатуры могут превышать выигрыш от дифференциальной передачи.
  • Уязвимость к хеш-коллизиям: Использование MD5 (в старых версиях) теоретически может привести к коллизиям, когда два разных блока дают одинаковый хеш, что вызовет ошибку синхронизации. В современных версиях используется SHA-1, что снижает риск.
  • Отсутствие поддержки сжатия: RDC не сжимает передаваемые данные, поэтому при передаче больших объёмов изменений эффективность может быть ниже, чем у протоколов с встроенным сжатием (например, rsync с опцией -z).

Сравнение с альтернативами

ПротоколПринцип работыПлатформыЭффективностьСложность
RDCДифференциальная передача блоковWindowsВысокая при малых измененияхСредняя
rsyncАлгоритм передачи дельты (rolling hash)Linux, macOS, Windows (через Cygwin)Высокая, поддерживает сжатиеВысокая
zsyncПередача дельты с использованием контрольных суммLinux, macOSВысокая для больших файловСредняя
HTTP/2 Server PushПолная передача файлаВсеНизкаяНизкая

Интересные факты

  • RDC был разработан на основе алгоритма, использовавшегося в ранних версиях Microsoft Remote Assistance для передачи изменений экрана.
  • В Windows Server 2008 R2 была добавлена возможность отключения RDC для отдельных реплицируемых папок, если администратор считал его неэффективным для конкретного сценария.
  • В Windows 10 и 11 RDC по умолчанию включён только для сетевых папок, настроенных на автономный доступ, и не используется для обычной передачи файлов через SMB.
  • Протокол RDC не следует путать с Remote Differential Compression API — интерфейсом программирования, который позволяет сторонним приложениям использовать алгоритмы RDC.

Источники

  • Microsoft Corporation. «Remote Differential Compression (RDC) Protocol Specification». MS-RDC, 2012.
  • Microsoft TechNet. «Distributed File System (DFS) Replication Overview». Windows Server Documentation.
  • Microsoft Docs. «Understanding Remote Differential Compression». 2016.
  • RFC 3220 (для сравнения с rsync). «The rsync Algorithm». 2002.
  • Книга: «Windows Server 2008: The Definitive Guide» by Mitch Tulloch, 2008 (глава о DFSR).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →