2013-10-18 47 views
1

我正在经历rsync效用,并在段:确定文件的哪些部分已经改变它说:发件人计算为大小S的每个块的滚动校验和它自己的版本的文件,甚至重叠块重叠区块中的rsync算法

来了疑惑:

  • 为什么收件人计算校验和不重叠的块,但发送者计算大小S的重叠块?
  • 而且是大小S是相同的收件人和发件人?
  • 什么是重叠块?是否,假设您的文本为:abcdefghs=4比接收方将计算abcdefgh的校验和并将其发送给发件人。并且,发送方将计算校验和:abcd,bcde,cdef,defg,efgh(这是重叠的块)并与接收机进行比较。
  • 那么它是如何计算diff,即发送者和接收者不同的部分呢?

回答

4

如果收件人计算所有重叠块的滚动校验和,则会有与文件大小几乎一样多的校验和。因此,将校验和发送给发件人将比发送文件的全部内容更加昂贵,并且不会节省费用。因此,接收者将文件分成大块,不重叠的块,因此它可以发送少量的校验和和散列。

发送者和接收者的大小S必须相同。否则,校验和和散列永远不可能匹配。

该算法更详细的解释可以找到here。它清楚地表明发送者和接收者的S是相同的。

下面是一个例子。假设收件人的文件是:

abcdefghijkl 

和S = 4.接收者就会发送校验和散列为abcdefghijkl给发件人。

假设一个角色X插入到发件人的文件:

abcdeXfghijkl 

它将计算校验和:

abcd 
bcde 
cdeX 
deXf 
eXfg 
Xfgh 
fghi 
ghij 
hijk 
ijkl 

将比较这些来校验从接收者接收,确定abcdijkl没有改变。它需要发送的信息是eXfgh,说明应取代efgh块。

+0

+1谢谢你的努力。 – Trying