![]() |
VOOZH | about |
In this demonstration a client connects to a server, negotiates a QUIC connection with TLS encryption, sends "ping", receives "pong", then terminates the connection. Click below to begin exploring.
Also available in 中文
The connection begins with the client generating a private/public keypair for key exchange. Key exchange is a technique where two parties can agree on the same number without an eavesdropper being able to tell what the number is.
An explanation of the key exchange can be found on my X25519 site, but doesn't need to be understood in depth for the rest of this page.
The private key is chosen by selecting an integer between 0 and 2256-1. The client does this by generating 32 bytes (256 bits) of random data. The private key selected is:
The public key is created from the private key as explained on the X25519 site. The public key calculated is: The public key calculation can be confirmed at the command line: At this point nothing has been sent over the network. Continue the connection below.| Val | Meaning | |
|---|---|---|
| MSB | Long header format | |
| Fixed bit (always set) | ||
| Packet type: Initial | ||
| Reserved (always unset) | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
The server creates its own private/public keypair for key exchange. Key exchange is a technique where two parties can agree on the same number without an eavesdropper being able to tell what the number is.
An explanation of the key exchange can be found on my
X25519 site,
but doesn't need to be understood in depth for the rest
of this page.
The private key is chosen by selecting an integer between
0 and 2256-1. The server does this by generating 32
bytes (256 bits) of random data. The
private key
selected is:
| Val | Meaning | |
|---|---|---|
| MSB | Long header format | |
| Fixed bit (always set) | ||
| Packet type: Initial | ||
| Reserved (always unset) | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Val | Meaning | |
|---|---|---|
| MSB | Long header format | |
| Fixed bit (always set) | ||
| Packet type: Handshake | ||
| Reserved (always unset) | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Val | Meaning | |
|---|---|---|
| MSB | Long header format | |
| Fixed bit (always set) | ||
| Packet type: Handshake | ||
| Reserved (always unset) | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Val | Meaning | |
|---|---|---|
| MSB | Long header format | |
| Fixed bit (always set) | ||
| Packet type: Initial | ||
| Reserved (always unset) | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Val | Meaning | |
|---|---|---|
| MSB | Long header format | |
| Fixed bit (always set) | ||
| Packet type: Handshake | ||
| Reserved (always unset) | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Val | Meaning | |
|---|---|---|
| MSB | Long header format | |
| Fixed bit (always set) | ||
| Packet type: Handshake | ||
| Reserved (always unset) | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Val | Meaning | |
|---|---|---|
| MSB | Short header format | |
| Fixed bit (always set) | ||
| "Spin" bit, optionally used to allow observers to measure RTT, but unused by this library | ||
| Reserved (always unset) | ||
| Key phase bit, used to signal when key rotation occurs | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Bitmask | Meaning |
|---|---|
| 0x4 | OFF: An "Offset" field is present in this frame (otherwise the offset is 0) |
| 0x2 | LEN: A "Length" field is present in this frame (otherwise consume all data in the frame) |
| 0x1 | FIN: This frame contains the final data of this stream, and the sender is done writing to it |
| Bitmask | Meaning |
|---|---|
| 0x2 | Indicates whether the stream is bi-directional () or uni-directional (). |
| 0x1 | Indicates whether the stream was opened by client () or server (). |
| Val | Meaning | |
|---|---|---|
| MSB | Long header format | |
| Fixed bit (always set) | ||
| Packet type: Handshake | ||
| Reserved (always unset) | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Val | Meaning | |
|---|---|---|
| MSB | Short header format | |
| Fixed bit (always set) | ||
| "Spin" bit, optionally used to allow observers to measure RTT, but unused by this library | ||
| Reserved (always unset) | ||
| Key phase bit, used to signal when key rotation occurs | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Bitmask | Meaning |
|---|---|
| 0x4 | OFF: An "Offset" field is present in this frame (otherwise the offset is 0) |
| 0x2 | LEN: A "Length" field is present in this frame (otherwise consume all data in the frame) |
| 0x1 | FIN: This frame contains the final data of this stream, and the sender is done writing to it |
| Bitmask | Meaning |
|---|---|
| 0x2 | Indicates whether the stream is bi-directional () or uni-directional (). |
| 0x1 | Indicates whether the stream was opened by client () or server (). |
| Val | Meaning | |
|---|---|---|
| MSB | Short header format | |
| Fixed bit (always set) | ||
| "Spin" bit, optionally used to allow observers to measure RTT, but unused by this library | ||
| Reserved (always unset) | ||
| Key phase bit, used to signal when key rotation occurs | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
| Val | Meaning | |
|---|---|---|
| MSB | Short header format | |
| Fixed bit (always set) | ||
| "Spin" bit, optionally used to allow observers to measure RTT, but unused by this library | ||
| Reserved (always unset) | ||
| Key phase bit, used to signal when key rotation occurs | ||
| LSB | Packet Number field length (indicates the "Packet Number" field below will have length of one byte) |
The code for this project, including packet captures, can be found on GitHub.
You may also be interested in a breakdown of TLS 1.3.