RFC 9946: The UDP Speed Test Protocol (UDPSTP) for One-Way IP Capacity Metric Measurement
- A. Morton,
- L. Ciavattone,
- R. Geib, Ed.
Abstract
This document addresses the problem of protocol support for measuring One-Way IP Capacity metrics specified by RFC 9097. The Method of Measurement discussed in that RFC requires a feedback channel from the receiver to control the sender's transmission rate in near real-time. This document defines the UDP Speed Test Protocol (UDPSTP) for conducting measurements as described in RFC 9097 and other related measurements.¶
Status of This Memo
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any
errata, and how to provide feedback on it may be obtained at
https://
Copyright Notice
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://
1. Introduction
The performance community has seen the development of informative Bulk Transport Capacity (BTC) definitions in "A Framework for Defining Empirical Bulk Transfer Capacity Metrics" [RFC3148] and "Defining Network Capacity" [RFC5136] as well as experimental metric definitions and methods in "Model-Based Metrics for Bulk Transport Capacity" [RFC8337].¶
This document specifies the UDP Speed Test Protocol (UDPSTP) to enable the measurement of One-Way IP Capacity metrics as defined by [RFC9097]. The Method of Measurement discussed in that RFC deploys a feedback channel from the receiver to control the sender's transmission rate in near real-time. Section 8.1 of [RFC9097] specifies requirements for this method.¶
UDPSTP supports measurement features that weren't available via TCP-based speed tests and standard measurement protocols, such as the One-Way Active Measurement Protocol (OWAMP) [RFC4656], Two-Way Active Measurement Protocol (TWAMP) [RFC5357], and Simple Two-Way Active Measurement Protocol (STAMP) [RFC8762], prior to this work. The controlled BTC measurement or Speed Test, respectively, is based on UDP rather than TCP. The bulk measurement load is unidirectional. These specifications did support the creation of asymmetric traffic in combination with some two-way communication, as supported by TWAMP and STAMP, when work on UDPSTP started. Further, two-way communications of TWAMP and STAMP are limited to reflection or unidirectional load properties, but they lack support for closed loop feedback operation. The latter enables limiting congestion of a bottleneck, whose capacity is measured, to a short time range. Support of such a control loop is the main purpose of UDPSTP.¶
Apart from measurement functionality, a Key Derivation Function (KDF) has
been added to provide cryptographic separation of key material for
authentication of protocol messages in a standardized and
cryptographical
2. Conventions and Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
- Downstream UDP Speed Test:
- A client
-initiated Network Capacity measurement between a server acting as sender and a client acting as receiver.¶ - Upstream UDP Speed Test:
- A client
-initiated Network Capacity measurement between a client acting as sender and a server acting as receiver.¶
In this document, the term "message" and the term "Protocol Data Unit",
or "PDU" [RFC5044], are used interchangeably
3. Scope, Goals, and Applicability
The scope of this document is to define a protocol to measure the Maximum IP-Layer Capacity Metric according to the Method of Measurement standardized by Section 8 of [RFC9097]. As such, this document adheres to the applicability scope defined in Section 2 of [RFC9097].¶
Some aspects of this protocol and end-host configuration can lead to support of additional forms of measurement, such as application emulation enabled by creative use of the load rate adjustment algorithm. Per [RFC9097], that algorithm must not be used as a general Congestion Control Algorithm (CCA). Instead, the load rate adjustment algorithm's goal is to help determine the Maximum IP-Layer Capacity in the context of an infrequent, diagnostic, short-term measurement.¶
The goal is to harmonize the specified IP-Layer Capacity Metric and Method across the industry, and this protocol supports the specifications of IETF (see [RFC9097]) and other Standards Development Organizations (SDOs) (see, e.g., [TR-471]).¶
The primary application of UDPSTP described here is the same as in Section 2 of [RFC7497] where:¶
The access portion of the network is the focus of this problem statement. The user typically subscribes to a service with bidirectional access partly described by rates in bits per second.¶
UDPSTP is a client-based protocol. It may be applied by consumers to measure their own access bandwidth. Consumers may prefer an independent third-party domain hosting the measurement server for this purpose. UDPSTP may be deployed in Large-scale Measurement of Broadband Performance (LMAP) environments (see [RFC7497]) and other independent third-party domain measurement server deployments. A network operator may support operation and maintenance by UDPSTP, a typical intra-domain deployment. All these deployments require or benefit from trusting the results, which are ensured by authenticated communication.¶
4. Protocol Overview
All messages defined by this document SHALL use UDP transport [RFC0768].¶
The remainder of this section gives an informative overview of the communication protocol between two test endpoints (without expressing requirements or elaborating on the authentication aspects).¶
One endpoint takes the role of server, listening for connection requests on a standard UDP Speed Test Protocol port number from the other endpoint, the client.¶
The client requires configuration of a test direction parameter (upstream or downstream test, where the client performs the role of sender or receiver, respectively) as well as the hostname or IP address(es) of the server(s) in order to begin the setup and configuration exchanges with the server(s). By default, the client uses the single, standard UDPSTP port number per connection (see Section 6). If the default port number is not used, the client may require configuration of the control port number used by each server. This would be the case if multiple server instances (processes) operate on one or more machines.¶
Additionally, multi
The protocol uses UDP transport with two
connection phases (Control and Data). As shown below, exchanges 1 and 2
constitute the Control phase, while exchanges 3 and 4 constitute the
Data phase. In this document, the term "message" and the term "Protocol
Data Unit", or "PDU" [RFC5044], are used
interchangeably
Figure 1 provides an example exchange of control and measurement PDUs for both downstream and upstream UDP Speed Tests (always client initiated):¶
4.1. Fixed-Rate Testing
A network operator who is certain of the IP-Layer Capacity to be validated can execute a fixed-rate test of the IP-Layer Capacity and avoid activating the measurement load rate adjustment algorithm (see Section 8.1 of [RFC9097]). Fixed-rate testing SHOULD only be activated for operation and maintenance purposes by operators within their local network domain.¶
If a subscriber requests a diagnostic test from the network
operator, it strongly implies that there is no certainty on the
bottleneck capacity and initiating a UDP Speed Test based on the load
adjustment algorithm is RECOMMENDED. To protect against misuse, a
client (and in general, a consumer) MUST NOT be able to initiate a
fixed-rate test. A network operator may conduct a fixed-rate test for
a stable measurement at or near the maximum determined by the load
rate adjustment algorithm for debugging purposes. This may be valuable
for post
4.2. Handling of and Safeguards Required by Self-Induced Congestion
Active capacity measurement requires inducing intentional congestion. On paths where the capacity bottleneck is not shared with other flows, this self-congestion will be observed as loss and/or delay. However, when a path is shared by other flows, the measurement traffic can congest the bottleneck on the path and therefore degrade the performance of other flows. Unrestricted use of UDPSTP could lead to traffic starvation and significant issues.¶
Measurements that generate traffic on shared paths (including Wi-Fi and Internet paths) need to consider the impact on other traffic. Fixed-rate testing operates without congestion control and therefore must not be executed over other operators' network segments. Fixed-rate testing, therefore, is limited to paths within a domain entirely managed and operated section-wise and end-to-end by the network operator performing the measurement. When the risks of disruption to other flows has been considered, testing could be extended to include adjacent operational domains for which there is also a testing agreement.¶
Concurrent tests that congest a common bottleneck will impair the
measurement and result in additional congestion. Concurrent
measurements to measure the maximum capacity on a single path are
counterproducti
A load rate adjustment algorithm (see Section 5.1) is required to mitigate the impact of this congestion and to limit the duration of any congestion by terminating the test when sudden impairments or a loss of connectivity is detected.¶
5. Requirements, Security Operations, and Optional Checksum
Security and checksum operations aren't covered by [RFC9097], which only defines the Method of Measurement. This
section adds the operational specification related to security and
the optional checksum. Due to the additional complexities, and loss of the
direct mapping of packets to datagrams between Layer 3 and Layer 4, it is
recommended that Layer 3 fragmentation be avoided. A simplified approach
is to choose the default datagram size that is small enough to prevent
fragmentation. This version of the specification does not support
Datagram Packetization Layer Path MTU Discovery
(DPLPMTUD) [RFC8899]. A future version could specify how
to support this. DPLPMTUD support will require a carefully adapted
protocol design to ensure interoperabilit
Note: When this specification is used for network debugging, it may be useful for fragmentation to be under the control of the test administrator.¶
This section specifies generic requirements, which a measurement load rate adjustment algorithm conforming to this specification MUST fulfill.¶
5.1. Load Rate Adjustment Algorithm Requirements
This document specifies an active capacity measurement method using a load rate adjustment algorithm. The requirements listed in this section and the currently standardized load rate adjustment algorithms B [Y.1540Amd2] and C [TR-471] result from years of experiments and testing by the original authors. These tests were performed in labs, and also in the Internet, and covered a set of different fixed, broadband, mobile, and wireless access types and technologies in different countries and continents. Further, the load rate adjustment algorithm requirements listed below reflect feedback from performance measurement experts, as well as changes resulting from the standardization of [RFC9097] (reflected also in algorithm B [Y.1540Amd2], which updates a prior version of this algorithm).¶
Load rate adjustment algorithms for capacity measurement MUST comply with the requirements specified by this section. New standard load rate adjustment algorithms for capacity measurement MUST be reviewed by IETF designated experts prior to assignment of a code point in the "Test Activation PDU Rate Adjustment Algo" registry.¶
The load rate adjustment algorithm for capacity measurement requirements are as follows:¶
The following measurement load rate adjustment algorithms are subject to these requirements:¶
5.2. Parameters and Definitions
Please refer to Section 4 of [RFC9097] for an overview of parameters related to the Maximum IP-Layer Capacity Metric and Method. A set of error codes to support debugging are provided in Section 12.3.5.¶
5.3. Security Mode Operations
There are two security modes of operation that perform authentication of the client/server messaging. The two modes are:¶
The requirements discussed hereafter refer to the PDUs in Sections 6 and 7 below, primarily the authMode, keyId, authUnixTime, and authDigest fields. The roles in this section have been generalized so that the requirements for the PDU sender and receiver can be re-used and referred to by other sections within this document. Each successive mode increases security but comes with additional performance impacts and complexity. The protocol is used with unsubstantial payload, and it may operate on very low-end devices. Offering the flexibility of various security operation modes allows for accommodation of available end-device resources. In general, an active measurement technique as the one defined by this document is better suited to protect the privacy of those involved in measurements [RFC7594].¶
A load rate adjustment method needs to satisfy the requirements listed in Section 5.1. This is necessary also to avoid potentially inducing congestion after there is an overload or loss (including loss on the control path).¶
5.3.1. Mode 1: Required Authenticated Mode
In this mode, the client and the server SHALL be configured to use one of a number of shared secret keys, designated via the numeric keyId field (see Section 5.4). This key SHALL be used as input to the KDF, as specified in Section 5.4.1, to obtain the actual keys used by the client and server for authentication.¶
During the Control phase, the sender SHALL read the current system (wall-clock) time and populate the authUnixTime field and next calculate the 32-octet HMAC-SHA-256 hash of the entire PDU according to Section 6 of [RFC6234] (with the authDigest and checkSum preset to all zeroes). The authDigest field is filled by the result, then the packet is sent to the receiver. The value in the authUnixTime field is a 32-bit timestamp, and a 10-second tolerance window (+/- 5 seconds) SHALL be used by the receiver to distinguish a subsequent replay of a PDU. See Table 2 of [TR-471] for a recommended timestamp resolution.¶
Upon reception, the receiver SHALL validate the message PDU for correct length, validity of authDigest, immediacy of authUnixTime, and expected formatting (PDU-specific fields are also checked, such as protocol version). Validation of the authDigest requires that it be extracted from the PDU and the field, along with the checkSum field, zeroed prior to the Hashed Message Authentication Code (HMAC) calculation used for comparison (see Section 7.2 of [RFC9145]).¶
If the validation fails, the receiver SHOULD NOT continue with the Control phase and SHOULD implement silent rejection (no further packets sent on the address/port pairs). The exception is when the testing hosts have been configured for troubleshooting Control phase failures and rejection messages will aid in the process.¶
If the validation succeeds, the receiver SHALL continue with the Control phase and compose a successful response or a response indicating the error conditions identified (if any).¶
This process SHALL be executed for the request and response in the Test Setup exchange, including the Null Request (Section 6) and the Test Activation exchange (Section 7).¶
5.3.2. Mode 2: Optional Authenticated Mode for Data Phase
This mode incorporates Authenticated mode 1. When using the optional authentication during the Data phase, authentication SHALL also be applied to the Status Feedback PDU (see Section 8.2). The client sends the Status PDU in a downstream test, and the server sends it in an upstream test.¶
The Status PDU sender SHALL 1) read the current system (wall-clock) time and populate the authUnixTime field, 2) calculate the authDigest field of the entire Status PDU (with the authDigest and checkSum preset to all zeroes), and 3) send the packet to the receiver. The values of authUnixTime field and authDigest field are determined as defined by Section 5.3.1.¶
Upon reception, the receiver SHALL validate the message PDU for correct length, validity of authDigest, immediacy of authUnixTime, and expected formatting (PDU-specific fields are also checked, such as protocol version). Validation of the authDigest will require that it be extracted from the PDU and the field, along with the checkSum field, zeroed prior to the HMAC calculation used for comparison.¶
If the authentication validation fails, the receiver SHALL ignore the message. If the watchdog timer expires (due to successive failed validations), the test session will prematurely terminate (and no further load traffic SHALL be transmitted). This is necessary also to avoid potentially inducing congestion after there is an overload or loss on the control path.¶
If this optional mode has not been selected, then the keyId, authUnixTime, and authDigest fields of the Status PDU (see Section 8.2) SHALL be set to all zeroes.¶
5.4. Key Management
Section 2 of [RFC7210] specifies a conceptual database for long-lived cryptographic keys. The key table SHALL be used with the REQUIRED authentication mode and the OPTIONAL authentication mode (using the same key). For authentication, this key SHALL only be used as input to the KDF, as specified in Section 5.4.1, to derive the actual keys used for authentication processing. Key rotation and related management specifics are beyond the scope of this document.¶
The key table SHALL have (at least) the following fields per Section 2 of [RFC7210]:¶
The LocalKeyName SHALL be determined from the corresponding keyId field in the PDUs that follow.¶
5.4.1. Key Derivation Function (KDF)
A KDF is a one-way function that
provides cryptographic separation of key material. The protocol
requires a KDF to securely derive cryptographic keys used for
authentication of protocol messages. The inclusion of a KDF ensures
that keys are generated in a standardized, cryptographical
The KDF algorithm SHALL be a Key Derivation Function in Counter Mode, as specified in Section 4.1 of [NIST800-108]. This algorithm uses a counter-based mechanism to generate key material from a shared secret, ensuring deterministic and secure key derivation. The Pseudorandom Function (PRF) used in the KDF SHALL be HMAC-SHA-256, as defined in Section 6 of [RFC6234]. IANA has assigned "HMAC-SHA-256" as a new KeyTable KDF (Section 12.2).¶
The KDF SHALL use the following parameters:¶
The total derived key material SHALL be 512 bits (64 octets) in length. The key material SHALL be structured as follows, from most significant bit (MSB) to least significant bit (LSB):¶
This structure ensures that the derived keys are sufficient for securing authentication operations within the protocol, while maintaining clear separation of function and directionality.¶
If authentication of the initial Setup Request PDU received by the server fails, due to an invalid authDigest field, any and all derived keying material and keys SHALL be considered invalid.¶
The key material derived from the initial Setup Request PDU, either at the client prior to transmission or at the server upon reception, SHALL be used for all subsequent PDUs sent between them for that test connection. As such, the KDF is only required to be executed once by the client and server for each test connection.¶
Appendix A, Figure 12 provides a code snippet demonstrating derivation of the specified keys from key material using the OpenSSL cryptographic library, specifically the high-level Key-Based EVP_KDF implementation (Key-Based Envelope Key Derivation Function); see [EVP_KDF-KB] for details.¶
5.5. Configuration of Network Functions with Stateful Filtering
Successful interaction with a local firewall assumes the firewall is configured to allow a host to open a bidirectional connection using unique source and destination addresses as well as port numbers (i.e., a 4-tuple) by sending a packet using that 4-tuple for a given transport protocol. The client's interaction with its firewall depends on this configuration.¶
The firewall at the server MUST be configured with an open pinhole for the server IP address and standard UDP port number of the server. All messages sent by the client to the server use this standard UDP port number.¶
The server uses one ephemeral UDP port number per test connection. Assuming that the firewall administration at the server does not allow an open UDP ephemeral port range, then the server MUST send a Null Request to the client from the ephemeral port number communicated to the client in the Test Setup Response. The Null Request may not reach the client: it may be discarded by the client's firewall.¶
If the server firewall administration allows an open UDP ephemeral port range, then the Null Request is not strictly necessary. However, the availability of an open port range policy cannot be assumed.¶
Network Address Translators (NATs) are expected to offer support of a wider set of operational configurations as compared to firewalls. Specifications covering NAT behavior, apart from the above, are out of the scope of this document, as are combined implementations of NAT and firewalls too.¶
5.6. Optional Checksum
The protocol MUST utilize the standard UDP checksum for all IPv4 and IPv6 datagrams it sends. The purpose of this checksum is to protect the intended recipient as well as other recipients to whom a corrupted packet may be delivered. This provides:¶
All of the PDUs exchanged between the client and server support an optional header checksum that covers the various fields in the UDPSTP PDU (excluding the payload content of the Load PDU and, to be clear, also the IP and UDP headers). The calculation is the same as the 16-bit one's complement Internet checksum used in the IPv4 packet Header Checksum specification (see Section 3.1 of [RFC0791]). This checksum is intended for environments where UDP data integrity may be uncertain. This includes situations where the standard UDP checksum is not verified upon reception or a nonstandard network API is in use (things typically done to improve performance on low-end devices). However, all UDPSTP datagrams transmitted via IPv4 or IPv6 SHALL include a standard UDP checksum to protect other potential recipients to whom a corrupted packet may be delivered. In the case of a nonstandard network API, one option to reduce processing overhead may be to restrict testing to only utilize a payload content of all zeros so that the UDP checksum calculation need not include it for Load PDUs.¶
If a PDU sender is populating the checkSum field, it SHALL do so as the last step after the PDU is built in all other respects (with the checkSum field set to zero prior to the calculation). The PDU receiver SHALL subsequently verify the PDU checksum whenever checksum processing has been configured and the field is populated. If PDU checksum validation fails, the PDU SHALL be discarded.¶
Because of the redundancy when used in conjunction with authentication, it is OPTIONAL for a PDU sender to utilize the UDPSTP checkSum field. However, because authentication is not applicable to the Load PDU, the checkSum field SHALL be utilized by the sender whenever UDP data integrity may be uncertain (as outlined above).¶
6. Test Setup Request and Response
The client source IP address and the server destination IP address MUST NOT be a broadcast or multicast address. Any Test Setup Request or Test Setup Response packet containing a multicast or broadcast source or destination IP address MUST be silently dropped and ignored.¶
The measurement method and the protocol specified by this document are expected to function with unicast and anycast IP addresses.¶
6.1. Client Generates Test Setup Request
The client SHALL begin the Control phase exchange by sending a Test
Setup Request message to the server's (standard) control port. This
standard UDPSTP port number is utilized for each connection of a
multi
The client SHALL simultaneously start a test initiation timer so that if the Control phase fails to complete Test Setup and Test Activation exchanges in the allocated time, the client software SHALL exit (i.e., the UDP socket will be closed and an error message will be displayed to the user). Lost messages result in a Test Setup and Test Activation failure. The test initiation timer MAY reuse the test termination timeout value.¶
The watchdog timeout is configured as a 1-second interval to trigger a warning message that the received traffic has stopped. The test termination timeout is based on the watchdog interval and implements a wait time of 2 additional seconds before triggering a non-graceful termination.¶
Note: Any field labeled as 'reserved for alignment', in any PDU, MUST be set to 0 and MUST be ignored upon receipt.¶
The UDP PDU format layout SHALL be as follows (big-endian AB, starting with the most significant byte and ending with the least significant byte):¶
Additional details regarding the Setup Request and Response fields are as follows:¶
- pduId:
- A two-octet field. IANA has assigned the hex value 0xACE1 (Section 12.3.1).¶
- protocolVer:
- A two-octet field identifying the actual protocol version. IANA has assigned 20 as the value (Section 12.3.2).¶
- mcIndex:
- A one-octet field indicating the index of a connection
relative to all connections that make up a single test (starting at 0,
incremented by 1 per connection). It is used to differentiate separate
connections within a multi
-connection test. An implementation may restrict the number of connections supported for a single test to a value less than or equal to 255.¶ - mcCount:
- A one-octet field indicating the total count of connections that the client is attempting to set up.¶
- mcIdent:
- A two-octet field containing a pseudorandom non-zero
identifier (via a Random Number Generator, source port number, ...)
that is common to all connections of a single test. It is used by
clients/servers to associate separate connections with a single
multi
-connection test.¶ - cmdRequest:
- A one-octet field set to CHSR
_CREQ _SETUPREQ to indicate a Setup Request message. Note that CHSR_CREQ_NONE remains unused.¶ - cmdResponse:
- A one-octet field. All Request PDUs always have a
Command Response of XXXX_CRSP_NONE (i.e., CHSR_CRSP_NONE, CHNR_CRSP_NONE, or CHTA
_CRSP _NONE ).¶ - maxBandwidth:
- A two-octet field. A non-zero value of this field specifies the maximum bit rate the client expects to send or receive during the requested test in Mbps. The server compares this value to its currently available configured limit for test admission control. This field MAY be used to rate-limit the maximum rate the server should attempt. The maxBandwidth field's most significant bit, the CHSR_USDIR_BIT, is set to 0 by default to indicate "downstream" and has to be set to 1 to indicate "upstream".¶
- testPort:
- A two-octet field set to zero in the Test Setup Request and populated by the server in the Test Setup Response. It contains the UDP ephemeral port number on the server that the client has to use for the Test Activation Request and subsequent Load or Status PDUs.¶
- modifierBitmap:
-
A one-octet field. This document only assigns two bits in this bitmap; see Section 12.3.3:¶
- CHSR
_JUMBO _STATUS (0x01): - This bit SHALL be set by default.
By default, sending rates up to 1 Gbps SHALL NOT produce IP packet
sizes greater than 1250 bytes (unless CHSR
_TRADITIONAL _MTU is set), while rates above 1 Gbps MAY produce IP packet sizes up to 9000 bytes. When CHSR _JUMBO _STATUS is not set, all sending rates SHALL NOT produce IP packet sizes greater than 1250 bytes (unless CHSR _TRADITIONAL _MTU is set).¶ - CHSR
_TRADITIONAL _MTU (0x02): - This bit SHALL NOT be set by
default. If set, sending rates up to 1 Gbps MAY produce IP packets
up to the traditional size of 1500 bytes. If CHSR
_JUMBO _STATUS is simultaneously not set, all sending rates SHALL NOT produce IP packets greater than the traditional size of 1500 bytes.¶
- CHSR
Other bit positions are left unassigned per this document.¶
- authMode:
-
A one-octet field. The authMode field currently has two values assigned (see Section 12.3.4). One of the following has to be set (see Section 5.3 for requirements and details of operation):¶
A range of 60 through 63 is reserved for experimentation
- authUnixTime:
- A 32-bit timestamp of the current system (wall-clock) time since the Unix Epoch on January 1, 1970 at 00:00:00 UTC.¶
- authDigest:
- This field contains the 32-octet HMAC-SHA-256 hash that covers the entire PDU. Normally, the calculation is done as the last step of building the PDU. However, if the optional checkSum field is being utilized, it becomes the penultimate step and is done just prior to the checksum calculation (with the checkSum field set to zero).¶
- keyId:
- A one-octet field carrying localKeyName, the numeric key identifier for a key in the shared key table.¶
- reservedAuth1:
- A one-octet field. This field MUST be set to 0 and
MUST be ignored upon receipt. Consistent naming and placement of the
reservedAuth1 field across all PDUs is done to minimize authentication
-related changes in future UDPSTP versions.¶ - checkSum:
- A two-octet field containing an optional checksum of the entire PDU (see Section 5.6 for guidance). The calculation is done as the very last step of building the PDU, with the checkSum field set to zero.¶
6.2. Server Test Setup Request Processing and Response Generation
This section describes the processes at the server that are used to evaluate the Test Setup Request and determine the next steps. When the server receives the Setup Request, it SHALL first perform the following:¶
Message Verification Procedure:¶
Note: If any of the above checks fail, the message SHALL be considered invalid.¶
6.2.1. Test Setup Request Processing -- Rejection
The server SHALL then evaluate the other fields in the protocol header, such as the protocol version, the PDU ID (to validate the type of message), the maximum bandwidth requested for the test, and the modifierBitmap for use of options such as Jumbo datagram status and Traditional MTU (1500 bytes).¶
If the client has selected options for¶
that do not match the server configuration, the server MUST reject the Setup Request.¶
If the Setup Request must be rejected, the conditions below determine whether the server sends a response:¶
The additional circumstances when a server SHALL NOT communicate the appropriate Command Response code for an error condition (fail silently) are when:¶
In this case, the server will allow setup attempts to terminate silently. Attack detection is beyond the scope of this specification.¶
When the server replies to a Test Setup Request message, the Test Setup Response PDU is structured identically to the Test Setup Request PDU and SHALL retain the original values received in it, with the following exceptions:¶
The Setup Request
6.2.2. Test Setup Request Processing -- Acceptance
If the server finds that the Setup Request matches its configuration and is otherwise acceptable, the server SHALL initiate a new connection to receive the Test Activation Request from the client, using a new UDP socket allocated from the UDP ephemeral port range. This new socket will also be used for the subsequent Load and Status PDUs that are part of testing (with the port number communicated back to the client in testPort field of the Test Setup Response). Then, the server SHALL start a watchdog timer (to terminate the new connection if the client goes silent) and SHALL send the Test Setup Response back to the client. The watchdog timer is set to the same value as on the client side (see Section 6)¶
When the server replies to the Test Setup Request message, the Test Setup Response PDU is structured identically to the Test Setup Request PDU and SHALL retain the original values received in it, with the following exceptions:¶
Finally, the new UDP connection associated with the new socket and port number are made ready, and the server awaits further communication there.¶
To ensure that a server's local firewall will successfully allow packets received for the new ephemeral port number, the server SHALL immediately send a Null Request with the corresponding values including the source and destination IP addresses and port numbers. The source port SHALL be the new ephemeral port. This operation allows communication to the server even when the server's local firewall prohibits open ranges of ephemeral ports. The packet is not expected to arrive successfully at the client if the client-side firewall blocks unexpected traffic. If the Null Request arrives at the client, it is a confirmation that further exchanges are possible on the new port-pair (but this is not strictly necessary). If received, the client SHALL follow the Message Verification Procedure listed in Section 6.2, Paragraph 2. Note that there is no response to a Null Request.¶
The UDP PDU format layout SHALL be as follows (big-endian AB):¶
The authentication and checkSum fields follow the same methodology as with the Setup Request and Response.¶
Additional details regarding the Null Request fields are as follows:¶
- pduId:
- IANA has assigned the hex value 0xDEAD (Section 12.3.1).¶
- cmdRequest:
- Set to CHNR
_CREQ _NULLREQ to indicate a Null Request message.¶ - cmdResponse:
- Set to CHNR_CRSP_NONE.¶
- authMode:
- Same as in Section 6.1.¶
- authUnixTime:
- Same as in Section 6.1.¶
- authDigest:
- Same as in Section 6.1.¶
- keyId:
- Same as in Section 6.1.¶
- reservedAuth1:
- Same as in Section 6.1.¶
- checkSum:
- Same as in Section 6.1.¶
If a Test Activation Request is not subsequently received from the client on the new ephemeral port number before the watchdog timer expires, the server SHALL close the socket and deallocate the associated resources.¶
The Null Request message PDU SHALL be organized as follows:¶
6.3. Setup Response Processing at the Client
When the client receives the Test Setup Response message, it SHALL first follow the Message Verification Procedure listed in Section 6.2, Paragraph 2.¶
The client SHALL then proceed to evaluate the other fields in the protocol,
beginning with the protocol version, PDU ID (to validate the type of
message), and cmdRequest for the role of the message, which MUST be
Test Setup Response, CHSR
If the cmdResponse value indicates an error (values greater than
CHSR
7. Test Activation Request and Response
This section is divided according to the sending and processing of the client and server and again at the client.¶
7.1. Client Generates Test Activation Request
Upon a successful setup exchange, the client SHALL compose and send the Test Activation Request to the UDP port number the server communicated in the Test Setup Response (the new ephemeral port, and not the standard UDPSTP port).¶
The UDP PDU format layout is as follows (big-endian AB):¶
Fields are populated based on default values or command-line options. The authentication and checkSum fields follow the same methodology as with the Setup Request and Response.¶
- pduId:
- IANA has assigned the hex value 0xACE2 (Section 12.3.1).¶
- cmdRequest:
- Set to CHTA
_CREQ _TESTACTUS to indicate an upstream test activation or alternatively to CHTA _CREQ _TESTACTDS to indicate a downstream test activation. Note that CHTA_CREQ_NONE remains unused. See Section 12.3.6.¶ - cmdResponse:
- Three CHTA
_CRSP _<Indication> values are defined; see Figure 7.¶ - lowThresh:
- A two-octet field. The lower threshold on the range of Round-Trip Time (RTT) variation (the range is composed of values above the minimum RTT); see also Table 3 [TR-471].¶
- upperThresh:
- A two-octet field. The upper threshold on the range of RTT variation (the range is composed of values above the minimum RTT); see also Table 3 of [TR-471].¶
- trialInt:
- A two-octet field indicating the Status Feedback / trial interval in ms. The test interval Delta_t is subdivided into a number of Sub-Intervals dt, and each Sub-Interval is further divided into a number of trial intervals (see [TR-471]). Starts by 1 and is continuously incremented during a single test interval (testIntTime).¶
- testIntTime:
- A two-octet field. Duration of the test (either downlink or uplink) with search algorithm in use, which serves as the maximum duration of the search process in seconds (see also TestInterval in Table 3 of [TR-471]).¶
- dscpEcn:
- Diffserv code point and ECN field; see also the DSCP field specified by [TR-471]. This specification does not provide an ECN-capable transport; therefore, the sender SHALL set the ECN field to not_ECT.¶
- srIndexConf:
- A two-octet field. The requested Configured Sending
Rate Table index, used in a Test Activation Request, of the desired
fixed or starting sending rate (depending on whether
CHTA
_SRIDX _ISSTART is cleared or set, respectively). Because a value of zero is a valid fixed or starting sending rate index, the field SHALL be set to its maximum (CHTA _SRIDX _DEF ) when requesting the default behavior of the server (starting with the selected load rate adjustment algorithm at its minimum/zero index). This SHALL be equivalent to setting srIndexConf to zero and setting the CHTA _SRIDX _ISSTART bit.¶ - useOwDelVar:
- A one-octet field. Boolean, default True (if False, use RTT=round-trip delay variation in the load rate adjustment algorithm; if True, use EnableIPDV, which uses one-way delay variation for the load rate adjustment algorithm). See EnableIPDV in Table 1 of [TR-471].¶
- highSpeedDelta:
- A one-octet field; see Appendix A of [RFC9097].¶
- slowAdjThresh and seqErrThresh:
- Two two-octet fields; see Appendix A of [RFC9097].¶
- ignoreOooDup:
- A one-octet field. Ignore out-of-order duplicates, Boolean. When True, only loss counts toward received packet sequence number errors. When False, loss, out-of-order, and duplicate totals are all counted as sequence number errors. Default is True (see also Table 3 of [TR-471]).¶
- modifierBitmap:
-
A one-octet field. This document only assigns two bits in this bitmap; see Section 12.3.7:¶
Other bit positions are left unassigned per this document.¶
- rateAdjAlgo:
- A one-octet field. The applied load rate adjustment algorithm; see Section 12.3.8.¶
- srStruct:
-
Sending Rate structure. Used by the server in a Test Activation Response for an upstream test to communicate the (initial) Load PDU transmission parameters the client SHALL use. For a Test Activation Request or a downstream test, this structure SHALL be zeroed. Two sets of periodic transmission parameters are available, allowing for dual independent transmitters (to support a high degree of rate granularity). The fields are defined as follows:¶
- txInterval1 and txInterval2:
- Two four-octet fields indicating the load rate transmit interval in us (microseconds). A 100 us granularity is recommended for optimal rate selection.¶
- udpPayload1 and udpPayload2:
- Two four-octet fields indicating the UDP payload at load rate in bytes.¶
- burstSize1 and burstSize2:
- Two four-octet fields indicating the burst size at load rate by a dimensionless number (of datagrams).¶
- udpAddon2:
- A four-octet field indicating the size of a single Load PDU to be sent at the end of the txInterval2 send sequence, even when udpPayload2 or burstSize2 are zero and result in no transmission of their own.¶
- subIntPeriod:
- A two-octet field. Test Sub-Interval period in ms (see also Table 3 of [TR-471]). Trials with subIntPeriod in a range of 100 to 10000 ms resulted in a default value of 1000 ms.¶
- authMode:
- Same as in Section 6.1.¶
- authUnixTime:
- Same as in Section 6.1.¶
- authDigest:
- Same as in Section 6.1.¶
- keyId:
- Same as in Section 6.1.¶
- reservedAuth1:
- Same as in Section 6.1.¶
- checkSum:
- Same as in Section 6.1.¶
The Test Activation Request
7.2. Server Processes Test Activation Request and Generates Response
After the server receives the Test Activation Request on the new
connection, it chooses to accept, ignore, or modify any of the test
parameters. When the server replies to the Test Activation Request
message, the Test Activation Response PDU is structured identically to
the Request PDU and SHALL retain the original values received in it
unless they are explicitly coerced to a server
When the server receives the Test Activation Request message, it SHALL first follow the Message Verification Procedure listed in Section 6.2, Paragraph 2.¶
7.2.1. Server Rejects or Modifies Request
When evaluating the Test Activation Request, the server MAY allow the client to specify its own fixed or starting send rate via srIndexConf.¶
Alternatively, the server MAY enforce a maximum limit of the fixed or starting send rate, which the client can successfully request. If the client's Test Activation Request exceeds the server's configured maximum, the server MUST either reject the request or coerce the value to the configured maximum bit rate, and communicate that maximum to the client in the Test Activation Response. The client can of course choose to end the test, as appropriate.¶
Other parameters where the server has the OPTION to coerce the client to use values other than those in the Test Activation Request are (grouped by role):¶
Coercion is a step towards performing a test with the
server
Note that the server also has the option of completely rejecting
the request and sending back an appropriate cmdResponse field value
(currently only CHTA
Whether this error response is sent or not depends on the security mode of operation and the outcome of authDigest validation.¶
If the Test Activation Request must be rejected (due to the
Command Response value being CHTA
The additional circumstances when a server SHALL NOT communicate the appropriate Command Response code for an error condition (fail silently) are when:¶
In this case, the server will allow Test Activation Requests to terminate silently. Attack detection is beyond the scope of this specification.¶
7.2.2. Server Accepts Request and Generates Response
When the server sends the Test Activation Response, it SHALL set the cmdResponse field to CHTA_CRSP_ACKOK (see Section 12.3.9).¶
If the client has requested an upstream test, the server SHALL:¶
When generating the Test Activation Response (acceptance) for a downstream test, the server SHALL set all octets of the Sending Rate structure to zero.¶
If activation continues, the server prepares the new connection for an upstream OR downstream test.¶
In the case of an upstream test, the server SHALL prepare to use a single timer to send Status PDUs at the specified interval. For a downstream test, the server SHALL prepare to utilize dual timers to send Load PDUs based on:¶
The server SHALL then send the Test Activation Response back to the client, update the watchdog timer with a new timeout value, and set a test duration timer to eventually stop the test.¶
7.3. Client Processes Test Activation Response
When the client receives the Test Activation Response message, it SHALL first follow the Message Verification Procedure listed in Section 6.2, Paragraph 2.¶
After the client receives the (vetted) Test Activation Response, it first checks the Command Response value.¶
If the client receives a Test Activation cmdResponse field value that indicates an error, the client SHALL display/report a relevant message to the user or measurement system and exit.¶
If the client receives a Test Activation cmdResponse field value that is not equal to one of the codes defined in Section 12.3.9, the client MUST terminate the connection and terminate operation of the current setup procedure.¶
If the client receives a Test Activation Command Response value
that indicates success (e.g., CHTA
To finalize an accepted test activation, the client SHALL prepare its connection for either an upstream test with dual timers set to send Load PDUs (based on the starting transmission parameters sent by the server) OR a downstream test with a single timer to send Status PDUs at the specified interval.¶
Then, the client SHALL stop the test initiation timer and start a watchdog timer to detect if the server goes quiet.¶
The connection is now ready for testing.¶
8. Test Load Stream Transmission and Measurement Status Feedback Messages
This section describes the Data phase of the protocol. The roles of sender and receiver vary depending on whether the direction of testing is from server to client, or the reverse.¶
8.1. Load PDU and Roles
Testing proceeds with one endpoint sending Load PDUs, based on transmission parameters from the Sending Rate Table, and the other endpoint sending Status Feedback messages to communicate the traffic conditions at the receiver. When the server is sending Status Feedback messages, they will also contain the latest transmission parameters from the Sending Rate Table that the client SHALL use.¶
When a Load PDU is received, the receiver SHALL do the following:¶
If any of the above checks fail, the message SHALL be considered invalid.¶
The watchdog timer at the receiver SHALL be reset each time a valid Load PDU is received (which includes verification of the checkSum, if in use). See non-graceful test stop in Section 9 for handling the watchdog timeout expiration at each endpoint. Note that the watchdog timer's purpose is to detect a connection failure or a massive congestion condition only.¶
When the server is sending Load PDUs in the role of sender, it SHALL use the transmission parameters directly from the Sending Rate Table via the index that is currently selected (which was indirectly based on the feedback in its received Status Feedback messages).¶
However, when the client is sending Load PDUs in the role of sender, it SHALL use the discrete transmission parameters that were communicated by the server in its periodic Status Feedback messages (and not referencing a Sending Rate Table directly). This approach allows the server to control the individual sending rates as well as the algorithm used to decide when and how to adjust the rate.¶
The server uses a load rate adjustment algorithm that evaluates measurements taken locally at the Load PDU receiver. When the client is the receiver, the information is communicated to the server via periodic Status Feedback messages. When the server is the receiver, the information is used directly (although it is also communicated to the client via its periodic Status Feedback messages). This approach is unique to this protocol; it provides the ability to search for the maximum IP capacity and specify specific sender behaviors that are absent from other testing tools. Although the algorithm depends on the protocol, it is not part of the protocol per se.¶
The default algorithm (B; see [Y.1540]) has three paths to its decision on the next sending rate:¶
Algorithm B also has two modes for increasing
An OPTIONAL load rate adjustment algorithm (designated C) has been defined in [TR-471]. Algorithm C operation and modes are similar to B, but C uses multiplicative increases in the fast mode to reach the gigabit range quickly and provides the option to retry the fast mode during a test (which improves the measurement accuracy in dynamic or error-prone access, such as radio access).¶
On the other hand, the test configuration MAY use a fixed sending rate requested by the client, using the field srIndexConf.¶
The client MAY communicate the desired fixed rate in its Test Activation Request.¶
The UDP PDU format layout SHALL be as follows (big-endian AB):¶
Specific details regarding Load PDU fields are as follows:¶
- pduId:
- IANA has assigned the hex value 0xBEEF (Section 12.3.1).¶
- testAction:
- A one-octet field designating the current test action as either TEST_ACT_TEST (testing in progress), TEST_ACT_STOP1 (first phase of graceful termination, used locally by server), or TEST_ACT_STOP2 (second phase of graceful termination, sent by server and reciprocated by client). See Section 9 for additional information on test termination.¶
- rxStopped:
- A one-octet field. Boolean, 0 or 1, used to indicate to the remote endpoint that local receive traffic (either Load or Status PDUs) has stopped. All outgoing Load or Status PDUs SHALL continue to assert this indication until traffic is received again, or the test is terminated. The time threshold to trigger this condition is expected to be a reasonable fraction of the watchdog timeout (a default of one second is recommended).¶
- lpduSeqNo:
- A four-octet field indicating the Load PDU sequence number (starting at 1). Used to determine loss, out-of-order, and duplicate totals.¶
- udpPayload:
- A two-octet field indicating the total payload size of the UDP datagram including the Load PDU message header and payload content (i.e., what the UDP socket read function would return). This field allows the Load PDU receiver to maintain accurate receive statistics if utilizing receive truncation (only requesting the Load PDU message header octets from the protocol stack).¶
- spduSeqErr:
- A two-octet field indicating the Status PDU loss count, as seen by the Load PDU sender. This is determined by the Status PDU sequence number (spduSeqNo) in the most recently received Status PDU. Used to communicate to the Load PDU receiver that return traffic (in the unloaded direction) is being lost.¶
- spdu
Time _sec /spdu Time _nsec : - Two four-octet fields containing a copy
of the most recent spdu
Time _sec /spdu Time _nsec from the last Status PDU received. Used for RTT measurements made by the Load PDU receiver.¶ - lpdu
Time _sec /lpdu Time _nsec : - Two four-octet fields containing the local send time of the Load PDU. Used for one-way delay variation measurements made by the Load PDU receiver.¶
- rttRespDelay:
- A two-octet field indicating the RTT response delay,
used to "adjust" raw RTT. On the Load PDU sender, it is the number of
ms from reception of the most recent Status PDU (when the
latest spdu
Time _sec /spdu Time _nsec was obtained) to the transmission of the Load PDU (where the previously obtained spdu Time _sec /spdu Time _nsec is returned). When the Load PDU receiver is calculating RTT, by subtracting the copied Status PDU send time (in the Load PDU) from the local Load PDU receive time, this value is subtracted from the raw RTT to correct for any response delay due to Load PDU scheduling.¶ - checkSum:
- An optional checksum of only the Load PDU header (see Section 5.6 for guidance). The checksum does not cover the payload content. The calculation is done as the very last step of building the PDU header, with the checkSum field set to zero.¶
- Payload Content:
- All zeroes, all ones, or a pseudorandom binary sequence.¶
The Load PDU SHALL be organized as follows (followed by any payload content):¶
8.2. Status PDU
The Load PDU receiver SHALL send a Status PDU to the sender during a test at the configured feedback interval, after at least one Load PDU has been received (when there is something to provide status on). In test scenarios with long delays between client and server, it is possible for the Status PDU send timer to fire before the first Load PDU arrives. In these cases, the Status PDU SHALL NOT be sent.¶
When the Load PDU sender receives a Status PDU message, it SHALL first follow the Message Verification Procedure listed in Section 6.2, Paragraph 2.¶
The watchdog timer at the Load PDU sender SHALL be reset each time a valid Status PDU is received (which includes verification of the checkSum and/or authDigest, if in use). See non-graceful test stop in Section 9 for handling the watchdog timeout expiration at each endpoint.¶
The UDP PDU format layout SHALL be as follows (big-endian AB):¶
Note that the Sending Rate structure is defined in Section 7.¶
The primary role of the Status Feedback message is to communicate the traffic conditions at the Load PDU receiver to the Load PDU sender. While the Sub-Interval statistics saved (sisSav) structure covers the most recently saved (completed) Sub-Interval, similar fields directly in the Status PDU itself cover the most recent trial interval (the time period between Status Feedback messages, completed by this Status PDU). Both sets of statistics SHALL always be populated by the Load PDU receiver, regardless of role (client or server).¶
Details on the Status PDU measurement fields are provided in [RFC9097]. The authentication and checkSum fields follow the same methodology as with the Setup Request and Response. Additional information regarding fields not defined previously are as follows:¶
- pduId:
- IANA has assigned the hex value 0xFEED (Section 12.3.1).¶
- spduSeqNo:
- A four-octet field containing the Status PDU sequence number (starting at 1). Used by the Load PDU sender to detect Status PDU loss (in the unloaded direction). The loss count is communicated back to the Load PDU receiver via spduSeqErr in subsequent Load PDUs.¶
- subIntSeqNo:
- A four-octet field containing the Sub-Interval sequence number (starting at 1) that corresponds to the statistics provided in sisSav, for the last saved (completed) Sub-Interval.¶
- sisSav:
-
Sub-Interval statistics saved (completed) for the most recent Sub-Interval (as designated by the subIntSeqNo). These consist of the following fields:¶
- rxDatagrams:
- A four-octet field Sub-Interval indicating the number of received datagrams during the Sub-Interval.¶
- rxBytes:
- An eight-octet field indicating the Sub-Interval byte count (eight octets chosen to prevent overflow at high speeds).¶
- deltaTime:
- A four-octet field indicating the exact duration of the Sub-Interval in us. Used to calculate the received traffic rate together with rxBytes.¶
- seq
Err Loss /seq Err Ooo /seq Err Dup : - Three four-octet fields populated by the loss, out-of-order, and duplicate totals. Available for both the Sub-Interval and trial interval; it is a breakout of the SeqErrors count in Table 3 of [TR-471]. seqErrOoo and seqErrDup are realized by comparing sequence numbers. A lookback list of the last n sequence numbers received is used as the basis. Each Load PDU sequence number is checked against this lookback. The number n may depend on the implementation and on typical characteristics of environments, where UDPSTP is deployed (like mobile networks or Wi-Fi). Currently, a default sequence number interval of n=32 has been chosen. Specifically for seqErrOoo, each successively received higher seqno sets the next-expected seqno to seqno+1, and anything below that is considered out of order (i.e., delayed). For example, given the sequence 93, 94, 95, 100, 96, 97, 101, 98, 99, 102, 103, ... reception of 96, 97, 98, and 99 would not increment the next-expected seqno and would all be considered out of order.¶
- delay
Var Min /delay Var Max /delay Var Sum /delay Var Cnt : - Four four-octet
fields populated by the one-way delay variation measurements of all
received Load PDUs (where avg = sum/cnt). For each Load PDU received,
the send time
(lpdu Time _sec /lpdu Time _nsec ) is subtracted from the local receive time, which is then normalized by subtracting the current clockDeltaMin. Available for both the Sub-Interval and trial interval.¶ - rtt
Var Minimum /rtt Var Maximum (in sisSav): - Two four-octet fields populated by the minimum and maximum RTT delay variation (rttVarSample) in the Sub-Interval designated by the subIntSeqNo.¶
- accumTime:
- The accumulated time of the test in ms, based on the duration of each Sub-Interval. Equivalent to the sum of each deltaTime (although in ms) sent in each Status PDU during the test.¶
- clockDeltaMin:
- A four-octet field indicating the minimum clock
delta (difference) since the beginning of the test. Obtained by
subtracting the send time of each Load PDU
(lpdu Time _sec /lpdu Time _nsec ) from the local time that it was received. This value is initialized with the first Load PDU received and is updated with each subsequent one to maintain a current (and continuously updated) minimum. If the endpoint clocks are sufficiently synchronized, this will be the minimum one-way delay in ms. Otherwise, this value may be negative but still valid for one-way delay variation measurements for the default test duration (default is 10 seconds). If the test duration is extended to a range of minutes, where significant clock drift can occur, synchronized (or at least well -disciplined ) clocks may be required.¶ - rttMinimum (in Status PDU):
- A four-octet field indicating the
minimum "adjusted" RTT measured since the beginning of the test. See
rttRespDelay (Section 8.1) regarding "adjusted" measurements. RTT is obtained by
subtracting the copied spdu
Time _sec /spdu Time _nsec in the received Load PDU from the local time at which it was received. This minimum SHALL be kept current (and continuously updated) via each Load PDU received with an updated spdu Time _sec /spdu Time _nsec . This value MUST be positive. Before an initial value can be established, and because zero is itself valid, it SHALL be set to STATUS_NODEL when communicated in the Status PDU.¶ - rttVarSample:
- A four-octet field indicating the most recent
"adjusted" RTT delay variation measurement. See rttRespDelay (Section 8.1) regarding
"adjusted" measurements. RTT delay variation is obtained by
subtracting the current (and continuously updated) "adjusted" RTT
minimum, communicated as rttMinimum (in Status PDU), from each
"adjusted" RTT measurement (which is itself obtained by subtracting
the copied spdu
Time _sec /spdu Time _nsec in the received Load PDU from the local time at which it was received). Note that while one-way delay variation is measured for every Load PDU received, RTT delay variation is only sampled via the Status PDU sent and the very next Load PDU received with the corresponding updated spdu Time _sec /spdu Time _nsec . When a new value is unavailable (possibly due to packet loss), and because zero is itself valid, it SHALL be set to STATUS_NODEL when communicated in the Status PDU.¶ - delayMinUpd:
- A one-octet field. Boolean, 0 or 1, indicating that the clockDeltaMin and/or rttMinimum (in Status PDU), as measured by the Load PDU receiver, has been updated.¶
- ti
Delta Time /ti Rx Datagrams /ti Rx Bytes : - Three four-octet fields populated by the trial interval time in us, along with the received datagram and byte counts. Used to calculate the received traffic rate for the trial interval.¶
- spdu
Time _sec /spdu Time _nsec : - Two four-octet fields containing the
local transmit time of the Status PDU. Expected to be copied into
spdu
Time _sec /spdu Time _nsec in subsequent Load PDUs after being received by the Load PDU sender. Used for RTT measurements.¶ - authMode:
- Same as in Section 6.1.¶
- authUnixTime:
- Same as in Section 6.1.¶
- authDigest:
- Same as in Section 6.1.¶
- keyId:
- Same as in Section 6.1.¶
- reservedAuth1:
- Same as in Section 6.1.¶
- checkSum:
- Same as in Section 6.1.¶
The Status Feedback message PDU (as well as the included Sub-Interval statistics structure) SHALL be organized as follows:¶
9. Stopping a Test
When the test duration timer (testIntTime) on the server expires, it SHALL set the local connection test action to TEST_ACT_STOP1 (phase 1 of graceful termination). This is simply a non-reversible state awaiting the next message(s) to be sent from the server. During this time, any received Load or Status PDUs are processed normally.¶
Upon transmission of the next Load or Status PDUs, the server SHALL set the local connection test action to TEST_ACT_STOP2 (phase 2 of graceful termination) and mark any outgoing PDUs with a testAction value of TEST_ACT_STOP2. While in this state, the server MAY reduce any Load PDU bursts to a size of one.¶
When the client receives a Load or Status PDU with the TEST_ACT_STOP2 indication, it SHALL finalize testing, display the test results, and mark its local connection with a test action of TEST_ACT_STOP2 (so that any PDUs subsequently received can be ignored).¶
With the test action of the client's connection set to TEST_ACT_STOP2, the very next expiry of a send timer, for either a Load or a Status PDU, SHALL result in it and any subsequent PDUs being sent with a testAction value of TEST_ACT_STOP2 (as confirmation to the server). While in this state, the client MAY reduce any Load PDU bursts to a size of one. The client SHALL then schedule an immediate end time for the connection.¶
When the server receives the TEST_ACT_STOP2 confirmation in the Load or Status PDU, the server SHALL schedule an immediate end time for the connection that closes the socket and deallocates the associated resources. The TEST_ACT_STOP2 exchange constitutes a graceful termination of the test.¶
In a non-graceful test stop due to path failure, the watchdog timeouts at each endpoint will expire (sometimes at one endpoint first); notifications in logs, STDOUT, and/or formatted output SHALL be made; and the endpoint SHALL schedule an immediate end time for the connection.¶
If an attacker clears the TEST_ACT_STOP2 indication, then the configured test duration timer (testIntTime) at the server and client SHALL take precedence and the endpoint SHALL schedule an immediate end time for the connection.¶
10. Operational Considerations for the Measurement Method
The architecture of the method requires two cooperating hosts operating in the roles of Src (test packet sender) and Dst (receiver), with a measured path and return path between them.¶
The nominal duration of a measurement interval at the Destination, parameter testIntTime, MUST be constrained in a production network, since this is an active test method and it will likely cause congestion on the Src to Dst host path during a test.¶
It is RECOMMENDED to locate test endpoints as close to the intended measured link(s) as practical. The testing operator MUST set a value for the MaxHops parameter, based on the expected path length. This parameter can keep measurement traffic from straying too far beyond the intended path.¶
It is obviously counterproducti
The load rate adjustment algorithm's scope is limited to helping determine the Maximum IP-Layer Capacity in the context of an infrequent, diagnostic, short-term measurement. It is RECOMMENDED to discontinue non-measurement traffic that shares a subscriber's dedicated resources while testing: measurements may not be accurate, and throughput of competing elastic traffic may be greatly reduced.¶
See Section 8 of [RFC9097] for a discussion of the Method of Measurement beyond purely operational aspects.¶
10.1. Notes on Interface Measurements
Additional measurements may be useful in specific circumstances. For example, interface byte counters measured by a client at a residential gateway are possible when the client application has access to an interface that sees all traffic to/from a service subscriber's location. Adding a byte counter at the client for download or upload directions could be used to measure total traffic and possibly detect when non-test traffic is present (and using capacity). The client may not have the CPU cycles available to count both the interface traffic and IP-Layer Capacity simultaneously, so this form of diagnostic measurement may not be possible.¶
11. Security Considerations
Active metrics and measurements have a long history of security considerations. The security considerations that apply to any active measurement of live paths are relevant here. See [RFC4656] and [RFC5357].¶
When considering privacy of users activating measurements as a service or users whose traffic is measured, the sensitive information available to potential observers is greatly reduced when using active techniques that are within this scope of work. Passive observations of user traffic for measurement purposes raise many privacy issues. See the privacy considerations described in the LMAP Framework [RFC7594], which covers active and passive techniques.¶
Below are some new considerations for capacity measurement as described in this document.¶
One specific attack that has been recognized is an on-path attack on the testAction field where the attacker would set or clear the STOP indication. Setting the indication in successive packets terminates the test prematurely, with no threat to the Internet but annoyance for the testers. If an attacker clears the STOP indication, the mitigation relies on knowledge of the test duration at the client and server, where these hosts cease all traffic when the specified test duration is complete.¶
Authentication methods and requirements steadily evolve. Alternate authentication modes provide for algorithm agility by defining a new mode, whose support is indicated by assigning a suitable "Test Setup PDU Authentication Mode" registry value (see Section 12.3.4 ).¶
12. IANA Considerations
Per this document, IANA has assigned a UDP port number for the Test Setup exchange in the Control phase of protocol operation and has created a new registry group for the UDPSTP.¶
12.1. New User Port Number Assignment
IANA has registered the following service name in the "Service Name and Transport Protocol Port Number Registry":¶
- Service Name:
- udpstp¶
- Port Number:
- 24601¶
- Transport Protocol:
- udp¶
- Description:
- UDP-based IP-Layer Capacity and Performance Measurement protocol¶
- Assignee:
- IESG <iesg@ietf.org>¶
- Contact:
- IETF Chair <chair
@ietf .org>¶ - Reference:
- RFC 9946¶
The protocol uses IP-Layer Unicast. A single port number was assigned to help configure firewalls and other port-based systems for access control prior to negotiating dynamic ports between client and server.¶
12.2. New KeyTable KDF
IANA has added the following KDF entry to the
"KeyTable KDFs" registry (see
<https://
12.3. New UDPSTP Registry Group
IANA has created the registries in the subsections that follow under a new registry group called "UDP Speed Test Protocol (UDPSTP)".¶
IANA has added the following note under the "UDP Speed Test Protocol (UDPSTP)" registry group:¶
Note: Values reserved for Experimental Use are not expected to be used on the Internet but are expected to be used for experiments that are confined to closed environments.¶
12.3.1. PDU Identifier Registry
IANA has created the "PDU Identifier" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. Every UDPSTP PDU contains a two-octet pduId field identifying the role and format of the PDU that follows. The code points in this registry are allocated according to the registration procedures [RFC8126] described in Table 2.¶
IANA has assigned values in the "PDU Identifier" registry as follows:¶
12.3.2. Protocol Version Registry
IANA has created the "Protocol Version" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. UDPSTP Test Setup Request, Test Setup Response, and Test Activation Request PDUs contain a two-octet protocolVer field, identifying the version of the protocol in use. The code points in this registry are allocated according to the registration procedures [RFC8126] described in Table 4.¶
IANA has assigned decimal value 20 in the "Protocol Version" registry as follows:¶
12.3.3. Test Setup PDU Modifier Bitmap Registry
IANA has created the "Test Setup PDU Modifier Bitmap" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. The Test Setup PDU layout contains a modifierBitmap field. The bitmaps in this registry are allocated according to the registration procedures [RFC8126] described in Table 6.¶
IANA has assigned bitmap values in the "Test Setup PDU Modifier Bitmap" registry as follows:¶
12.3.4. Test Setup PDU Authentication Mode Registry
IANA has created the "Test Setup PDU Authentication Mode" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. The Test Setup PDU layout contains an authMode field. The code points in this registry are allocated according to the registration procedures [RFC8126] described in Table 8.¶
IANA has assigned decimal values in the "Test Setup PDU Authentication Mode" registry as follows:¶
12.3.5. Test Setup PDU Command Response Field Registry
IANA has created the "Test Setup PDU Command Response Field" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. The Test Setup PDU layout contains a cmdResponse field. The code points in this registry are allocated according to the registration procedures [RFC8126] described in Table 10.¶
IANA has assigned decimal values in the "Test Setup PDU Command Response Field" registry as follows:¶
Note that value 4 is required for backward compatibility with previous experimental versions of software already in use. Further, value 6 signals that a client erroneously used an authMode that hasn't been standardized yet (i.e., authMode is greater than 1 or 2).¶
12.3.6. Test Activation PDU Command Request Registry
IANA has created the "Test Activation PDU Command Request" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. The Test Setup PDU layout contains a cmdRequest field. The code points in this registry are allocated according to the registration procedures [RFC8126] described in Table 12.¶
IANA has assigned decimal values in the "Test Activation PDU Command Request" registry as follows:¶
12.3.7. Test Activation PDU Modifier Bitmap Registry
IANA has created the "Test Activation PDU Modifier Bitmap" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. The Test Activation PDU layout (also) contains a modifierBitmap field. The bitmaps in this registry are allocated according to the registration procedures [RFC8126] described in Table 14.¶
IANA has assigned bitmap values in the "Test Activation PDU Modifier Bitmap" registry as follows:¶
12.3.8. Test Activation PDU Rate Adjustment Algo Registry
IANA has created the "Test Activation PDU Rate Adjustment Algo" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. The Test Activation PDU layout contains a rateAdjAlgo field. The code points in this registry are allocated according to the registration procedures [RFC8126] described in Table 16.¶
IANA has added the following note under the "Test Activation PDU Rate Adjustment Algo" registry:¶
Note: The algorithm identifier is a capitalized alphabetic UTF-8 value (A-Z), specified by the corresponding incremental numeric.¶
IANA has assigned capitalized alphabetic UTF-8 values, as well as the corresponding incremental numeric values, in the "Test Activation PDU Rate Adjustment Algo" registry as follows:¶
12.3.9. Test Activation PDU Command Response Field Registry
IANA has created the "Test Activation PDU Command Response Field" registry under the "UDP Speed Test Protocol (UDPSTP)" registry group. The Test Activation PDU layout (also) contains a cmdResponse field. The code points in this registry are allocated according to the registration procedures [RFC8126] described in Table 18.¶
IANA has assigned decimal values in the "Test Activation PDU Command Response Field" registry as follows:¶
12.4. Guidelines for Designated Experts
It is suggested that multiple designated experts be appointed for registry change requests.¶
Criteria that should be applied by the designated experts include determining whether the proposed registration duplicates existing entries and whether the registration description is clear and fits the purpose of this registry.¶
Registration requests are evaluated within a two-week review period on the advice of one or more designated experts. Within the review period, the designated experts will either approve or deny the registration request, communicating this decision to IANA. Denials should include an explanation and, if applicable, suggestions as to how to make the request successful.¶
13. References
13.1. Normative References
- [C-Prog]
-
ISO/IEC, "Programming languages -- C", ISO/IEC 9899:1999, , <https://
www >..iso .org /standard /29237 .html - [NIST800-108]
-
Chen, L., "Recommendation for Key Derivation Using Pseudorandom Functions", DOI 10
.6028 , NIST SP 800-108r1-upd1, , <https:///NIST .SP .800 -108r1 -upd1 nvlpubs >..nist .gov /nistpubs /Special Publications /NIST .SP .800 -108r1 -upd1 .pdf - [RFC0768]
-
Postel, J., "User Datagram Protocol", STD 6, RFC 768, DOI 10
.17487 , , <https:///RFC0768 www >..rfc -editor .org /info /rfc768 - [RFC0791]
-
Postel, J., "Internet Protocol", STD 5, RFC 791, DOI 10
.17487 , , <https:///RFC0791 www >..rfc -editor .org /info /rfc791 - [RFC2119]
-
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10
.17487 , , <https:///RFC2119 www >..rfc -editor .org /info /rfc2119 - [RFC5044]
-
Culley, P., Elzur, U., Recio, R., Bailey, S., and J. Carrier, "Marker PDU Aligned Framing for TCP Specification", RFC 5044, DOI 10
.17487 , , <https:///RFC5044 www >..rfc -editor .org /info /rfc5044 - [RFC6234]
-
Eastlake 3rd, D. and T. Hansen, "US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)", RFC 6234, DOI 10
.17487 , , <https:///RFC6234 www >..rfc -editor .org /info /rfc6234 - [RFC7210]
-
Housley, R., Polk, T., Hartman, S., and D. Zhang, "Database of Long-Lived Symmetric Cryptographic Keys", RFC 7210, DOI 10
.17487 , , <https:///RFC7210 www >..rfc -editor .org /info /rfc7210 - [RFC8085]
-
Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage Guidelines", BCP 145, RFC 8085, DOI 10
.17487 , , <https:///RFC8085 www >..rfc -editor .org /info /rfc8085 - [RFC8126]
-
Cotton, M., Leiba, B., and T. Narten, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 8126, DOI 10
.17487 , , <https:///RFC8126 www >..rfc -editor .org /info /rfc8126 - [RFC8174]
-
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10
.17487 , , <https:///RFC8174 www >..rfc -editor .org /info /rfc8174 - [RFC8899]
-
Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T. Völker, "Packetization Layer Path MTU Discovery for Datagram Transports", RFC 8899, DOI 10
.17487 , , <https:///RFC8899 www >..rfc -editor .org /info /rfc8899 - [RFC9097]
-
Morton, A., Geib, R., and L. Ciavattone, "Metrics and Methods for One-Way IP Capacity", RFC 9097, DOI 10
.17487 , , <https:///RFC9097 www >..rfc -editor .org /info /rfc9097 - [TR-471]
-
Broadband Forum, "Maximum IP-Layer Capacity Metric, Related Metrics, and Measurements", TR-471, Issue 4, , <https://
www >..broadband -forum .org /pdfs /tr -471 -4 -0 -0 .pdf - [Y.1540]
-
ITU-T, "Internet protocol data communication service - IP packet transfer and availability performance parameters", ITU-T Recommendation Y.1540, , <https://
www >..itu .int /rec /T -REC -Y .1540 -201912 -I /en - [Y.1540Amd2]
-
ITU-T, "Internet protocol data communication service - IP packet transfer and availability performance parameters, Amendment 2 - Revised Annex B: Additional search algorithms for IP-based capacity parameters and methods of measurement", ITU-T Recommendation Y.1540 Amd. 2, , <https://
www >..itu .int /rec /T -REC -Y .1540 -202303 -I!Amd2 /en
13.2. Informative References
- [EVP_KDF-KB]
-
"EVP_KDF-KB - The Key-Based EVP_KDF implementation", OpenSSL Documentation, <https://
docs >..openssl .org /master /man7 /EVP _KDF -KB / - [RFC3148]
-
Mathis, M. and M. Allman, "A Framework for Defining Empirical Bulk Transfer Capacity Metrics", RFC 3148, DOI 10
.17487 , , <https:///RFC3148 www >..rfc -editor .org /info /rfc3148 - [RFC4656]
-
Shalunov, S., Teitelbaum, B., Karp, A., Boote, J., and M. Zekauskas, "A One-way Active Measurement Protocol (OWAMP)", RFC 4656, DOI 10
.17487 , , <https:///RFC4656 www >..rfc -editor .org /info /rfc4656 - [RFC5136]
-
Chimento, P. and J. Ishac, "Defining Network Capacity", RFC 5136, DOI 10
.17487 , , <https:///RFC5136 www >..rfc -editor .org /info /rfc5136 - [RFC5357]
-
Hedayat, K., Krzanowski, R., Morton, A., Yum, K., and J. Babiarz, "A Two-Way Active Measurement Protocol (TWAMP)", RFC 5357, DOI 10
.17487 , , <https:///RFC5357 www >..rfc -editor .org /info /rfc5357 - [RFC7497]
-
Morton, A., "Rate Measurement Test Protocol Problem Statement and Requirements", RFC 7497, DOI 10
.17487 , , <https:///RFC7497 www >..rfc -editor .org /info /rfc7497 - [RFC7594]
-
Eardley, P., Morton, A., Bagnulo, M., Burbridge, T., Aitken, P., and A. Akhter, "A Framework for Large-Scale Measurement of Broadband Performance (LMAP)", RFC 7594, DOI 10
.17487 , , <https:///RFC7594 www >..rfc -editor .org /info /rfc7594 - [RFC8337]
-
Mathis, M. and A. Morton, "Model-Based Metrics for Bulk Transport Capacity", RFC 8337, DOI 10
.17487 , , <https:///RFC8337 www >..rfc -editor .org /info /rfc8337 - [RFC8762]
-
Mirsky, G., Jun, G., Nydell, H., and R. Foote, "Simple Two-Way Active Measurement Protocol", RFC 8762, DOI 10
.17487 , , <https:///RFC8762 www >..rfc -editor .org /info /rfc8762 - [RFC9145]
-
Boucadair, M., Reddy.K, T., and D. Wing, "Integrity Protection for the Network Service Header (NSH) and Encryption of Sensitive Context Headers", RFC 9145, DOI 10
.17487 , , <https:///RFC9145 www >..rfc -editor .org /info /rfc9145
Acknowledgments
This document was edited by Al Morton, who passed away before being able to finalize this work. Ruediger Geib only joined later to help finalize this specification.¶
Thanks to Lincoln Lavoie, Can Desem, Greg Mirsky, Bjoern Ivar Teigen, Ken Kerpez, and
Chen Li for reviewing this specification and providing
helpful suggestions and areas for further development. Mohamed Boucadair's AD review improved comprehensibili
Starting with the early SEC-DIR review, Brian Weis provided constructive guidance regarding numerous security