Ziel ist es, eine Datei (die Quelldatei) von einem
Server auf einen
Client zu übertragen, der eine Zieldatei hat, welche möglicherweise zu großen Teilen mit der Quelldatei übereinstimmt.
Dazu wird als erstes vom Client die Zieldatei in Blöcke einer bestimmten Länge unterteilt, für die jeweils zwei
Prüfsummen gebildet und an den Server übertragen werden. Die erste dieser Prüfsummen ist rollierend und daher für den Server dazu geeignet, schnell eine gegebenenfalls verschobene Bytesequenz mit der gleichen Prüfsumme in der Quelldatei aufzuspüren. Da sie allerdings anfällig für
Kollisionen ist, wird bei ihrer Übereinstimmung zunächst noch die zweite Prüfsumme getestet. Bei der zweiten Prüfsumme ist im Gegensatz zur rollierenden Prüfsumme eine Kollision praktisch ausgeschlossen,
[1] allerdings ist ihre Berechnung sehr viel aufwändiger. Diese zweite Prüfsumme wurde im ursprünglichen Entwurf mit dem
MD-4-Verfahren berechnet;
[2] seit dem Release 3.0.0 von rsync wird stattdessen
MD-5 benutzt, da MD-4 als nicht kryptographisch sicher gilt.
Mit den Prüfsummen generiert der Server Anweisungen, wie eine Kopie der Quelldatei aus den Datenblöcken der Zieldatei generiert werden kann. Für bereits auf dem Zielsystem vorhandene Blöcke werden Verschiebe-Vorschriften übertragen. Nur Daten, die sich nicht aus Blöcken der Zieldatei zusammensetzen lassen, werden direkt gesendet. Damit erhält der Client nun durch Befolgen dieser Vorschriften eine exakte Kopie der Quelldatei.