QUIC doesn’t use TCP’s fixed 3-way handshake; it establishes a connection and encrypts data in the same round trip.

Let’s see what that looks like with some actual packets. Imagine a client (192.168.1.100) trying to connect to a server (192.168.1.200) on port 443.

First, the client sends a Version Negotiation packet. This is QUIC’s way of saying "Hey, I want to talk QUIC, here are the versions I support."

0000   4d 51 00 00 00 00 00 00  00 00 00 00 00 00 00 00  MQ..............
0010   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0030   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0040   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0050   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0060   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0070   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0080   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0090   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00e0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00f0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0100   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0110   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0120   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0130   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0140   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0150   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0160   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0170   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0180   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0190   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01e0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01f0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0200   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0210   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0220   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0230   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0240   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0250   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0260   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0270   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0280   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0290   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02e0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02f0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0300   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0310   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0320   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0330   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0340   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0350   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0360   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0370   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0380   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0390   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03e0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03f0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

The first byte 0x4d indicates a Long Header. The next byte 0x51 is the QUIC version, which is 81 in decimal. The server will respond with a Version Negotiation packet containing the versions it supports. If the client’s version is not supported, it will try again with a supported version.

If a version is agreed upon, the client sends an Initial packet, also a Long Header. This packet contains the cryptographic handshake information.

0000   80 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0010   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0030   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0040   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0050   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0060   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0070   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0080   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0090   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00e0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00f0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0100   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0110   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0120   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0130   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0140   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0150   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0160   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0170   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0180   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0190   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01e0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
01f0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0200   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0210   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0220   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0230   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0240   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0250   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0260   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0270   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0280   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0290   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02e0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
02f0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0300   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0310   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0320   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0330   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0340   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0350   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0360   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0370   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0380   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0390   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03e0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
03f0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

The first byte 0x80 is also a Long Header, but the 0x00 in the version field signifies that this is an Initial packet. This packet is encrypted, so we see a lot of 00 bytes as placeholders here. It also contains a Source Connection ID and a Destination Connection ID, which are crucial for routing packets within the QUIC connection.

Once the handshake is complete and a secure connection is established, subsequent packets use Short Headers. These headers are much smaller and don’t include version or connection IDs, as they are implicitly known.

0000   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0010   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0030   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0040   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0050   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0060   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0070   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0080   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
0090   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00a0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00b0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00c0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00d0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
00

Want structured learning?

Take the full Quic course →