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
64 Information about the file we have for transmission.
66 +------+--------------------+
67 | INFO | NICE | SIZE | HASH |
68 +------+--------------------+
70 @multitable @columnfractions 0.2 0.3 0.5
71 @headitem @tab XDR type @tab Value
74 1-255, file niceness level
76 unsigned hyper integer @tab
79 32-byte, fixed length opaque data @tab
80 Unique file identifier, its checksum
84 File transmission request. Ask remote side to queue the file for
87 +------+---------------+
88 | FREQ | HASH | OFFSET |
89 +------+---------------+
91 @multitable @columnfractions 0.2 0.3 0.5
92 @headitem @tab XDR type @tab Value
94 32-byte, fixed length opaque data @tab
95 Unique file identifier, its checksum
97 unsigned hyper integer @tab
98 Offset from which remote side must transmit the file
104 +------+-------------------------+
105 | FILE | HASH | OFFSET | PAYLOAD |
106 +------+-------------------------+
108 @multitable @columnfractions 0.2 0.3 0.5
109 @headitem @tab XDR type @tab Value
111 32-byte, fixed length opaque data @tab
112 Unique file identifier, its checksum
114 unsigned hyper integer @tab
115 Offset from which transmission goes
117 variable length opaque data @tab
122 Signal remote side that we have successfully downloaded the file.
128 @multitable @columnfractions 0.2 0.3 0.5
129 @headitem @tab XDR type @tab Value
131 32-byte, fixed length opaque data @tab
132 Unique file identifier, its checksum