Packet Demuxer
This is a QUIC specific module that parses headers of incoming packets and
decides what to do next.
Demuxer requirements for MVP
These are the requirements that were identified for MVP:
- multiple QUIC packets in an UDP packet handling as packet coalescing
must be supported
- client must discard any packets that do not match existing connection ID
- client must discard any packets with version different from the one initially
selected
Optional demuxer requirements
These are optional features of the client side demuxer, not required for MVP
but otherwise desirable:
- optionally trigger sending stateless reset packets if a received packet
on the client is well-formed but does not belong to a known connection
Demuxer requirements for server
Further requirements after MVP for server support:
- on the server side packets can create a new connection potentially
- server side packet handling for unsupported version packets:
- trigger sending version negotiation packets if the server receives a packet
with an unsupported version and is large enough to initiate a new
connection; limit the number of such packets with the same destination
- discard smaller packets with unsupported versions
- packet handling on server for well-formed packets with supported versions
but with unknown connection IDs:
- if the packet is a well-formed Initial packet, trigger the creation of a
new connection
- if the packet is a well-formed 0RTT packet, mark the packet to be
buffered for short period of time (as Initial packet might arrive late)
- this is optional - enabled only if 0RTT support is enabled by the
application
- discard any other packet with unknown connection IDs
- optionally trigger sending stateless reset packets as above for client