скользящие контрольные суммы в алгоритме rsync - PullRequest
7 голосов
/ 08 октября 2009

Я пытаюсь понять, как алгоритм rsync работает в отношении скользящих контрольных сумм и блоков, которые совпадают в шахматном порядке.

Кажется, на странице википедии отправитель и получатель рассчитывают и обменивают скользящие контрольные суммы для всех возможных блоков. Но это будет означать отправку по существу одной контрольной суммы на байт! Я должен что-то упустить. Как это работает, чтобы выровнять блоки?

например. если S = ​​16 байтных блоков, и отправитель имеет этот текст для файла A:

Быстрая коричневая лиса перепрыгивает через ленивые собаки

и получатель имеет этот текст для файла B:

Быстрая коричневая лиса перепрыгнула через ленивый пес

как будет работать обмен rsync?

1 Ответ

15 голосов
/ 08 октября 2009

Получатель вычисляет и отправляет скользящие контрольные суммы только для непересекающихся блоков. Наоборот, отправитель вычисляет его для каждого возможного блока (но сохраняет результат локальным). Тогда для отправителя, это просто вопрос проверки, совпадает ли один из неперекрывающихся блоков (отправленных получателем) с любым (перекрывающимся) локальным блоком.

Ваш пример слишком прост, чтобы увидеть что-нибудь интересное, два последних блока просто не будут совпадать и будут отправлены на слияние.

С более интересным примером (верхний регистр - блок):

Отправитель:

A B Cabc D

приемник:

A B C D

Получатель отправит MD5 и скользящий хеш для A, B, C и D. Отправитель будет вычислять скользящий хеш для каждого (перекрывающегося) блока, он будет соответствовать для A, для B, для C и для D. Поскольку abc не совпадает, он отправит его с информацией где слить его.

...