I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Unverified Commit c7992c7e authored by zzz's avatar zzz
Browse files

Prop. 159 updates

acks, schedule
parent 53bdcd8d
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,7 @@ SSU2
:author: eyedeekay, orignal, zlatinb, zzz
:created: 2021-09-12
:thread: http://zzz.i2p/topics/2612
:lastupdated: 2022-03-27
:lastupdated: 2022-03-31
:status: Open
:target: 0.9.55
......@@ -25,16 +25,18 @@ Preliminary rollout plan:
Local test code 2022-02
Joint test code 2022-03
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
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
Peer Test 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
Connection Migration 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.
......@@ -5240,10 +5242,12 @@ This must be the last non-padding block in the payload.
Notes:
Not all reasons may actually be used, implementation dependent.
Most failures will generally result in the message being dropped, not a termination.
See notes in handshake message sections above.
Additional reasons listed are for consistency, logging, debugging, or if policy changes.
- Not all reasons may actually be used, implementation dependent.
Most failures will generally result in the message being dropped, not a termination.
See notes in handshake message sections above.
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
``````````````
......@@ -5665,7 +5669,29 @@ TODO only if we rotate keys
Ack
``````````````
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
......@@ -5680,11 +5706,12 @@ and nack/ack ranges
+----+----+----+----+----+----+----+----+
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
acnt :: number of acks lower than ack through also acked,
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,
0-255 each
......@@ -5715,6 +5742,8 @@ The encoding of the ACK Block is:
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 ack may be zero if nacking more than 255 consecutive packets.
- 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
is up to the sender of the ack block.
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.
It is designed to efficiently encode a large number of ACKs,
together with bursts of NACKs.
......@@ -5754,8 +5791,9 @@ or Bob's address, sent to Bob by Alice.
Intro Key
``````````````
Sent by Alice in the Session Request, to be used
by Bob to protect the Session Created header.
Sent by Alice in the Session Confirmed, when the RI
is fragmented, so that Bob may encrypt
the header for ACKs before receiving and verifying the full RI.
.. raw:: html
......@@ -5772,7 +5810,7 @@ by Bob to protect the Session Created header.
| |
+----+----+----+
blk :: 18
blk :: 14
size :: 32
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
------------------------
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.
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
the Session Confirmed and the Data message.
This will prevent Bob from having to retransmit the Session Confirmed message.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment