diff --git a/i2p2www/spec/proposals/159-ssu2.rst b/i2p2www/spec/proposals/159-ssu2.rst index 7008335f..bad3dc60 100644 --- a/i2p2www/spec/proposals/159-ssu2.rst +++ b/i2p2www/spec/proposals/159-ssu2.rst @@ -5,7 +5,7 @@ SSU2 :author: orignal, zlatinb, zzz :created: 2021-09-12 :thread: http://zzz.i2p/topics/2612 - :lastupdated: 2021-10-22 + :lastupdated: 2021-10-24 :status: Open :target: 0.9.55 @@ -113,6 +113,11 @@ Design Goals Remove the delay waiting for data messages that makes [SSU]_ effectively a two-round-trip handshake. +- Improve efficiency of ACKs and NACKs. Reduce bandwidth required + for ACKs and NACKs, and increase packet size available for data. + +- Reduce the complexity required to implement I2NP message fragmentation. + - Minimize protocol overhead before padding. While padding will be added, overhead before padding is still overhead. Low-bandwidth nodes must be able to use SSU2. @@ -3061,7 +3066,7 @@ Alice sends to Bob. Long header. Noise content: Alice's ephemeral key X -Noise payload: datetime and padding blocks +Noise payload: datetime, optional relay tag request, and padding blocks Max payload size: MTU - 108 (IPv4) or MTU - 128 (IPv6) For 1280 MTU: Max payload is 1172 (IPv4) or 1152 (IPv6) For 1500 MTU: Max payload is 1392 (IPv4) or 1372 (IPv6) @@ -3323,7 +3328,7 @@ SessionCreated (Type 1) Bob sends to Alice. Noise content: Bob's ephemeral key Y -Noise payload: datetime, options, and padding blocks +Noise payload: datetime, options, relay tag, and padding blocks Max payload size: MTU - 108 (IPv4) or MTU - 128 (IPv6) For 1280 MTU: Max payload is 1172 (IPv4) or 1152 (IPv6) For 1500 MTU: Max payload is 1392 (IPv4) or 1372 (IPv6) @@ -3486,6 +3491,9 @@ Notes 2*D. The cache values are implementation-dependent, however the 32-byte Y value (or its encrypted equivalent) may be used. +- Bob sends a relay tag block if requested by Alice in the Session Request. + + Issues `````` - Include min/max padding options here? @@ -4030,9 +4038,6 @@ and zero or more bytes of data. For extensibility, receivers must ignore blocks with unknown identifiers, and treat them as padding. -Encrypted data is 65535 bytes max, including a 16-byte authentication header, -so the max unencrypted data is 65519 bytes. - (Poly1305 auth tag not shown): .. raw:: html @@ -4068,9 +4073,16 @@ Block type is 1 byte. Block length is 2 bytes. Maximum single block data size is the maximum single block size minus 3. -Note: Implementers must ensure that when reading a block, -malformed or malicious data will not cause reads to -overrun into the next block or beyond the payload boundary. +Notes: + +- Implementers must ensure that when reading a block, + malformed or malicious data will not cause reads to + overrun into the next block or beyond the payload boundary. + +- Implementations should ignore unknown block types for + forward compatibility, except in Session Confirmed part 2, where + unknown blocks are not allowed. + Block types: @@ -4098,7 +4110,7 @@ Relay Tag 16 7 New Token 17 15 Path Challenge 18 varies Path Response 19 varies -reserved for experimental features 255 +reserved for experimental features 224-253 Padding 254 varies reserved for future extension 255 ==================================== ============= ============ @@ -4197,8 +4209,8 @@ Options block will be vHTTP/1.1 200 OK Transfer-Encoding: chunked Cache-Control: max-age=0, private, must-revalidate, no-transform Set-Cookie: i_like_gitea=5b5f653b65536084; Path=/; HttpOnly; Secure; SameSite=Lax Set-Cookie: _csrf=2rnxeJ6QFtuuPK4Va6ElvxZ3pTU6MTc1MzI1NDc2MzQzMzU4MTAxMw; Path=/; Max-Age=86400; HttpOnly; Secure; SameSite=Lax X-Frame-Options: SAMEORIGIN Date: Wed, 23 Jul 2025 07:12:43 GMT Content-Type: text/plain; charset=utf-8 Connection: close X-Cache-Status: HIT X-Cache-Age: 0 23bb diff --git a/i2p2www/spec/proposals/159-ssu2.rst b/i2p2www/spec/proposals/159-ssu2.rst index 7008335f..bad3dc60 100644 --- a/i2p2www/spec/proposals/159-ssu2.rst +++ b/i2p2www/spec/proposals/159-ssu2.rst @@ -5,7 +5,7 @@ SSU2 :author: orignal, zlatinb, zzz :created: 2021-09-12 :thread: http://zzz.i2p/topics/2612 - :lastupdated: 2021-10-22 + :lastupdated: 2021-10-24 :status: Open :target: 0.9.55 @@ -113,6 +113,11 @@ Design Goals Remove the delay waiting for data messages that makes [SSU]_ effectively a two-round-trip handshake. +- Improve efficiency of ACKs and NACKs. Reduce bandwidth required + for ACKs and NACKs, and increase packet size available for data. + +- Reduce the complexity required to implement I2NP message fragmentation. + - Minimize protocol overhead before padding. While padding will be added, overhead before padding is still overhead. Low-bandwidth nodes must be able to use SSU2. @@ -3061,7 +3066,7 @@ Alice sends to Bob. Long header. Noise content: Alice's ephemeral key X -Noise payload: datetime and padding blocks +Noise payload: datetime, optional relay tag request, and padding blocks Max payload size: MTU - 108 (IPv4) or MTU - 128 (IPv6) For 1280 MTU: Max payload is 1172 (IPv4) or 1152 (IPv6) For 1500 MTU: Max payload is 1392 (IPv4) or 1372 (IPv6) @@ -3323,7 +3328,7 @@ SessionCreated (Type 1) Bob sends to Alice. Noise content: Bob's ephemeral key Y -Noise payload: datetime, options, and padding blocks +Noise payload: datetime, options, relay tag, and padding blocks Max payload size: MTU - 108 (IPv4) or MTU - 128 (IPv6) For 1280 MTU: Max payload is 1172 (IPv4) or 1152 (IPv6) For 1500 MTU: Max payload is 1392 (IPv4) or 1372 (IPv6) @@ -3486,6 +3491,9 @@ Notes 2*D. The cache values are implementation-dependent, however the 32-byte Y value (or its encrypted equivalent) may be used. +- Bob sends a relay tag block if requested by Alice in the Session Request. + + Issues `````` - Include min/max padding options here? @@ -4030,9 +4038,6 @@ and zero or more bytes of data. For extensibility, receivers must ignore blocks with unknown identifiers, and treat them as padding. -Encrypted data is 65535 bytes max, including a 16-byte authentication header, -so the max unencrypted data is 65519 bytes. - (Poly1305 auth tag not shown): .. raw:: html @@ -4068,9 +4073,16 @@ Block type is 1 byte. Block length is 2 bytes. Maximum single block data size is the maximum single block size minus 3. -Note: Implementers must ensure that when reading a block, -malformed or malicious data will not cause reads to -overrun into the next block or beyond the payload boundary. +Notes: + +- Implementers must ensure that when reading a block, + malformed or malicious data will not cause reads to + overrun into the next block or beyond the payload boundary. + +- Implementations should ignore unknown block types for + forward compatibility, except in Session Confirmed part 2, where + unknown blocks are not allowed. + Block types: @@ -4098,7 +4110,7 @@ Relay Tag 16 7 New Token 17 15 Path Challenge 18 varies Path Response 19 varies -reserved for experimental features 255 +reserved for experimental features 224-253 Padding 254 varies reserved for future extension 255 ==================================== ============= ============ @@ -4197,8 +4209,8 @@ Options block will be v 0