2 @unnumbered Synchronization protocol
4 So-called synchronization protocol (SP) is used in current TCP daemon's
5 implementation. It is used for synchronizing @ref{Spool, spool}
6 directory contents between two nodes.
8 It is aimed to be very simple and effective. It uses reliable transport
9 like TCP connections. It must be effective both on single-duplex and
10 full-duplex links: for example satellites have very high throughput but
11 high-delay links, so acknowledging of each received packet, like
12 @url{https://en.wikipedia.org/wiki/XMODEM, XMODEM} does, causes
13 unacceptable performance degradation.
16 @url{http://noiseprotocol.org/noise.html#interactive-patterns,
17 @code{Noise_IK_25519_ChaChaPoly_BLAKE2b}} protocol. Each Noise packet
18 are sent inside XDR envelope:
26 @multitable @columnfractions 0.2 0.3 0.5
27 @headitem @tab XDR type @tab Value
28 @item Magic number @tab
29 8-byte, fixed length opaque data @tab
30 @code{NNCPS0x10x00x00}
32 variable length opaque data @tab
36 Peers static keys are specified as @ref{Configuration, @code{noisepub}}
39 Payload inside Noise packets has maximum size of @code{65 KiB - 256 B =
40 65280 B}. It is sent immediately in the first message by each side. The
41 very first payload (that is carried inside handshake messages) is always
42 padded to the maximum size with @code{HALT} packets (read below), for
43 hiding actual number of @code{INFO} packets (number of files available
46 Each SP payload is a concatenation of SP packets. Each packet has
47 XDR-encoded header and then corresponding XDR-encoded body. Header is
48 just an unsigned integer telling what body structure follows.
53 Stop file transmission, empty sending queue on the remote side.
54 Actually @code{HALT} packet does not have any body, only the header
55 with the type. It is also used in the first payload for padding to
59 Information about the file we have for transmission.
61 +--------------------+
62 | NICE | SIZE | HASH |
63 +--------------------+
65 @multitable @columnfractions 0.2 0.3 0.5
66 @headitem @tab XDR type @tab Value
69 1-255, file niceness level
71 unsigned hyper integer @tab
74 32-byte, fixed length opaque data @tab
75 Unique file identifier, its checksum
79 File transmission request. Ask remote side to queue the file for
86 @multitable @columnfractions 0.2 0.3 0.5
87 @headitem @tab XDR type @tab Value
89 32-byte, fixed length opaque data @tab
90 Unique file identifier, its checksum
92 unsigned hyper integer @tab
93 Offset from which remote side must transmit the file
99 +-------------------------+
100 | HASH | OFFSET | PAYLOAD |
101 +-------------------------+
103 @multitable @columnfractions 0.2 0.3 0.5
104 @headitem @tab XDR type @tab Value
106 32-byte, fixed length opaque data @tab
107 Unique file identifier, its checksum
109 unsigned hyper integer @tab
110 Offset from which transmission goes
112 variable length opaque data @tab
117 Signal remote side that we have successfully downloaded the file.
123 @multitable @columnfractions 0.2 0.3 0.5
124 @headitem @tab XDR type @tab Value
126 32-byte, fixed length opaque data @tab
127 Unique file identifier, its checksum