std.net.quic
QUIC (RFC 9000) ist ein modernes Transportprotokoll auf UDP-Basis, das von Google entwickelt und durch die IETF standardisiert wurde. Gegenüber TCP+TLS bietet QUIC integrierte TLS 1.3-Verschlüsselung, Stream-Multiplexing ohne Head-of-Line-Blocking und schnellere Verbindungsaufbauzeiten (0-RTT/1-RTT Handshake). QUIC ist die Transportschicht von HTTP/3.
Die Unit implementiert den QUIC-Handshake, Stream-Management (öffnen/schließen/lesen/schreiben), alle Frame-Typen (STREAM, ACK, PADDING, CRYPTO, CONNECTION_CLOSE) und variable-length Integer-Codierung (Varint). Einsatzbereiche sind hochperformante verschlüsselte Kommunikation und HTTP/3-Implementierungen.
Imports
std.net.socketstd.net.dnsstd.net.types
Konstanten
| Name | Typ | Wert | Sichtbarkeit |
|---|---|---|---|
QUIC_PORT | int64 | 443 | pub |
QUIC_VERSION_1 | int64 | $00000001 | pub |
QUIC_PKT_INITIAL | int64 | 0 | pub |
QUIC_PKT_0RTT | int64 | 1 | pub |
QUIC_PKT_HANDSHAKE | int64 | 2 | pub |
QUIC_PKT_RETRY | int64 | 3 | pub |
QUIC_PKT_1RTT | int64 | 4 | pub |
QUIC_FRAME_PADDING | int64 | $00 | pub |
QUIC_FRAME_PING | int64 | $01 | pub |
QUIC_FRAME_ACK | int64 | $02 | pub |
QUIC_FRAME_ACK_ECN | int64 | $03 | pub |
QUIC_FRAME_RESET_STREAM | int64 | $04 | pub |
QUIC_FRAME_STOP_SENDING | int64 | $05 | pub |
QUIC_FRAME_CRYPTO | int64 | $06 | pub |
QUIC_FRAME_NEW_TOKEN | int64 | $07 | pub |
QUIC_FRAME_STREAM_BASE | int64 | $08 | pub |
QUIC_FRAME_MAX_DATA | int64 | $10 | pub |
QUIC_FRAME_MAX_STREAM_DATA | int64 | $11 | pub |
QUIC_FRAME_MAX_STREAMS_BIDI | int64 | $12 | pub |
QUIC_FRAME_MAX_STREAMS_UNI | int64 | $13 | pub |
QUIC_FRAME_DATA_BLOCKED | int64 | $14 | pub |
QUIC_FRAME_STREAM_DATA_BLOCKED | int64 | $15 | pub |
QUIC_FRAME_STREAMS_BLOCKED_BIDI | int64 | $16 | pub |
QUIC_FRAME_STREAMS_BLOCKED_UNI | int64 | $17 | pub |
QUIC_FRAME_NEW_CONNECTION_ID | int64 | $18 | pub |
QUIC_FRAME_RETIRE_CONNECTION_ID | int64 | $19 | pub |
QUIC_FRAME_PATH_CHALLENGE | int64 | $1A | pub |
QUIC_FRAME_PATH_RESPONSE | int64 | $1B | pub |
QUIC_FRAME_CONNECTION_CLOSE | int64 | $1C | pub |
QUIC_FRAME_CONNECTION_CLOSE_APP | int64 | $1D | pub |
QUIC_FRAME_HANDSHAKE_DONE | int64 | $1E | pub |
QUIC_ERR_NO_ERROR | int64 | $00 | pub |
QUIC_ERR_INTERNAL_ERROR | int64 | $01 | pub |
QUIC_ERR_CONNECTION_REFUSED | int64 | $02 | pub |
QUIC_ERR_FLOW_CONTROL_ERROR | int64 | $03 | pub |
QUIC_ERR_STREAM_LIMIT_ERROR | int64 | $04 | pub |
QUIC_ERR_STREAM_STATE_ERROR | int64 | $05 | pub |
QUIC_ERR_FINAL_SIZE_ERROR | int64 | $06 | pub |
QUIC_ERR_FRAME_ENCODING_ERROR | int64 | $07 | pub |
QUIC_ERR_TRANSPORT_PARAMETER_ERROR | int64 | $08 | pub |
QUIC_ERR_CONNECTION_ID_LIMIT_ERROR | int64 | $09 | pub |
QUIC_ERR_PROTOCOL_VIOLATION | int64 | $0A | pub |
QUIC_ERR_INVALID_TOKEN | int64 | $0B | pub |
QUIC_ERR_APPLICATION_ERROR | int64 | $0C | pub |
QUIC_ERR_CRYPTO_BUFFER_EXCEEDED | int64 | $0D | pub |
QUIC_ERR_KEY_UPDATE_ERROR | int64 | $0E | pub |
QUIC_ERR_AEAD_LIMIT_REACHED | int64 | $0F | pub |
QUIC_ERR_NO_VIABLE_PATH | int64 | $10 | pub |
QUIC_TP_ORIGINAL_DESTINATION_CONNECTION_ID | int64 | 0 | pub |
QUIC_TP_MAX_IDLE_TIMEOUT | int64 | 1 | pub |
QUIC_TP_STATELESS_RESET_TOKEN | int64 | 2 | pub |
QUIC_TP_MAX_UDP_PAYLOAD_SIZE | int64 | 3 | pub |
QUIC_TP_INITIAL_MAX_DATA | int64 | 4 | pub |
QUIC_TP_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL | int64 | 5 | pub |
QUIC_TP_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE | int64 | 6 | pub |
QUIC_TP_INITIAL_MAX_STREAM_DATA_UNI | int64 | 7 | pub |
QUIC_TP_INITIAL_MAX_STREAMS_BIDI | int64 | 8 | pub |
QUIC_TP_INITIAL_MAX_STREAMS_UNI | int64 | 9 | pub |
QUIC_TP_ACK_DELAY_EXPONENT | int64 | 10 | pub |
QUIC_TP_MAX_ACK_DELAY | int64 | 11 | pub |
QUIC_TP_DISABLE_ACTIVE_MIGRATION | int64 | 12 | pub |
QUIC_TP_PREFERRED_ADDRESS | int64 | 13 | pub |
QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT | int64 | 14 | pub |
QUIC_TP_INITIAL_SOURCE_CONNECTION_ID | int64 | 15 | pub |
QUIC_TP_RETRY_SOURCE_CONNECTION_ID | int64 | 16 | pub |
QUIC_MAX_PACKET_SIZE | int64 | 1452 | pub |
QUIC_MIN_INITIAL_SIZE | int64 | 1200 | pub |
QUIC_CONN_ID_LEN | int64 | 8 | pub |
Typen
QUICConn (struct)
| Feld | Typ |
|---|
QUICStream (struct)
| Feld | Typ |
|---|
QUICPacketHeader (struct)
| Feld | Typ |
|---|
Funktionen
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
QUICRandomBytes(buf: int64, len: int64) | pub | Kryptografisch zufällige Bytes erzeugen |
QUICWriteVarint(buf: int64, pos: int64, value: int64): int64 | pub | Variable-Length-Integer in Puffer schreiben |
QUICReadVarint(buf: int64, pos: int64): int64 | pub | Variable-Length-Integer aus Puffer lesen |
QUICVarintSize(buf: int64, pos: int64): int64 | pub | Byte-Größe eines Varint bestimmen |
QUICBuildInitialPacket(destConnId: int64, destLen: int64, srcConnId: int64, srcLen: int64): int64 | pub | QUIC-Initial-Paket für Handshake aufbauen |
QUICBuildStreamFrame(streamId: int64, data: int64, dataLen: int64, fin: int64): int64 | pub | STREAM-Frame aufbauen |
QUICBuildPaddingFrame(len: int64): int64 | pub | PADDING-Frame aufbauen |
QUICBuildAckFrame(largestAcked: int64, ackDelay: int64): int64 | pub | ACK-Frame aufbauen |
QUICBuildConnectionClose(errorCode: int64, reason: int64): int64 | pub | CONNECTION_CLOSE-Frame aufbauen |
QUICConnect(host: int64, port: int64): QUICConn | pub | QUIC-Verbindung aufbauen |
QUICOpenStream(conn: QUICConn): QUICStream | pub | Neuen Stream in Verbindung öffnen |
QUICStreamWrite(stream: QUICStream, data: int64, len: int64): int64 | pub | Daten in Stream schreiben |
QUICStreamRead(stream: QUICStream, buf: int64, bufsize: int64): int64 | pub | Daten aus Stream lesen |
QUICCloseStream(stream: QUICStream) | pub | Stream schließen |
QUICDisconnect(conn: QUICConn) | pub | QUIC-Verbindung trennen |
