1

我正在浏览rsync实用程序,在“确定文件的哪些部分已更改”部分中说:发送方计算其文件版本中每个大小为 S 的块的滚动校验和,甚至是重叠的块

疑点来了:

  • 为什么接收方计算非重叠块的校验和,而发送方计算大小为 S 的重叠块?
  • 收件人和发件人的尺寸 S 是否相同?
  • 什么是重叠块?是吗,假设您的文本为:接收方将计算校验abcdefgh和并将其发送给发送方。然后发送者将计算校验和:, , , , (是这个重叠的块)并与接收者进行比较。s=4abcdefghabcdbcdecdefdefgefgh
  • 那么它如何计算发送方和接收方不同的差异部分?
4

1 回答 1

4

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

发件人和收件人的大小 S 必须相同。否则,永远不会期望校验和和散列匹配。

更详细的算法解释可以在这里找到。很明显,S 在发送者和接收者上是相同的。

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

abcdefghijkl

和 S = 4。接收方将向发送方发送abcd, efgh,ijkl的校验和和哈希值。

假设在发送方的文件中插入一个字符 X:

abcdeXfghijkl

它将计算校验和:

abcd
bcde
cdeX
deXf
eXfg
Xfgh
fghi
ghij
hijk
ijkl

它将这些与从接收方收到的校验和进行比较,并确定它abcd没有ijkl改变。它所需要发送的只是eXfgh,并带有应该替换该efgh块的说明。

于 2013-10-18T03:32:24.637 回答