`
`[MS-RDC]:
`Remote Differential Compression Algorithm Specification
`
`
`
`Intellectual Property Rights Notice for Open Specifications Documentation
`
` Technical Documentation. Microsoft publishes Open Specifications documentation for
`protocols, file formats, languages, standards as well as overviews of the interaction among each
`of these technologies.
`
` Copyrights. This documentation is covered by Microsoft copyrights. Regardless of any other
`terms that are contained in the terms of use for the Microsoft website that hosts this
`documentation, you may make copies of it in order to develop implementations of the
`technologies described in the Open Specifications and may distribute portions of it in your
`implementations using these technologies or your documentation as necessary to properly
`document the implementation. You may also distribute in your implementation, with or without
`modification, any schema, IDL’s, or code samples that are included in the documentation. This
`permission also applies to any documents that are referenced in the Open Specifications.
`
` No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.
`
` Patents. Microsoft has patents that may cover your implementations of the technologies
`described in the Open Specifications. Neither this notice nor Microsoft's delivery of the
`documentation grants any licenses under those or any other Microsoft patents. However, a given
`Open Specification may be covered by Microsoft Open Specification Promise or the Community
`Promise. If you would prefer a written license, or if the technologies described in the Open
`Specifications are not covered by the Open Specifications Promise or Community Promise, as
`applicable, patent licenses are available by contacting iplg@microsoft.com.
`
` Trademarks. The names of companies and products contained in this documentation may be
`covered by trademarks or similar intellectual property rights. This notice does not grant any
`licenses under those rights.
`
` Fictitious Names. The example companies, organizations, products, domain names, e-mail
`addresses, logos, people, places, and events depicted in this documentation are fictitious. No
`association with any real company, organization, product, domain name, email address, logo,
`person, place, or event is intended or should be inferred.
`
`Reservation of Rights. All other rights are reserved, and this notice does not grant any rights
`other than specifically described above, whether by implication, estoppel, or otherwise.
`
`Tools. The Open Specifications do not require the use of Microsoft programming tools or
`programming environments in order for you to develop an implementation. If you have access to
`Microsoft programming tools and environments you are free to take advantage of them. Certain
`
`Open Specifications are intended for use in conjunction with publicly available standard
`specifications and network programming art, and assumes that the reader either is familiar with the
`aforementioned material or has immediate access to it.
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`1 / 76
`
`MICROSOFT
`
`EXHIBIT 1008
`
`Page 1 of 76
`
`
`
`
`
`Revision Summary
`
`Date
`
`Revision
`History
`
`Revision
`Class
`
`Comments
`
`03/14/2007
`
`1.0
`
`04/10/2007
`
`1.1
`
`05/18/2007
`
`1.2
`
`
`
`
`
`
`
`Version 1.0 release
`
`Version 1.1 release
`
`Version 1.2 release
`
`06/08/2007
`
`1.2.1
`
`Editorial
`
`Revised and edited the technical content.
`
`07/10/2007
`
`1.2.2
`
`Editorial
`
`Revised and edited the technical content.
`
`08/17/2007
`
`1.2.3
`
`Editorial
`
`Revised and edited the technical content.
`
`09/21/2007
`
`1.2.4
`
`Editorial
`
`Revised and edited the technical content.
`
`10/26/2007
`
`1.2.5
`
`Editorial
`
`Revised and edited the technical content.
`
`01/25/2008
`
`1.2.6
`
`Editorial
`
`Revised and edited the technical content.
`
`03/14/2008
`
`1.2.7
`
`Editorial
`
`Revised and edited the technical content.
`
`06/20/2008
`
`1.3
`
`Minor
`
`Updated the technical content.
`
`07/25/2008
`
`1.3.1
`
`Editorial
`
`Revised and edited the technical content.
`
`2.0
`
`Major
`
`Updated and revised the technical content.
`
`08/29/2008
`
`10/24/2008
`
`2.0.1
`
`Editorial
`
`Revised and edited the technical content.
`
`12/05/2008
`
`3.0
`
`Major
`
`Updated and revised the technical content.
`
`01/16/2009
`
`3.0.1
`
`Editorial
`
`Revised and edited the technical content.
`
`02/27/2009
`
`3.0.2
`
`Editorial
`
`Revised and edited the technical content.
`
`04/10/2009
`
`3.0.3
`
`Editorial
`
`Revised and edited the technical content.
`
`05/22/2009
`
`3.0.4
`
`Editorial
`
`Revised and edited the technical content.
`
`07/02/2009
`
`3.0.5
`
`Editorial
`
`Revised and edited the technical content.
`
`08/14/2009
`
`3.0.6
`
`Editorial
`
`Revised and edited the technical content.
`
`09/25/2009
`
`3.0.7
`
`Editorial
`
`Revised and edited the technical content.
`
`11/06/2009
`
`3.0.8
`
`Editorial
`
`Revised and edited the technical content.
`
`12/18/2009
`
`3.0.9
`
`Editorial
`
`Revised and edited the technical content.
`
`01/29/2010
`
`3.0.10
`
`Editorial
`
`Revised and edited the technical content.
`
`03/12/2010
`
`4.0
`
`Major
`
`Updated and revised the technical content.
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`2 / 76
`
`Page 2 of 76
`
`
`
`
`
`Date
`
`Revision
`History
`
`Revision
`Class
`
`Comments
`
`04/23/2010
`
`5.0
`
`Major
`
`Updated and revised the technical content.
`
`06/04/2010
`
`5.0.1
`
`Editorial
`
`Revised and edited the technical content.
`
`07/16/2010
`
`5.0.1
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`08/27/2010
`
`5.0.1
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`10/08/2010
`
`5.0.1
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`11/19/2010
`
`5.1
`
`Minor
`
`Clarified the meaning of the technical content.
`
`01/07/2011
`
`5.1
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`02/11/2011
`
`5.1
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`03/25/2011
`
`5.1
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`05/06/2011
`
`5.1
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`06/17/2011
`
`5.2
`
`Minor
`
`Clarified the meaning of the technical content.
`
`09/23/2011
`
`5.2
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`12/16/2011
`
`5.2
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`03/30/2012
`
`5.2
`
`No change
`
`No changes to the meaning, language, or formatting of
`the technical content.
`
`07/12/2012
`
`5.3
`
`Minor
`
`Clarified the meaning of the technical content.
`
`
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`3 / 76
`
`Page 3 of 76
`
`
`
`
`
`Contents
`
`1 Introduction ............................................................................................................. 6
`1.1 Glossary ............................................................................................................... 6
`1.2 References ............................................................................................................ 8
`1.2.1 Normative References ....................................................................................... 8
`1.2.2 Informative References ..................................................................................... 8
`1.3 Overview .............................................................................................................. 9
`1.4 Relationship to Other Protocols .............................................................................. 10
`1.5 Prerequisites/Preconditions ................................................................................... 10
`1.6 Applicability Statement ......................................................................................... 10
`1.7 Versioning and Capability Negotiation ..................................................................... 10
`1.8 Vendor-Extensible Fields ....................................................................................... 11
`1.9 Standards Assignments ........................................................................................ 11
`
`2 Messages................................................................................................................ 12
`2.1 Transport ............................................................................................................ 12
`2.2 Message Syntax .................................................................................................. 12
`2.2.1 Common Data Types ...................................................................................... 12
`2.2.1.1 RdcVersion .............................................................................................. 12
`2.2.1.2 FileHeader ............................................................................................... 12
`2.2.2 Signature Files ............................................................................................... 13
`2.2.2.1 ChunkSignature ........................................................................................ 13
`2.2.3 Similarity Data ............................................................................................... 14
`
`3 Protocol Details ...................................................................................................... 15
`3.1 Common Details .................................................................................................. 15
`3.1.1 Abstract Data Model ....................................................................................... 15
`3.1.2 Timers .......................................................................................................... 15
`3.1.3 Initialization .................................................................................................. 15
`3.1.4 Higher-Layer Triggered Events ......................................................................... 17
`3.1.5 Message Processing Events and Sequencing Rules .............................................. 18
`3.1.5.1 Chunk Generation ..................................................................................... 18
`3.1.5.1.1 H3 Hash ............................................................................................. 19
`3.1.5.1.2 Finding Chunk Boundaries .................................................................... 20
`3.1.5.2 Signature Computation .............................................................................. 21
`3.1.5.3 Recursion ................................................................................................ 22
`3.1.5.3.1 Recursion Depth.................................................................................. 22
`3.1.5.4 Similarity ................................................................................................. 22
`3.1.5.4.1 Similarity Data Calculation ................................................................... 23
`3.1.5.4.2 Finding Seed Files ............................................................................... 24
`3.1.5.5 Generating the Target File ......................................................................... 25
`3.1.6 Timer Events ................................................................................................. 26
`3.1.7 Other Local Events ......................................................................................... 26
`
`4 Protocol Examples .................................................................................................. 27
`4.1 Example System Architecture ................................................................................ 27
`4.2 H3 ..................................................................................................................... 28
`4.3 FilterMax ............................................................................................................ 29
`4.4 Sample Recursive Client Transfer ........................................................................... 30
`4.5 Sample Input and Generated Signature File ............................................................ 32
`4.6 Sample Similarity Calculation ................................................................................ 70
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`4 / 76
`
`Page 4 of 76
`
`
`
`
`
`4.7 Other Considerations ............................................................................................ 70
`
`5 Security .................................................................................................................. 72
`5.1 Security Considerations for Implementers ............................................................... 72
`5.2 Index of Security Parameters ................................................................................ 72
`
`6 Appendix A: Product Behavior ................................................................................ 73
`
`7 Change Tracking..................................................................................................... 74
`
`8 Index ..................................................................................................................... 76
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`5 / 76
`
`Page 5 of 76
`
`
`
`
`
`1 Introduction
`
`Remote differential compression (RDC), a compression algorithm, enables efficient
`synchronization of files with a remote source by using compression techniques to minimize the
`amount of data sent between a source location and a target location. The data is usually, though
`not always, in the form of a file stored on a file system. Unlike more traditional compression
`algorithms that rely on some regularity in the data to be compressed, RDC breaks a file into
`chunks. The chunks not already present on the target location can be identified by the application
`transferring the data stream. The application can then transfer the missing chunks from the source
`location.
`
`Section 2 of this specification is normative and can contain the terms MAY, SHOULD, MUST, MUST
`NOT, and SHOULD NOT as defined in RFC 2119. Section 1.6 is also normative but cannot contain
`those terms. All other sections and examples in this specification are informative.
`
`
`
`
`
`1.1 Glossary
`
`The following terms are defined in [MS-GLOS]:
`
`hash function
`
`The following terms are specific to this document:
`
`chunks: The pieces of a file defined by the cut points.
`
`client: For the purposes of this document only, the client is the target location machine.
`
`collision-resistant hash function: A hash function having the property that (in practice)
`differing inputs do not produce the same hash (or collide).
`
`cut points: The locations in a file where RDC has determined boundary points between blocks
`(or chunks). The cut points for a particular file depend on the content of the file and the
`parameters with which RDC is running.
`
`file: A file is a typed data stream. For the purposes of this document only, file does not imply
`storage of the data stream in any particular medium or with any particular organization, or,
`for example, in a file system (italic is used when referring to traditional files).
`
`hash window: The length, in bytes, of the domain of the rolling hash function. That is, the
`parameter n in the definition of rolling hash function.
`
`horizon: An integer parameter of the RDC FilterMax algorithm. It refers to the number of
`consecutive hash values on both sides of a file offset.
`
`local maximum: A pair consisting of an offset i in a file and the hash value h(bi-Hash Window .. bi)
`that has the property that for all j ≥ 0, such that i - horizon ≤ j ≤ i + horizon, j = i OR h(bj-
`Hash Window .. bj) < h(bi-Hash Window .. bi), where for all k < 0, bk is defined to be 0. Local maxima
`are used to find cut points by the RDC FilterMax algorithm.
`
`MD4: Message Digest 4, as defined in [RFC1320]. MD4 is a collision-resistant, non-rolling hash
`function that produces a 16-byte hash. While MD4 is no longer considered to be
`cryptographically secure, RDC does not rely on cryptographic security in its hash function.
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`6 / 76
`
`Page 6 of 76
`
`
`
`
`
`min-wise independent hash functions: A set H = { H1, H2, … , Hn } of hash functions is said
`to be min-wise independent if, for any input D and for any subset X of {1, … , n}, any index i
`of X has an equal probability of yielding the smallest value Hi(D) of the values Hj(D) for j in X.
`
`RDC FilterMax algorithm: The algorithm that RDC uses to determine the cut points in a file.
`The RDC FilterMax algorithm has the property that it will often find cut points that result
`in identical chunks being found in differing files, even when the files differ by insertions and
`deletions of bytes, not simply by length-preserving byte modifications. See section 3.1.5.1.
`
`recursion level: For very large files, even the signature file may be large. To reduce the
`bandwidth required to transfer signature files, RDC may be used to reduce the number of
`bytes that must be moved from source location to target location to transfer the
`signature file. This process may be repeated a number of times, producing successively
`smaller signature files. The recursion level is the number of times it is repeated. The first
`signature file is recursion level 1. The source file is referred to as being at recursion
`level 0.
`
`remote differential compression (RDC): In general, the term RDC may refer to any of a class
`of compression algorithms designed to compare two files residing at different locations
`without requiring one of the files to be transferred in its entirety to the other location. In this
`document, unless otherwise noted, the terms remote differential compression and RDC
`always refer to the RDC algorithm developed by Microsoft.
`
`rolling hash function: A hash function that can be computed incrementally over a set of data.
`Given an arbitrary integer n ≥ 0, some bytes b0 .. bn-1, and their hash h(b0 .. bn-1), a hash
`function h is a rolling hash function if one can compute h(b1 .. bn) in time that does not
`depend on n.
`
`seed data: See seed file.
`
`seed file: A file or files at the target location used to supply data used in reconstructing the
`source file. RDC may use an arbitrary number of seed files in the process of copying a
`single source file. Selecting seed files can be guided by using similarity traits (see section
`3.1.5.4.2).
`
`server: For the purposes of this document only, the server is the source location.
`
`signature: A structure containing a hash and block chunk size. The hash field is 16 bytes, and
`the chunk size field is a 2-byte unsigned integer. See section 2.2.2.1.
`
`signature file: A file containing the signatures of another (source) file. There is a simple
`header that identifies the type of the file as a signature file, the size of the header itself,
`and the RDC library version number. Following the header are the signatures from the
`source file in the order they are generated from the chunks. See section 2.2.2.
`
`similarity data: Information on a file that can be used to determine an appropriate seed file to
`select to reduce the amount of data transferred. Similarity data consists of one or more
`similarity traits.
`
`similarity trait: A trait that summarizes an independent feature of a file. The features are
`computed by taking min-wise independent hash functions of a file's signatures. For
`information about how traits are computed, see section 3.1.5.4. Similarity traits are used in
`selecting seed files.
`
`source data: See source file.
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`7 / 76
`
`Page 7 of 76
`
`
`
`
`
`source file: A file on a source location that is to be copied by RDC. Sometimes referred to as
`source.
`
`source location: The source location is the location from which a file is being transferred after
`it has been compressed with RDC.
`
`target file: A file on the target location that is the destination of an RDC copy.
`
`target location: The target location is the destination location of a file that has been
`compressed by RDC.
`
`MAY, SHOULD, MUST, SHOULD NOT, MUST NOT: These terms (in all caps) are used as
`described in [RFC2119]. All statements of optional behavior use either MAY, SHOULD, or
`SHOULD NOT.
`
`1.2 References
`
`References to Microsoft Open Specifications documentation do not include a publishing year because
`links are to the latest version of the documents, which are updated frequently. References to other
`documents include a publishing year when one is available.
`
`1.2.1 Normative References
`
`We conduct frequent surveys of the normative references to assure their continued availability. If
`you have any issue with finding a normative reference, please contact dochelp@microsoft.com. We
`will assist you in finding the relevant information. Please check the archive site,
`http://msdn2.microsoft.com/en-us/library/E4BD6494-06AD-4aed-9823-445E921C9624, as an
`additional source.
`
`[RFC1320] Rivest, R., "The MD4 Message-Digest Algorithm", RFC 1320, April 1992,
`http://www.ietf.org/rfc/rfc1320.txt
`
`[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC
`2119, March 1997, http://www.rfc-editor.org/rfc/rfc2119.txt
`
`1.2.2 Informative References
`
`[FIPS180-2] Federal Information Processing Standards Publication, "Secure Hash Standard", FIPS
`PUB 180-2, August 2002, http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
`
`[LBFS] Muthitacharoen, A., Chen, B., and Mazieres, D., "A Low-Bandwidth Network File System",
`October 2001, http://www.sosp.org/2001/papers/mazieres.pdf
`
`[MS-FRS2] Microsoft Corporation, "Distributed File System Replication Protocol Specification".
`
`[MSDN-RDCAPI] Microsoft Corporation, "Remote Differential Compression",
`http://msdn.microsoft.com/en-us/library/aa373254.aspx
`
`[MS-GLOS] Microsoft Corporation, "Windows Protocols Master Glossary".
`
`[UASDC] Ziv, J. and Lempel, A., "A Universal Algorithm for Sequential Data Compression", May
`1977, http://ieeexplore.ieee.org/iel5/18/22696/01055714.pdf
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`8 / 76
`
`Page 8 of 76
`
`
`
`1.3 Overview
`
`
`
`Remote differential compression (RDC) is a compression algorithm that is used in other protocols,
`but it is not a protocol itself. For example, it is used by the SD Microsoft Distributed File System
`Replication Protocol [MS-FRS2].
`
`Traditional compression algorithms operate by finding some kind of redundancy in the file to be
`compressed, and then represent it more compactly. For example, the Lempel-Ziv algorithm (for
`more information, see [UASDC]) finds repeated substrings in the source file and replaces second
`and successive instances of them with references to the initial string in the compressed file. By
`contrast, RDC tries to find blocks of data that are identical between the source file (on the source
`location) and a set of seed files (on the target location). This makes it possible for the protocol that
`is transferring the file between two locations to reduce the number of bytes transferred between the
`source location and target location when reconstructing the source file on the target location.
`
`The fundamental observation that drives RDC is this: By dividing a file into chunks and determining
`what chunks are already present at the target location, a correct copy of a source file can be
`constructed at the target location. To accomplish this, it is only necessary to transfer those chunks
`not already present at the target location, and combine them in the proper order with those chunks
`that are already present at the target location. If many chunks of the source file are already present
`at the target location, this technique can greatly reduce the amount of data that is required to be
`transferred compared to transferring the entire source file from the source location.
`
`The set of chunks that make up a file can be expressed in far fewer bytes than the entire file by
`means of a signature file. The signature of a chunk is its length and a collision-resistant hash of
`its contents. Because hashes produce small, fixed-size outputs, for even modest-size chunks, the
`signature will be much smaller than the chunk.
`
`Any method of determining chunk boundaries will suffice to produce correct behavior. However,
`because it is common to create a file by inserting or deleting bytes from a previously existing file, or
`by combining several previously existing files, it is advantageous to have a chunking method that
`can find equal chunks at some point after the insertion or deletion. A necessary consequence of this
`property is that the chunking method is required to be data dependent. It cannot simply use fixed
`offsets.
`
`The RDC chunking method computes a rolling hash over the data using the H3 hash function, as
`described in section 3.1.5.1.1, and selects as chunk boundaries the offsets that have the largest
`value of H3 within a given horizon. Because this computation depends only on the bytes within the
`horizon (plus possibly one hash window size of bytes before the horizon), any change outside of
`the horizon will not affect the chunk boundaries. Thus, the chunking will produce identical chunks
`sufficiently far away from the change, including insertions and deletions.
`
`This idea was the basis of MIT's Low-Bandwidth Network File System (LBFS) (for more information,
`see [LBFS]), although LBFS differs from RDC in many details.
`
`RDC can be used within a single machine or to optimize transfer between two machines. For
`example, RDC can be used as part of a network protocol that engages in a handshake of the form:
`
`1. Machine A sends Machine B a request to transfer file fB.
`
`2. Machine B partitions file fB into chunks and computes the signature for each of the chunks.
`Machine B sends its list of chunk signatures, SigB1 ... SigBn, to Machine A. This list provides the
`basis for Machine A being able to reconstruct file fB.
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`9 / 76
`
`Page 9 of 76
`
`
`
`
`
`3. Using similarity data, as described in section 3.1.5.4, Machine A selects a file fA as a seed file
`and partitions it into chunks. It computes a signature for each chunk, as described in section
`3.1.5.2.
`
`4. As Machine A receives the chunk signatures from Machine B, it compares the received signatures
`against the set of signatures SigA1, ..., SigAm that it has computed on its seed file (that is, file fA)
`in step 2. As part of this comparison, Machine A records every distinct signature value it received
`from Machine B that does not match one of its own signatures SigAk computed on the chunks of
`file fA.
`
`5. Machine A sends a request to Machine B for all the chunks whose signatures were received in the
`previous step from Machine B, but that did not have a matching signature on Machine A. The
`chunks are requested by offset and length in file fB based on corresponding information that was
`sent in step 2.
`
`6. Machine B sends the contents of the requested chunks to Machine A.
`
`7. Machine A reconstructs file fB by using the chunks received in step 6 from Machine B, as well as
`its own chunks of file fA that matched signatures sent by Machine B in step 4. After this
`reconstruction step is complete, Machine A has completed the transfer of fB.
`
`RDC takes advantage of the fact that a list of signatures can be treated as a binary large object
`(BLOB), and therefore can be treated as a signature file, which is amenable to RDC. Thus, a
`recursive application of RDC is possible by feeding the signature file obtained in step 2 to RDC. This
`is useful in cases in which the file to be transferred is so large that even its signature file is large
`relative to the set of bytes that have changed.
`
`1.4 Relationship to Other Protocols
`
`RDC is not a protocol, but provides a way for other protocols to increase their efficiency when these
`protocols are involved in moving files from one machine to another. The Distributed File System
`(DFS) replication system [MS-FRS2] is the only application that currently uses RDC.
`
`1.5 Prerequisites/Preconditions
`
`None.
`
`1.6 Applicability Statement
`
`RDC can be used any time it would be helpful to store or transfer the differences between a source
`and a set of seeds instead of storing or transferring the source file in its entirety. RDC is only useful
`when there is data in common between the files being compared. However, RDC is the compression
`and differencing algorithm and is in no way involved with the actual data transfer.
`
`An example of when it may be helpful to use RDC is when individuals collaborate on shared
`documents over a wide-area, low-bandwidth network. During a round of edits, it is advantageous to
`work on a local copy of the shared document. Thus, the shared document should be copied between
`the involved sites when a different editor takes over. Instead of copying over the entire contents of
`the document, it might be beneficial to copy over only what has been edited.
`
`1.7 Versioning and Capability Negotiation
`
`RDC supports versioning through a version number in the signature header. See section 2.2.1.1.
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`10 / 76
`
`Page 10 of 76
`
`
`
`1.8 Vendor-Extensible Fields
`
`None.
`
`1.9 Standards Assignments
`
`None.
`
`
`
`[MS-RDC] — v20120705
` Remote Differential Compression Algorithm Specification
`
` Copyright © 2012 Microsoft Corporation.
`
` Release: Thursday, July 5, 2012
`
`11 / 76
`
`Page 11 of 76
`
`
`
`
`
`2 Messages
`
`2.1 Transport
`
`Because RDC is an algorithm, it does not have a defined transport. It is entirely up to the application
`using RDC to define a transport mechanism, if required.
`
`2.2 Message Syntax
`
`This section defines the format of the files that RDC uses between the target location and source
`location.
`
`All multibyte integers represented in this document are in least-significant-byte-first order,
`colloquially called little-endian.
`
`All integer constants that appear are in decimal, unless otherwise noted.
`
`2.2.1 Common Data Types
`
`2.2.1.1 RdcVersion
`
`RdcVersion represents a version of RDC and is used to determine whether two versions of RDC,
`possibly on different machines, can interoperate.
`
`The RdcVersion structure is defined as follows.
`
` 1
`
`
`
`3
`0
`
` 9
`
`
`
` 8
`
`
`
` 7
`
`
`
` 6
`
`
`
` 5
`
`
`
` 4
`
`
`
` 3
`
`
`
` 2
`
`
`
` 1
`
`
`
`2
`0
`
` 9
`
`
`
` 8
`
`
`
` 7
`
`
`
` 6
`
`
`
` 5
`
`
`
` 4
`
`
`
` 3
`
`
`
` 2
`
`
`
` 1
`
`
`
`1
`0
`
` 9
`
`
`
` 8
`
`
`
` 7
`
`
`
` 6
`
`
`
` 5
`
`
`
` 4
`
`
`
` 3
`
`
`
` 2
`
`
`
` 1
`
`
`
` 0
`
`
`
`BuildNumber
`
`LibraryVersion
`
`LibraryVersion: A 16-bit unsigned integer that indicates the version of the RDC implementation.
`The value of LibraryVersion MUST be set to 0x0001.
`
`BuildNumber: A 16-bit unsigned integer that indicates the version of the software implementing
`the algorithm. The value of BuildNumber MUST be set to 0x0001.
`
`2.2.1.2 FileHeader
`
`The FileHeader structure represents the header of a signature file, which is defined in section 2.2.2.
`
`The FileHeader structure is defined as follows.
`
` 1
`
`
`
`3
`0
`
` 9
`
`
`
` 8
`
`
`
` 7
`
`
`
` 6
`
`
`
` 5
`
`
`
` 4
`
`
`
` 3
`
`
`
` 2
`
`
`
` 1
`
`
`
`2
`0
`
` 9
`
`
`
`