Zum Hauptinhalt springen

10. Connection Termination

10. Connection Termination

An established QUIC connection can be terminated in one of three ways:

  • idle timeout (Section 10.1)
  • immediate close (Section 10.2)
  • stateless reset (Section 10.3)

10.1 Idle Timeout

If a max_idle_timeout is specified by either endpoint in its transport parameters (Section 18.2), the connection is silently closed and its state is discarded when it remains idle for longer than the minimum of the max_idle_timeout value advertised by both endpoints.

10.1.1 Liveness Testing

An endpoint can use PING frames (Section 19.2) to test the liveness of a connection or to prevent idle timeout.

10.1.2 Deferring Idle Timeout

An endpoint might need to send ack-eliciting packets to avoid an idle timeout if it wishes to maintain a connection.

10.2 Immediate Close

An endpoint sends a CONNECTION_CLOSE frame (Section 19.19) to terminate the connection immediately.

10.2.1 Closing Connection State

After sending a CONNECTION_CLOSE frame, an endpoint enters the closing state.

10.2.2 Draining Connection State

The draining state is entered when an endpoint receives a CONNECTION_CLOSE frame.

10.2.3 Immediate Close during the Handshake

Endpoints can close a connection during the handshake by sending a CONNECTION_CLOSE frame in packets using the appropriate cryptographic level.

10.3 Stateless Reset

A stateless reset is provided as an option of last resort for an endpoint that does not have access to the state of a connection.

10.3.1 Detecting a Stateless Reset

An endpoint detects a potential Stateless Reset by examining the trailing 16 bytes of a datagram.

10.3.2 Calculating a Stateless Reset Token

The stateless reset token MUST be difficult to guess.

10.3.3 Looping

The design of a Stateless Reset is such that without knowledge of the stateless reset token, a Stateless Reset cannot be generated by an endpoint.