X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=doc%2Fsp.texi;h=e7f4895c67f43c539915046887c1252d2de573b2;hb=a7bc092eb93fb9526b27bca20ae7b88b01d99f84;hp=239b87f1eb6c0d995caa606a88f196a8114e15a6;hpb=febf067a4f2c09c465190d1ddd2839ffc2c2405a;p=nncp.git diff --git a/doc/sp.texi b/doc/sp.texi index 239b87f..e7f4895 100644 --- a/doc/sp.texi +++ b/doc/sp.texi @@ -12,6 +12,11 @@ high-delay links, so acknowledging of each received packet, like @url{https://en.wikipedia.org/wiki/XMODEM, XMODEM} does, causes unacceptable performance degradation. +Internally it uses various timeouts and deadlines. One of them used +extensively is 10 seconds default deadline timeout. You can override it +with @env{$NNCPDEADLINE} environment variable, that could be useful with +very high delay links. + SP works on top of @url{http://noiseprotocol.org/noise.html#interactive-patterns, @code{Noise_IK_25519_ChaChaPoly_BLAKE2b}} protocol. Each Noise packet @@ -54,19 +59,31 @@ just an unsigned integer telling what body structure follows. Actually @emph{HALT} packet does not have any body, only the header with the type. It is also used in the first payload for padding to the maximum size. + @verbatim +------+ | HALT | +------+ @end verbatim +@item PING + Dummy packet only used for determining workability of the connection. + +@verbatim ++------+ +| PING | ++------+ +@end verbatim + @item INFO Information about the file we have for transmission. + @verbatim +------+--------------------+ | INFO | NICE | SIZE | HASH | +------+--------------------+ @end verbatim + @multitable @columnfractions 0.2 0.3 0.5 @headitem @tab XDR type @tab Value @item Niceness @tab @@ -83,11 +100,13 @@ just an unsigned integer telling what body structure follows. @item FREQ File transmission request. Ask remote side to queue the file for transmission. + @verbatim +------+---------------+ | FREQ | HASH | OFFSET | +------+---------------+ @end verbatim + @multitable @columnfractions 0.2 0.3 0.5 @headitem @tab XDR type @tab Value @item Hash @tab @@ -100,11 +119,13 @@ just an unsigned integer telling what body structure follows. @item FILE Chunk of file. + @verbatim +------+-------------------------+ | FILE | HASH | OFFSET | PAYLOAD | +------+-------------------------+ @end verbatim + @multitable @columnfractions 0.2 0.3 0.5 @headitem @tab XDR type @tab Value @item Hash @tab @@ -120,11 +141,13 @@ just an unsigned integer telling what body structure follows. @item DONE Signal remote side that we have successfully downloaded the file. + @verbatim +------+------+ | DONE | HASH | +------+------+ @end verbatim + @multitable @columnfractions 0.2 0.3 0.5 @headitem @tab XDR type @tab Value @item Hash @tab @@ -136,7 +159,7 @@ just an unsigned integer telling what body structure follows. Typical peer's behaviour is following: -@verbatiminclude sp.utxt +@verbatiminclude sp.plantuml.txt @enumerate @item Perform @emph{Noise-IK} handshake: @@ -164,7 +187,7 @@ payloads, then send all of remaining in the transport stage. Ignore it if it is too nice. @item If already downloaded file exists, then queue @emph{DONE} sending. - @item If @file{.seen} exists, then queue @emph{DONE} sending. + @item If @file{seen/XXX} exists, then queue @emph{DONE} sending. @item If @file{.part} exists, then queue @emph{FREQ} sending with corresponding offset. @end itemize @@ -186,13 +209,20 @@ then run background integrity checker on it. If check succeeds, then delete @file{.part} suffix from file's name and send @emph{DONE} packet. @item When @emph{DONE} packet received, delete corresponding file. + @item When @emph{HALT} packet received, empty file sending queue. @item Each second, node checks: are there any new @emph{tx} packets appeared and queues corresponding @emph{INFO} packets. -@item If no packets are sent and received during @ref{CfgOnlineDeadline, -onlinedeadline} duration, then close the connection. There is no -explicit indication that session is over. +@item Each minute, if no packets were sent, node sends @emph{PING} +packet. + +@item If no non-PING packets are sent and received during +@ref{CfgOnlineDeadline, onlinedeadline} duration, then close the +connection. There is no explicit indication that session is over. + +@item If no packets are received during two minutes (two PING timeouts), +then close the connection. @end enumerate