xref: /openssl/doc/designs/quic-design/demuxer.md (revision 6347b867)
1Packet Demuxer
2==============
3
4This is a QUIC specific module that parses headers of incoming packets and
5decides what to do next.
6
7Demuxer requirements for MVP
8----------------------------
9
10These are the requirements that were identified for MVP:
11
12- multiple QUIC packets in an UDP packet handling as packet coalescing
13  must be supported
14- client must discard any packets that do not match existing connection ID
15- client must discard any packets with version different from the one initially
16  selected
17
18Optional demuxer requirements
19-----------------------------
20
21These are optional features of the client side demuxer, not required for MVP
22but otherwise desirable:
23
24- optionally trigger sending stateless reset packets if a received packet
25  on the client is well-formed but does not belong to a known connection
26
27Demuxer requirements for server
28-------------------------------
29
30Further requirements after MVP for server support:
31
32- on the server side packets can create a new connection potentially
33- server side packet handling for unsupported version packets:
34  - trigger sending version negotiation packets if the server receives a packet
35    with an unsupported version and is large enough to initiate a new
36    connection; limit the number of such packets with the same destination
37  - discard smaller packets with unsupported versions
38- packet handling on server for well-formed packets with supported versions
39  but with unknown connection IDs:
40  - if the packet is a well-formed Initial packet, trigger the creation of a
41    new connection
42  - if the packet is a well-formed 0RTT packet, mark the packet to be
43    buffered for short period of time (as Initial packet might arrive late)
44    - this is optional - enabled only if 0RTT support is enabled by the
45      application
46  - discard any other packet with unknown connection IDs
47    - optionally trigger sending stateless reset packets as above for client
48