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. Процесс синхронизации состоит из нескольких этапов:
- Разбиение на блоки: Исходный файл на стороне отправителя разбивается на блоки фиксированного или переменного размера. Для каждого блока вычисляется хеш-сумма (контрольная сумма) с использованием алгоритма SHA-1 или MD5.
- Передача сигнатуры: Отправитель отправляет получателю сигнатуру файла — список хешей всех блоков. Получатель сравнивает полученные хеши с хешами блоков своей локальной копии файла.
- Выявление различий: Получатель определяет, какие блоки совпадают (не изменились), а какие отсутствуют или отличаются. Для отличающихся блоков получатель запрашивает у отправителя только эти фрагменты.
- Передача дельты: Отправитель передаёт только изменённые блоки. Получатель собирает новый файл, комбинируя неизменённые блоки своей локальной копии с полученными новыми блоками.
Этот подход позволяет избежать передачи всего файла целиком, если изменения затрагивают лишь небольшую часть данных. Например, при изменении одного абзаца в текстовом документе размером 100 МБ протокол передаст только несколько килобайт изменённых данных.
¶Классификация
¶По типу разбиения на блоки
- Фиксированное разбиение: Файл делится на блоки одинакового размера (например, 64 КБ). Простота реализации, но неэффективно при вставке или удалении данных в середине файла, так как сдвигает границы всех последующих блоков.
- Переменное разбиение: Размер блоков варьируется, а границы определяются на основе содержимого (например, по контрольной сумме скользящего окна). Более устойчиво к сдвигам данных, но сложнее в реализации.
¶По области применения
- Серверная репликация: Используется в DFSR для синхронизации данных между серверами в домене Active Directory.
- Удалённое резервное копирование: Применяется в некоторых решениях для резервного копирования, где требуется экономить трафик.
- Синхронизация файлов: Встроена в Windows для работы с сетевыми папками (например, в Windows 7 и 10 при использовании функции «Работа в автономном режиме»).
¶Устройство и характеристики
¶Алгоритмы хеширования
RDC использует два уровня хеширования:
- Блочные хеши: Для каждого блока вычисляется хеш с помощью SHA-1 (длина 160 бит) или MD5 (длина 128 бит). Эти хеши используются для сравнения блоков.
- Сигнатура файла: Список всех блочных хешей передаётся получателю. Размер сигнатуры пропорционален размеру файла (например, для файла 1 ГБ с блоками 64 КБ сигнатура составит около 2,5 МБ).
¶Размер блока
По умолчанию в RDC используется размер блока 64 КБ, но он может быть изменён администратором. Меньший размер блока увеличивает точность дифференциации, но увеличивает размер сигнатуры и нагрузку на процессор. Больший размер блока уменьшает накладные расходы, но снижает эффективность при малых изменениях.
¶Производительность
RDC эффективен при следующих условиях:
- Размер файла превышает 1 МБ.
- Изменения затрагивают менее 30–50 % содержимого.
- Пропускная способность сети ограничена (например, менее 1 Мбит/с).
- Задержка сети высока (более 50 мс).
При равномерном изменении всего файла (например, перекодирование видео) 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 →
