Uses of Package
io.github.mahmoudimus.quic.connection
Packages that use io.github.mahmoudimus.quic.connection
Package
Description
A dependency-free QUIC transport (RFC 9000, 9001, 9002, 9221, 9369).
The sans-I/O QUIC connection and endpoint, ported from quinn-proto: the
Connection state machine (handshake, packet assembly and
processing, key updates, closing and draining), the Endpoint that routes datagrams and answers with Version
Negotiation, Retry and stateless resets, their configurations (TransportConfig, ServerConfig, ClientConfig, EndpointConfig), and the building blocks they are made of:
range sets (RangeSet), reassembly of received data
(Assembler), buffering of sent data (SendBuffer), streams and flow control (StreamsState), packet number spaces and ACK generation
(PacketSpace), loss detection (Recovery), pacing (Pacer), path MTU discovery (MtuDiscovery) and timers (TimerTable).-
Classes in io.github.mahmoudimus.quic.connection used by io.github.mahmoudimus.quicClassDescriptionHow a client connects: its TLS configuration (trust, server name, ALPN, 0-RTT), the transport settings, the QUIC version and the
SessionCachethat keeps session tickets and NEW_TOKEN tokens between connections.One QUIC connection (RFC 9000, 9001, 9002) as a sans-I/O state machine, after quinn-proto'sConnection.Why a connection ended.Settings shared by every connection of an endpoint: how local connection IDs are made, the key stateless reset tokens derive from, the QUIC versions accepted, and the stateless reset rate limit.How a server accepts connections: its TLS configuration (certificates, possibly selected per SNI, ALPN, session tickets and 0-RTT), the transport settings, Retry-based address validation, the NEW_TOKEN tokens that let returning clients skip the Retry, the connection cap, whether clients may migrate, and a preferred address.What a client remembers about servers between connections: TLS session tickets, for resumption and 0-RTT (each ticket also carries the server's transport parameters, which 0-RTT data must keep within), and NEW_TOKEN tokens, which let a server skip its Retry round trip. -
Classes in io.github.mahmoudimus.quic.connection used by io.github.mahmoudimus.quic.connectionClassDescriptionState of the QUIC ACK frequency extension, as quinn implements it: the
max_ack_delaythe peer uses (its transport parameter, or what we last asked for in an ACK_FREQUENCY frame once it is acknowledged) and the one we use (ours, or what the peer asked for).Reassembles STREAM or CRYPTO frame data that arrives out of order, duplicated or overlapping, into the stream's bytes (RFC 9000 section 2.2).A run of received stream or CRYPTO data and its offset in the stream.A read in progress on one stream, fromStreamsState.read(io.github.mahmoudimus.quic.connection.StreamId, boolean, io.github.mahmoudimus.quic.connection.Retransmits).How a client connects: its TLS configuration (trust, server name, ALPN, 0-RTT), the transport settings, the QUIC version and theSessionCachethat keeps session tickets and NEW_TOKEN tokens between connections.Builds aClientConfig.One QUIC connection (RFC 9000, 9001, 9002) as a sans-I/O state machine, after quinn-proto'sConnection.Why a connection ended.What ended a connection.What aConnectiontells its application, throughConnection.pollEvent().Generates the connection IDs an endpoint issues.A sliding-window detector of duplicate packet numbers, in the style of RFC 4303: a 128-bit field, one bit per packet number below the highest authenticated one.Delivery rate estimation as draft-cheng-iccrg-delivery-rate-estimation describes it, the sampler BBR is built on.Whether a stream carries data in both directions or only from its initiator (RFC 9000 section 2.1).What to do with a datagram.Settings shared by every connection of an endpoint: how local connection IDs are made, the key stateless reset tokens derive from, the QUIC versions accepted, and the stateless reset rate limit.Builds anEndpointConfig.A local connection ID issued to the peer, to be sent in a NEW_CONNECTION_ID frame.Receives TLS traffic secrets in the NSS key log format (SSLKEYLOGFILE), which Wireshark reads to decrypt QUIC packets.The outcome of a RETIRE_CONNECTION_ID.Datagram packetization layer path MTU discovery (DPLPMTUD, RFC 8899): probes larger packets in the application data space by binary search, and detects MTU black holes from the pattern of lost packets.Configuration of DPLPMTUD, packetization layer path MTU discovery (RFC 8899, RFC 9000 section 14.3).A monotonic clock in nanoseconds, injected into the connection layer so that timers can be driven deterministically in tests.Mitigates optimistic ACK attacks (RFC 9000 section 21.4) by occasionally skipping a packet number in the application data space: an ACK of a skipped number proves the peer acknowledges packets it never received.One packet number space (RFC 9000 section 12.3, RFC 9002 appendix A): its keys, the packets received and to acknowledge, the next packet number, the packets sent and not yet acknowledged or lost, the frames waiting to be sent, the CRYPTO stream, and the loss detection state thatRecoverykeeps per space.What a space has to send.One network path of a connection (RFC 9000 section 9): the peer's address, the local address the connection uses on it, and what is measured per path: the RTT, the congestion controller, the pacer, MTU discovery, the delivery rate, the bytes in flight, and the anti-amplification counts until the path is validated (RFC 9000 section 8).The packets of one space waiting to be acknowledged, and when an ACK must go out (RFC 9000 section 13.2): after more thanack_eliciting_thresholdack-eliciting packets (one, by default, so every second one is acknowledged at once), on reordering, or oncemax_ack_delayhas passed since the first unacknowledged ack-eliciting packet.Receives qlog-style connection events, for debugging: packets sent, received and lost, recovery metrics, key updates and state changes.A set of non-negativelongvalues stored as disjoint, non-adjacent half-open ranges, for long runs with random insertion and removal: received packet numbers, ACK ranges, received and acknowledged stream offsets.A half-open range[start, end).Loss detection and congestion control of one connection (RFC 9002): the three packet number spaces, the in-flight counts, the RTT estimator, the congestion controller, the pacer, MTU discovery and the probe timeout.Receives acknowledged and lost packets.Configuration of loss detection, congestion control, pacing and MTU discovery.Builds aRecoveryConfig.The states of the receiving part of a stream (RFC 9000 section 3.2, figure 3).Signals that an ID could not be stored; seeRemoteCidQueue.InsertError.Sequence numbers to retire, and the reset token of the ID now in use.Control frames waiting to be sent in one packet number space, and, attached to aSentPacket, the control frames that packet carried, to queue again if it is lost.A RESET_STREAM to send.The rangeSendBuffer.pollTransmit(int)chose to send next.The states of the sending part of a stream (RFC 9000 section 3.1, figure 2).What loss recovery remembers about a sent packet until it is acknowledged or deemed lost (RFC 9002 appendix A.1.1).The sent packets of one packet number space that are neither acknowledged nor lost, by packet number.How a server accepts connections: its TLS configuration (certificates, possibly selected per SNI, ALPN, session tickets and 0-RTT), the transport settings, Retry-based address validation, the NEW_TOKEN tokens that let returning clients skip the Retry, the connection cap, whether clients may migrate, and a preferred address.Builds aServerConfig.What a client remembers about servers between connections: TLS session tickets, for resumption and 0-RTT (each ticket also carries the server's transport parameters, which 0-RTT data must keep within), and NEW_TOKEN tokens, which let a server skip its Retry round trip.The role of an endpoint in a connection.The three packet number spaces (RFC 9000 section 12.3).Application events about streams, polled fromStreamsState.poll().An application-level stream operation that cannot proceed.Why the operation failed.A stream ID (RFC 9000 section 2.1): the two low bits give the initiator and direction, the rest the stream's index among the streams of that type.What a sent STREAM frame carried, without its data, which stays in the stream'sSendBuffer: kept with the sent packet to acknowledge or retransmit the range.The streams of one connection (RFC 9000 sections 2 to 4): opening and accepting streams, stream and connection flow control, the send and receive state machines, RESET_STREAM and STOP_SENDING, priorities, and the control and STREAM frames they produce.The timers of a connection, kept in aTimerTable.A datagram aConnectionwants sent: usually to the peer's address on the current path, but a PATH_CHALLENGE or PATH_RESPONSE may go to another address, or (on a client probing a new path,Connection.probePath(long, java.net.InetSocketAddress)) from another local address.The transport settings of a connection, the same for both sides: flow-control windows, stream limits, timeouts, loss detection, congestion control, MTU discovery, DATAGRAM support and the debugging aids.Builds aTransportConfig.The congestion controllers this module provides.