Prop. 159 updates

acks, schedule
This commit is contained in:
zzz
2022-03-31 13:38:04 -04:00
parent 53bdcd8d57
commit c7992c7ef0

View File

@ -5,7 +5,7 @@ SSU2
:author: eyedeekay, orignal, zlatinb, zzz :author: eyedeekay, orignal, zlatinb, zzz
:created: 2021-09-12 :created: 2021-09-12
:thread: http://zzz.i2p/topics/2612 :thread: http://zzz.i2p/topics/2612
:lastupdated: 2022-03-27 :lastupdated: 2022-03-31
:status: Open :status: Open
:target: 0.9.55 :target: 0.9.55
@ -25,16 +25,18 @@ Preliminary rollout plan:
Local test code 2022-02 Local test code 2022-02
Joint test code 2022-03 Joint test code 2022-03
Joint test in-net 0.9.54 2022-05 Joint test in-net 0.9.54 2022-05
Freeze basic protocol 0.9.54 2022-05
Basic Session 0.9.55 2022-08 0.9.56 2022-11 Basic Session 0.9.55 2022-08 0.9.56 2022-11
Address Validation (Retry) 0.9.55 2022-08 0.9.56 2022-11 Address Validation (Retry) 0.9.55 2022-08 0.9.56 2022-11
Fragmented RI in handshake 0.9.55 2022-08 0.9.56 2022-11
Freeze extended protocol 0.9.55 2022-08
Relay 0.9.56 2022-11 0.9.57 2023-02 Relay 0.9.56 2022-11 0.9.57 2023-02
Peer Test 0.9.56 2022-11 0.9.57 2023-02 Peer Test 0.9.56 2022-11 0.9.57 2023-02
New Token 0.9.56 2022-11 0.9.57 2023-02 New Token 0.9.56 2022-11 0.9.57 2023-02
Fragmented RI in handshake 0.9.57 2023-02 0.9.58 2023-05
Path Validation 0.9.57 2023-02 0.9.58 2023-05 Path Validation 0.9.57 2023-02 0.9.58 2023-05
Connection Migration 0.9.57 2023-02 0.9.58 2023-05 Connection Migration 0.9.57 2023-02 0.9.58 2023-05
Key Rotation 0.9.57 2023-02 0.9.58 2023-05 Key Rotation 0.9.57 2023-02 0.9.58 2023-05
Disable SSU 1 0.9.57 2023-02 0.9.58 2023-05 Disable SSU 1 0.9.58 2023-05 0.9.59 2023-08
========================== ===================== ==================== ========================== ===================== ====================
Basic Session includes the handshake and data phase. Basic Session includes the handshake and data phase.
@ -5240,10 +5242,12 @@ This must be the last non-padding block in the payload.
Notes: Notes:
Not all reasons may actually be used, implementation dependent. - Not all reasons may actually be used, implementation dependent.
Most failures will generally result in the message being dropped, not a termination. Most failures will generally result in the message being dropped, not a termination.
See notes in handshake message sections above. See notes in handshake message sections above.
Additional reasons listed are for consistency, logging, debugging, or if policy changes. Additional reasons listed are for consistency, logging, debugging, or if policy changes.
- It is recommended that an ACK block be included with the Termination block.
RelayRequest RelayRequest
`````````````` ``````````````
@ -5665,7 +5669,29 @@ TODO only if we rotate keys
Ack Ack
`````````````` ``````````````
4 byte ack through, followed by an ack count 4 byte ack through, followed by an ack count
and nack/ack ranges and zero or more nack/ack ranges.
This design is adapted and simplified from QUIC.
The design goals are as follows:
- We want to efficiently encode a "bitfield", which is a
sequence of bits representing acked packets.
- The bitfield is mostly 1's. Both the 1's and the 0's
generally come in sequential "clumps".
- The amount of room in the packet available for acks varies.
- The most important bit is the highest numbered one.
Lower numbered ones are less important.
Below a certain distance from the highest bit, the oldest
bits will be "forgotten" and never sent again.
The encoding specified below accomplishes these design goals,
by sending the number of the highest bit that is set to 1,
together with additional consecutive bits lower than that
which are also set to 1.
After that, if there is room, one or more "ranges" specifying
the number of consectutive 0 bits and consecutive 1 bits
lower than that.
.. raw:: html .. raw:: html
@ -5680,11 +5706,12 @@ and nack/ack ranges
+----+----+----+----+----+----+----+----+ +----+----+----+----+----+----+----+----+
blk :: 12 blk :: 12
size :: 2 bytes, big endian, size of data to follow size :: 2 bytes, big endian, size of data to follow,
5 minimum
ack through :: highest packet number acked ack through :: highest packet number acked
acnt :: number of acks lower than ack through also acked, acnt :: number of acks lower than ack through also acked,
0-255 0-255
range :: 0 or more two-byte fields. Each is a range :: If present,
1 byte nack count followed by 1 byte ack count, 1 byte nack count followed by 1 byte ack count,
0-255 each 0-255 each
@ -5715,6 +5742,8 @@ The encoding of the ACK Block is:
Notes: Notes:
- Ranges may not be present. Max number of ranges is not specified,
may be as many as will fit in the packet.
- Range nack may be zero if acking more than 255 consecutive packets. - Range nack may be zero if acking more than 255 consecutive packets.
- Range ack may be zero if nacking more than 255 consecutive packets. - Range ack may be zero if nacking more than 255 consecutive packets.
- Range nack and ack may not both be zero. - Range nack and ack may not both be zero.
@ -5722,6 +5751,14 @@ Notes:
Length of the ack block and how old acks/nacks are handled Length of the ack block and how old acks/nacks are handled
is up to the sender of the ack block. is up to the sender of the ack block.
See ack sections below for discussion. See ack sections below for discussion.
- The ack through should be the highest packet number received,
and any packets higher have not been received.
However, in limited situations, it could be lower, such as
acking a single packet that "fills in a hole", or a simplified
implementation that does not maintain the state of all received packets.
Above the highest received, packets are neither acked nor nacked,
but after several ack blocks, it may be appropriate to go
into fast retransmit mode.
- This format is a simplified version of that in QUIC. - This format is a simplified version of that in QUIC.
It is designed to efficiently encode a large number of ACKs, It is designed to efficiently encode a large number of ACKs,
together with bursts of NACKs. together with bursts of NACKs.
@ -5754,8 +5791,9 @@ or Bob's address, sent to Bob by Alice.
Intro Key Intro Key
`````````````` ``````````````
Sent by Alice in the Session Request, to be used Sent by Alice in the Session Confirmed, when the RI
by Bob to protect the Session Created header. is fragmented, so that Bob may encrypt
the header for ACKs before receiving and verifying the full RI.
.. raw:: html .. raw:: html
@ -5772,7 +5810,7 @@ by Bob to protect the Session Created header.
| | | |
+----+----+----+ +----+----+----+
blk :: 18 blk :: 14
size :: 32 size :: 32
key :: 32-byte introduction key key :: 32-byte introduction key
@ -6312,8 +6350,13 @@ I2NP messages and fragments were in that packet, to decide what to retransmit.
Session Confirmed ACK Session Confirmed ACK
------------------------ ------------------------
Bob sends an ACK of packet 0, which acknowledges the Session Confirmed message and allows
Alice to proceed to the data phase, and discard the large Session Confirmed message
being saved for possible retransmission.
This replaces the DeliveryStatusMessage sent by Bob in SSU 1.
Bob should send an ACK as soon as possible after receiving the Session Confirmed message. Bob should send an ACK as soon as possible after receiving the Session Confirmed message.
A small delay (no more than 100 ms) is acceptable, since at least one Data message should arrive almost A small delay (no more than 50 ms) is acceptable, since at least one Data message should arrive almost
immediately after the Session Confirmed message, so that the ACK may acknowledge both immediately after the Session Confirmed message, so that the ACK may acknowledge both
the Session Confirmed and the Data message. the Session Confirmed and the Data message.
This will prevent Bob from having to retransmit the Session Confirmed message. This will prevent Bob from having to retransmit the Session Confirmed message.