ChooseSupportedVersion finds the best version in the overlap of ours and theirs
ours is a slice of versions that we support, sorted by our preference (descending)
theirs is a slice of versions offered by the peer. The order does not matter.
The bool returned indicates if a matching version was found.
GenerateConnectionID generates a connection ID using cryptographic random
GenerateConnectionIDForInitial generates a connection ID for the Initial packet.
It uses a length randomly chosen between 8 and 20 bytes.
GetGreasedVersions adds one reserved version number to a slice of version numbers, at a random position.
It doesn't modify the supported slice.
IsSupportedVersion returns true if the server supports this version
IsValidVersion says if the version is known to quic-go
PacketNumberLengthForHeader gets the length of the packet number for the public header
it never chooses a PacketNumberLen of 1 byte, since this is too short under certain circumstances
ParseConnectionID interprets b as a Connection ID.
It panics if b is longer than 20 bytes.
SupportedVersions lists the versions that the server supports
must be in sorted descending order
Package-Level Constants (total 102)
AckDelayExponent is the ack delay exponent used when sending ACKs.
ConnectionFlowControlMultiplier determines how much larger the connection flow control windows needs to be relative to any stream's flow control window
This is the value that Chromium is using
DefaultAckDelayExponent is the default ack delay exponent
DefaultActiveConnectionIDLimit is the default active connection ID limit
DefaultConnectionIDLength is the connection ID length that is used for multiplexed connections
if no other value is configured.
DefaultHandshakeIdleTimeout is the default idle timeout used before handshake completion.
DefaultIdleTimeout is the default idle timeout
DefaultInitialMaxData is the connection-level flow control window for receiving data
DefaultInitialMaxStreamData is the default initial stream-level flow control window for receiving data
DefaultMaxAckDelay is the default max_ack_delay
DefaultMaxIncomingStreams is the maximum number of streams that a peer may open
DefaultMaxIncomingUniStreams is the maximum number of unidirectional streams that a peer may open
DefaultMaxReceiveConnectionFlowControlWindow is the default connection-level flow control window for receiving data
DefaultMaxReceiveStreamFlowControlWindow is the default maximum stream-level flow control window for receiving data
DesiredReceiveBufferSize is the kernel UDP receive buffer size that we'd like to use.
DesiredSendBufferSize is the kernel UDP send buffer size that we'd like to use.
EncryptionHandshake is the Handshake encryption level
EncryptionInitial is the Initial encryption level
FirstIncomingBidiStreamClient is the first bidirectional stream accepted by the client
FirstIncomingBidiStreamServer is the first bidirectional stream accepted by the server
FirstIncomingUniStreamClient is the first unidirectional stream accepted by the client
FirstIncomingUniStreamServer is the first unidirectional stream accepted by the server
FirstOutgoingBidiStreamClient is the first bidirectional stream opened by the client
FirstOutgoingBidiStreamServer is the first bidirectional stream opened by the server
FirstOutgoingUniStreamClient is the first unidirectional stream opened by the client
FirstOutgoingUniStreamServer is the first unidirectional stream opened by the server
InitialPacketSize is the initial (before Path MTU discovery) maximum packet size used.
InvalidByteCount is an invalid byte count
InvalidPacketLimitAES is the maximum number of packets that we can fail to decrypt when using
AEAD_AES_128_GCM or AEAD_AES_265_GCM.
InvalidPacketLimitChaCha is the maximum number of packets that we can fail to decrypt when using AEAD_CHACHA20_POLY1305.
InvalidPacketNumber is a packet number that is never sent.
In QUIC, 0 is a valid packet number.
InvalidPacketNumber is a stream ID that is invalid.
The first valid stream ID in QUIC is 0.
InvalidStreamNum is an invalid stream number.
KeyPhaseOne is key phase 1
KeyPhaseUndefined is an undefined key phase
KeyPhaseZero is key phase 0
KeyUpdateInterval is the maximum number of packets we send or receive before initiating a key update.
Max0RTTQueueingDuration is the maximum time that we store 0-RTT packets in order to wait for the corresponding Initial to be received.
Max0RTTQueueLen is the maximum number of 0-RTT packets that we buffer for each connection.
When a new connection is created, all buffered packets are passed to the connection immediately.
To avoid blocking, this value has to be smaller than MaxConnUnprocessedPackets.
To avoid packets being dropped as undecryptable by the connection, this value has to be smaller than MaxUndecryptablePackets.
Max0RTTQueues is the maximum number of connections that we buffer 0-RTT packets for.
MaxAcceptQueueSize is the maximum number of connections that the server queues for accepting.
If the queue is full, new connection attempts will be rejected.
MaxAckDelay is the maximum time by which we delay sending ACKs.
MaxAckDelayExponent is the maximum ack delay exponent
MaxAckDelayInclGranularity is the max_ack_delay including the timer granularity.
This is the value that should be advertised to the peer.
MaxActiveConnectionIDs is the number of connection IDs that we're storing.
MaxByteCount is the maximum value of a ByteCount
MaxCongestionWindowPackets is the maximum congestion window in packet.
MaxConnIDLen is the maximum length of the connection ID
MaxConnUnprocessedPackets is the max number of packets stored in each connection that are not yet processed.
MaxCryptoStreamOffset is the maximum offset allowed on any of the crypto streams.
This limits the size of the ClientHello and Certificates that can be received.
MaxIssuedConnectionIDs is the maximum number of connection IDs that we're issuing at the same time.
MaxLargePacketBufferSize is used when using GSO
MaxMaxAckDelay is the maximum max_ack_delay
MaxNonAckElicitingAcks is the maximum number of packets containing an ACK,
but no ack-eliciting frames, that we send in a row
MaxNumAckRanges is the maximum number of ACK ranges that we send in an ACK frame.
It also serves as a limit for the packet history.
If at any point we keep track of more ranges, old ranges are discarded.
This value also guarantees that ACK Range Count value in the ACK frame can be encoded
in a single byte varint.
MaxOutstandingSentPackets is maximum number of packets saved for retransmission.
When reached, it imposes a soft limit on sending new packets:
Sending ACKs and retransmission is still allowed, but now new regular packets can be sent.
MaxPacketBufferSize maximum packet size of any QUIC packet, based on
ethernet's max size, minus the IP and UDP headers. IPv6 has a 40 byte header,
UDP adds an additional 8 bytes. This is a total overhead of 48 bytes.
Ethernet's max packet size is 1500 bytes, 1500 - 48 = 1452.
MaxPostHandshakeCryptoFrameSize is the maximum size of CRYPTO frames
we send after the handshake completes.
MaxServerUnprocessedPackets is the max number of packets stored in the server that are not yet processed.
MaxStreamCount is the maximum stream count value that can be sent in MAX_STREAMS frames
and as the stream count in the transport parameters
MaxStreamFrameSorterGaps is the maximum number of gaps between received StreamFrames
prevents DoS attacks against the streamFrameSorter
MaxStreamID is the maximum stream ID
MaxTrackedSentPackets is maximum number of sent packets saved for retransmission.
When reached, no more packets will be sent.
This value *must* be larger than MaxOutstandingSentPackets.
MaxUndecryptablePackets limits the number of undecryptable packets that are queued in the connection.
MinCoalescedPacketSize is the minimum size of a coalesced packet that we pack.
If a packet has less than this number of bytes, we won't coalesce any more packets onto it.
MinConnectionIDLenInitial is the minimum length of the destination connection ID on an Initial packet.
MinInitialPacketSize is the minimum size an Initial packet is required to have.
MinPacingDelay is the minimum duration that is used for packet pacing
If the packet packing frequency is higher, multiple packets might be sent at once.
Example: For a packet pacing delay of 200μs, we would send 5 packets at once, wait for 1ms, and so forth.
MinReceivedStatelessResetSize is the minimum size of a received stateless reset,
as specified in section 10.3 of RFC 9000.
MinRemoteIdleTimeout is the minimum value that we accept for the remote idle timeout
MinStatelessResetSize is the minimum size of a stateless reset packet that we send
MinStreamFrameBufferSize is the minimum data length of a received STREAM frame
that we use the buffer for. This protects against a DoS where an attacker would send us
very small STREAM frames to consume a lot of memory.
MinStreamFrameSize is the minimum size that has to be left in a packet, so that we add another STREAM frame.
This avoids splitting up STREAM frames into small pieces, which has 2 advantages:
1. it reduces the framing overhead
2. it reduces the head-of-line blocking, when a packet is lost
MinUnknownVersionPacketSize is the minimum size a packet with an unknown version
needs to have in order to trigger a Version Negotiation packet.
PacketNumberLen1 is a packet number length of 1 byte
PacketNumberLen2 is a packet number length of 2 bytes
PacketNumberLen3 is a packet number length of 3 bytes
PacketNumberLen4 is a packet number length of 4 bytes
PacketsPerConnectionID is the number of packets we send using one connection ID.
If the peer provices us with enough new connection IDs, we switch to a new connection ID.
PacketType0RTT is the packet type of a 0-RTT packet
PacketTypeHandshake is the packet type of a Handshake packet
PacketTypeInitial is the packet type of an Initial packet
PacketTypeRetry is the packet type of a Retry packet
the perspectives
the perspectives
SkipPacketInitialPeriod is the initial period length used for packet number skipping to prevent an Optimistic ACK attack.
Every time a packet number is skipped, the period is doubled, up to SkipPacketMaxPeriod.
SkipPacketMaxPeriod is the maximum period length used for packet number skipping.
StreamTypeBidi is a bidirectional stream
StreamTypeUni is a unidirectional stream
Estimated timer granularity.
The loss detection timer will not be set to a value smaller than granularity.
TokenValidity is the duration that a (non-retry) token is considered valid
The version numbers, making grepping easier
The version numbers, making grepping easier
The version numbers, making grepping easier
WindowUpdateThreshold is the fraction of the receive window that has to be consumed before an higher offset is advertised to the client
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.