Prop. 159 updates
acks, schedule
This commit is contained in:
@ -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.
|
||||||
|
Reference in New Issue
Block a user