target = "https://www.rfc-editor.org/rfc/rfc9000#section-17.4" # 17.4. Latency Spin Bit # # The latency spin bit, which is defined for 1-RTT packets # (Section 17.3.1), enables passive latency monitoring from observation # points on the network path throughout the duration of a connection. # The server reflects the spin value received, while the client "spins" # it after one RTT. On-path observers can measure the time between two # spin bit toggle events to estimate the end-to-end RTT of a # connection. # # The spin bit is only present in 1-RTT packets, since it is possible # to measure the initial RTT of a connection by observing the # handshake. Therefore, the spin bit is available after version # negotiation and connection establishment are completed. On-path # measurement and use of the latency spin bit are further discussed in # [QUIC-MANAGEABILITY]. # # The spin bit is an OPTIONAL feature of this version of QUIC. An # endpoint that does not support this feature MUST disable it, as # defined below. # # Each endpoint unilaterally decides if the spin bit is enabled or # disabled for a connection. Implementations MUST allow administrators # of clients and servers to disable the spin bit either globally or on # a per-connection basis. Even when the spin bit is not disabled by # the administrator, endpoints MUST disable their use of the spin bit # for a random selection of at least one in every 16 network paths, or # for one in every 16 connection IDs, in order to ensure that QUIC # connections that disable the spin bit are commonly observed on the # network. As each endpoint disables the spin bit independently, this # ensures that the spin bit signal is disabled on approximately one in # eight network paths. # # When the spin bit is disabled, endpoints MAY set the spin bit to any # value and MUST ignore any incoming value. It is RECOMMENDED that # endpoints set the spin bit to a random value either chosen # independently for each packet or chosen independently for each # connection ID. # # If the spin bit is enabled for the connection, the endpoint maintains # a spin value for each network path and sets the spin bit in the # packet header to the currently stored value when a 1-RTT packet is # sent on that path. The spin value is initialized to 0 in the # endpoint for each network path. Each endpoint also remembers the # highest packet number seen from its peer on each path. # # When a server receives a 1-RTT packet that increases the highest # packet number seen by the server from the client on a given network # path, it sets the spin value for that path to be equal to the spin # bit in the received packet. # # When a client receives a 1-RTT packet that increases the highest # packet number seen by the client from the server on a given network # path, it sets the spin value for that path to the inverse of the spin # bit in the received packet. # # An endpoint resets the spin value for a network path to 0 when # changing the connection ID being used on that network path. [[spec]] level = "MAY" quote = ''' The spin bit is an OPTIONAL feature of this version of QUIC. ''' [[spec]] level = "MUST" quote = ''' An endpoint that does not support this feature MUST disable it, as defined below. ''' [[spec]] level = "MUST" quote = ''' Implementations MUST allow administrators of clients and servers to disable the spin bit either globally or on a per-connection basis. ''' [[spec]] level = "MUST" quote = ''' Even when the spin bit is not disabled by the administrator, endpoints MUST disable their use of the spin bit for a random selection of at least one in every 16 network paths, or for one in every 16 connection IDs, in order to ensure that QUIC connections that disable the spin bit are commonly observed on the network. ''' [[spec]] level = "MUST" quote = ''' When the spin bit is disabled, endpoints MAY set the spin bit to any value and MUST ignore any incoming value. ''' [[spec]] level = "SHOULD" quote = ''' It is RECOMMENDED that endpoints set the spin bit to a random value either chosen independently for each packet or chosen independently for each connection ID. '''