<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-grow-bmp-over-quic-01" submissionType="IETF"
ipr="trust200902" consensus="true">

  <!-- ***** FRONT MATTER ***** -->

  <front>

    <title abbrev="BMP over QUIC">
    Using BMP over QUIC connection</title>

    <author fullname="Yisong Liu" initials="Y."
            surname="Liu">
      <organization>China Mobile</organization>

      <address>
        <postal>
          <country>China</country>
        </postal>

        <email>liuyisong@chinamobile.com</email>
      </address>
    </author>

    <author fullname="Changwang Lin" initials="C."
            surname="Lin">
      <organization>New H3C Technologies</organization>

      <address>
        <postal>
          <city>Beijing</city>

          <country>China</country>
        </postal>

        <email>linchangwang.04414@h3c.com</email>
      </address>
    </author>

    <author fullname="Thomas Graf" initials="T."
            surname="Graf">
      <organization>Swisscom</organization>

      <address>
        <postal>
          <street>Binzring 17</street>

          <city>8045 Zurich</city>

          <country>Switzerland</country>
        </postal>

        <email>thomas.graf@swisscom.com</email>
      </address>
    </author>

    <author fullname="Paolo Lucente" initials="P."
            surname="Lucente">
      <organization>NTT</organization>

      <address>
        <postal>
          <street>Veemweg 23</street>

          <city>3771 MT Barneveld</city>

          <country>Netherlands</country>
        </postal>

        <email>paolo@ntt.net</email>
      </address>
    </author>

    <author fullname="Mukul Srivastava" initials="M."
            surname="Srivastava">
      <organization>Hewlett Packard Enterprise</organization>

      <address>
        <email>mukul.srivastava@hpe.com</email>
      </address>
    </author>

    <date year="2026"/>

    <!-- Meta-data Declarations -->

    <area>Routing</area>

    <workgroup>Global Routing Operations</workgroup>

    <keyword>BMP</keyword>
    <keyword>BGP</keyword>
    <keyword>QUIC</keyword>

    <abstract>
      <t>
      The BGP Monitoring Protocol (BMP) provides a convenient interface
      for obtaining route views by monitoring BGP sessions. BMP operates
      over TCP and is unidirectional (from client to server). QUIC
      provides multiple simultaneous streams to carry data in one
      direction, enabling much better efficiency and performance for both
      peers, in particular unidirectional streams can provide reverse data
      protection for the sender. QUIC also provides shorter handshake and
      includes TLS. This document describes how to use BMP over the QUIC
      transport protocol, named BMPoQUIC.
      </t>
    </abstract>
  </front>

  <middle>

    <section anchor="introduction" title="Introduction">
      <t>
      The BGP Monitoring Protocol (BMP) <xref target="RFC7854"/> defines
      standard mechanisms for obtaining route views by monitoring BGP
      sessions. BMP operation uses TCP as its transport protocol to provide
      reliable communication. BMP establishes connection relationships
      between monitored router and monitoring station using a TCP session.
      </t>
      <t>
      In BMP message communication, in order to simplify the implementation,
      only the monitored router reports messages to the monitoring station,
      and the station does not send messages to the router
      <xref target="RFC7854"/>. In other words, the BMP communication is
      actually unidirectional (from router to station). As a consequence,
      the direction from the monitoring station to the monitored router may
      be used as an interface for malicious attacks on the router. As BMP
      supports more and more types of routes to be reported, the number of
      reported BMP messages is also increasing, which also brings huge
      challenges to TCP data transmission pressure.
      </t>
      <t>
      QUIC <xref target="RFC9000"/> is a UDP-based multiplexed and secure
      transport protocol that provides connection-oriented and stateful
      interaction between a client and server. It can provide low latency
      and encrypted transport with resilient connections.
      </t>
      <t>
      QUIC uses multiple simultaneous streams to carry data in one
      direction. Each stream is a separate unidirectional or bidirectional
      channel consisting of an ordered stream of bytes. In addition, each
      stream has its own flow control, which limit bytes sent on a stream,
      together with flow control of the connection. Among them, the
      unidirectional stream is very consistent with the message
      transmission mechanism of BMP.
      </t>
      <t>
      TCP-based BMP works well in stable networks, but QUIC offers
      advantages in challenging environments. When collectors experience
      processing delays from database operations or analytics, QUIC's
      multiplexing prevents head-of-line blocking, maintaining throughput.
      For mobile agents or dynamic networks, QUIC's connection migration
      ensures uninterrupted monitoring sessions during network changes.
      </t>
      <t>
      Therefore, QUIC is a proper transport protocol for the message
      transmission mechanism of BMP. This document specifies how to use
      QUIC as the secure transport protocol for BMP.
      </t>
    </section>

    <section anchor="terminology" title="Terminology and Definitions">
      <t>
      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 <xref target="RFC2119"/> <xref target="RFC8174"/> when,
      and only when, they appear in all capitals, as shown here.
      </t>
      <t>
      In this document, the terms "client" and "server" are used to refer
      to the two ends of the QUIC connection. The client actively initiates
      the QUIC connection. The terms "monitored router" and "monitoring
      station" are used to refer to the two ends of the BMP session. The
      router sends BMP messages to the station. The station does not
      respond to the router, except in the Function Streams with Control
      Stream selection (<xref target="function-streams"/>), where the
      station sends control response messages over the control channel
      as described there.
      </t>
      <ul>
        <li>Client: The endpoint that initiates a QUIC connection,
        typically a BMP monitored router.</li>
        <li>Server: The endpoint that accepts a QUIC connection,
        typically a BMP monitoring station.</li>
      </ul>
    </section>

    <section anchor="connection-management" title="Connection Management">
      <section anchor="connection-establishment" title="Connection Establishment">
        <t>
        QUIC connection establishment is described in
        <xref target="RFC9000"/>. During establishing connection, BMP over
        QUIC (BMPoQUIC) support is indicated by selecting the
        Application-Layer Protocol Negotiation (ALPN)
        <xref target="RFC7301"/> token "BMPoQ" specified in
        <xref target="iana"/> during the TLS handshake.
        </t>
        <t>
        The monitored router MUST also act as the client while the
        monitoring station MUST also act as the server.
        </t>
        <t>
        Early Data (also known as 0-RTT) <xref target="RFC9001"/> provides
        weaker security than standard TLS, lacking forward secrecy and
        replay attack protection, while BMP information contains sensitive
        routing information. Therefore, BMPoQUIC implementations MUST NOT
        support Early Data. Servers MUST reject "early data" extensions in
        ClientHello messages, and clients MUST NOT attempt to send 0-RTT
        data.
        </t>
      </section>

      <section anchor="connection-termination" title="Connection Termination">
        <section anchor="quic-connection-termination" title="QUIC Connection Termination Process">
          <t>
          The typical QUIC connection termination process is described in
          <xref target="RFC9000"/>.
          </t>
        </section>

        <section anchor="bmpoquic-connection-termination" title="BMPoQUIC Considerations for Connection Termination">
          <t>
          When a BMP session is implemented based on a QUIC connection, the
          idle timeout SHOULD be disabled or the QUIC max_idle_timeout
          SHOULD be set appropriately in order to keep the QUIC connection
          persistent even if the BMP session is idle.
          </t>
          <t>
          When a BMP monitoring station receives a termination message, it
          will gracefully close the BMP session. The station SHOULD close the
          associated QUIC connection.
          </t>
          <t>
          When a BMP monitored router intends to close the BMP session, it
          SHOULD send a termination message to the BMP monitoring station
          before closing the QUIC connection, so that the station can
          gracefully close the BMP session.
          </t>
          <t>
          When a BMP monitored router detects the interruption of the QUIC
          connection (e.g., because the connection is idle-timed out or
          reset), it cannot send a termination message over the
          interrupted connection. In this case, the monitored router
          SHOULD attempt to re-establish a new QUIC connection as
          specified in <xref target="operational-considerations"/>, and a
          new BMP session starts on the new connection, beginning with an
          Initiation message as described in <xref target="RFC7854"/>.
          </t>
        </section>
      </section>
    </section>

    <section anchor="stream-mapping" title="Stream mapping and usage">
      <t>
      There are seven kinds of BMP messages sent from the monitored
      router to the monitoring station, namely Route Monitoring message,
      Statistics Report message, Peer Down Notification message, Peer Up
      Notification message, Initiation message, Termination message and
      Route Mirroring message <xref target="RFC7854"/>. The seven kinds
      of BMP messages need to be mapped into QUIC streams.
      </t>
      <t>
      QUIC <xref target="RFC9000"/> uses a Stream ID to identify each
      stream. The least significant bit (0x01) of the stream ID identifies
      the initiator of the stream
      (client-initiated with the bit set to 0). The second least
      significant bit (0x02) of the stream ID distinguishes between
      bidirectional streams (with the bit set to 0) and unidirectional
      streams.
      </t>
      <t>
      No BMP message is ever sent from the monitoring station to the
      monitored router, except in the Function Streams with Control
      Stream selection (<xref target="function-streams"/>), where the
      station sends control response messages over the control channel
      as described there. The monitored
      router MAY take steps to prevent the
      monitoring station from sending data or it MAY silently discard any
      unrecognized data sent by the monitoring station. So BMP messages
      from monitored router (as a client) SHOULD be mapped into
      unidirectional stream whose stream type is 0x2, or mapped into
      bidirectional stream whose stream type is 0x0, according to the
      above.
      </t>
      <t>
      For clarity, the figures and examples in this section label the
      streams with sequential ordinal numbers ("Stream 0", "Stream 1",
      ..., "Stream n"), where "Stream 0" denotes the first stream
      created on the BMPoQUIC connection, "Stream 1" the second, and so
      on. These ordinals are not QUIC Stream IDs. The actual QUIC Stream
      ID of a client-initiated stream follows from the stream type and
      the number of streams of the same type created before it, as
      specified in <xref target="RFC9000"/>. In particular, the first
      client-initiated bidirectional stream has QUIC Stream ID 0x0, and
      the first client-initiated unidirectional stream has QUIC Stream
      ID 0x2. Which stream type is used for a given BMP channel is
      specified in the corresponding stream selection subsections.
      </t>

      <section anchor="multi-stream-selection" title="Multi-stream Selection">
        <t>
        When a router has many peers and a large number of routes, if the
        related BMP messages are reported through an independent stream,
        the communication pressure of this stream will be very large and
        the efficiency will be very low. In order to reduce the
        communication pressure and improve the communication efficiency,
        multiple streams can be allocated to carry BMP messages according
        to the number of peers or Address Family Identifier/Subsequent
        Address Family Identifier (AFI/SAFI).
        </t>
        <t>
        This document introduces three multi-stream selections
        (<xref target="peer-stream"/>, <xref target="per-afisafi-stream"/>
        and <xref target="function-streams"/>), which can be freely chosen
        by network operator or user according to the level of complexity
        involved in configuring BGP. And the extent of complexity in BGP
        configuration is also decided by the network operator.
        </t>
        <t>
        To avoid a fragmented ecosystem where implementations support
        different subsets of the stream selections, a baseline mode is
        defined. Implementations MUST support the single-stream mode, in
        which all BMP messages are carried over Stream 0 (the first
        stream created on the connection; see <xref target="stream-mapping"/>
        for the ordinal to QUIC Stream ID mapping). The
        single-stream mode corresponds to the default configuration of
        the Peer Stream selection (one stream for all peers) and provides
        behavior equivalent to TCP-based BMP <xref target="RFC7854"/>.
        The multi-stream selections are optional extensions: an
        implementation MAY support the Peer Stream selection, the
        Per-AFI/SAFI Stream selection, or the Function Streams with
        Control Stream selection, in any combination, selected by
        configuration.
        </t>
        <t>
        The following operational guidance may assist in choosing among
        the selections:
        </t>
        <ul>
          <li>
          Single-stream mode: the simplest to implement, operate, and
          debug. Suitable when the BMP message volume is moderate or the
          monitoring station processes messages sequentially.
          </li>
          <li>
          Peer Stream: distributes the load across a small number of
          streams. Suitable when a monitored router has many peers with
          significant per-peer message volume.
          </li>
          <li>
          Per-AFI/SAFI Stream: organizes route data per address family.
          Suitable when the route volume differs significantly across
          address families, and in deployments where BGP itself runs
          over QUIC, for symmetry with the BGP stream structure.
          </li>
          <li>
          Function Streams with Control Stream: separates low-volume
          state control messages from high-volume route data and allows
          the monitoring station to acknowledge session state
          transitions. It is the most complex option and is suitable for
          large-scale deployments where head-of-line blocking between
          state and route data must be avoided.
          </li>
        </ul>
        <t>
        According to <xref target="RFC7854"/>, the Initiation message MUST
        be sent as the first message after the BMP session comes up,
        meaning that the monitoring station MUST firstly receive the
        Initiation message after the BMP session comes up. So when using
        peer stream
        or per-AFI/SAFI stream to send BMP messages, it MUST be ensured
        that the Initiation message is the first message sent on each BMP
        stream, meaning that an Initiation message MUST be sent first for
        every BMP stream establishment. When using function streams with
        control stream, it also MUST guarantee that message ordering by
        design implementation.
        </t>
        <t>
        In the future, the information TLV of the Initiation message may be
        expanded to carry the multi-stream type (peer stream, per-AFI/SAFI
        stream, function streams with control stream, etc.), allowing the
        server (collector) to know, based on the multi-stream type, what
        kinds of BMP messages will be conveyed in the current stream. This
        extension does not replace the per-stream Initiation requirement
        above: in the peer stream and per-AFI/SAFI stream selections, the
        Initiation message sent on each stream would carry its own
        multi-stream type TLV, while in the function streams with control
        stream selection, the Initiation message on the control channel
        would indicate the selection for the whole connection. In
        addition, a Termination message can be sent on any stream, which
        terminates the entire BMP session and closes the QUIC connection
        along with all of its opened streams.
        </t>
      </section>

      <section anchor="peer-stream" title="Peer Stream">
        <t>
        In order to reduce the communication pressure and improve the
        communication efficiency, multiple unidirectional streams can be
        allocated by router according to the number of BGP peers of the
        router, and each stream is used to transmit the BMP message of the
        specified peers, as shown in <xref target="fig-peer-stream"/>.
        </t>
        <figure anchor="fig-peer-stream" title="Peer Stream Structure">
          <artwork><![CDATA[
   +------------+                       +--------------+
   |   Peer 1   |                       |              |
   |            |---------------------->|   Stream 0   |
   |   Peer 2   |                       |              |
   +------------+                       +--------------+
         ~                                      ~
         ~                                      ~
   +------------+                       +--------------+
   |   Peer x   |                       |              |
   |            |---------------------->|   Stream n-1 |
   |   Peer y   |                       |              |
   +------------+                       +--------------+
]]></artwork>
        </figure>
        <t>
        The number of streams can be configured as needed, and the
        corresponding relationship between peer and stream can be matched
        through configuration. For example, if there are five peers, when
        three streams are created, stream 0 could carry the BMP messages
        of peer 1 and peer 2, stream 1 could convey the BMP messages of
        peer 3 and peer 4, and stream 2 could send the BMP messages of
        peer 5. The default number of streams
        is 1, meaning that by default, stream 0 is created for all peers.
        All of these are client-initiated unidirectional streams.
        </t>
      </section>

      <section anchor="per-afisafi-stream" title="Per-AFI/SAFI Stream">
        <t>
        When multiple peer streams are used, each stream may carry
        different type (AFI/SAFI) routes from router, which may make the
        information seem a bit messy. So a unidirectional QUIC stream can
        be created for Per-AFI/SAFI to carry the routes of the specific
        AFI/SAFI, as shown in the figure below. The first stream created
        (Stream 0 in <xref target="fig-afisafi-stream"/>) is always a
        common stream, and in this stream selection it is a client-
        initiated unidirectional stream (QUIC Stream ID 0x2), carrying
        BMP messages which may or may not include AFI/SAFI information.
        If the common stream is used to carry the peer-related BMP
        messages, the Peer Up Notification message MUST be sent prior to
        the other peer-related BMP messages.
        </t>
        <figure anchor="fig-afisafi-stream" title="Per AFI/SAFI Stream Structure">
          <artwork><![CDATA[
   +----------------+                       +--------------+
   |     Common     |---------------------->|   Stream 0   |
   +----------------+                       +--------------+
   +----------------+                       +--------------+
   |   AFI/SAFI 1   |---------------------->|   Stream 1   |
   +----------------+                       +--------------+
           ~                                       ~
           ~                                       ~
   +----------------+                       +--------------+
   |   AFI/SAFI n   |---------------------->|   Stream n   |
   +----------------+                       +--------------+
]]></artwork>
        </figure>
        <t>
        In order to minimize resource occupation, it is recommended to
        create a stream for the AFI/SAFI when any BGP peer of the AFI/SAFI
        is in the up state. Of course, after creating the AFI/SAFI stream
        or common stream, an Initiation message MUST be sent first before
        sending the Peer Up Notification message.
        </t>
        <t>
        When per-AFI/SAFI streams are used to transmit BMP messages, it is
        necessary to distinguish which BMP messages can be categorized by
        per-AFI/SAFI and determine how to send BMP messages for non-per-
        AFI/SAFI.
        </t>
        <ul>
          <li>
          For Route Monitoring message, it is per-AFI/SAFI route message,
          and it SHOULD be carried over corresponding AFI/SAFI stream.
          </li>
          <li>
          For Route Mirroring message, it SHOULD always be carried over the
          common stream (stream 0), regardless of whether the AFI/SAFI
          information can be extracted from the BGP PDU. Route Mirroring
          is mostly used for troubleshooting scenarios, so keeping it on a
          single stream keeps the behavior simple and predictable.
          </li>
          <li>
          For Statistics Report message, if the stat type is based on
          per-AFI/SAFI, it includes the AFI/SAFI. If not, it does not
          include the AFI/SAFI. So it SHOULD be carried over the common
          stream (stream 0).
          </li>
          <li>
          For Peer Up Notification message, it could include open message
          containing multiple AFI/SAFIs, and it SHOULD be carried over all
          corresponding AFI/SAFI streams, and MUST be sent before sending
          other BMP messages which include peer information.
          </li>
          <li>
          For Peer Down Notification message, as it does not include
          AFI/SAFI information, it SHOULD be carried over all
          corresponding AFI/SAFI streams, or over the common stream that
          carries the Peer Up Notification message.
          </li>
        </ul>
        <t>
        If BGP still uses TCP as the transport protocol, the Per AFI/SAFI
        Stream structure can be used selectively. If BGP uses QUIC as the
        transport protocol <xref target="I-D.retana-idr-bgp-quic"/>,
        the Per AFI/SAFI Stream structure is RECOMMENDED in a BMPoQUIC
        connection because of the implementation that
        per-AFI/SAFI streams (function channels) are also used to carry
        routing information in one BGP over QUIC (BoQ) connection.
        </t>
      </section>

      <section anchor="function-streams" title="Function Streams with Control Stream">
        <t>
        In order to ensure the timing of BMP messages, the above two
        solutions (<xref target="peer-stream"/> and
        <xref target="per-afisafi-stream"/>) must send an Initiation
        message or Peer Up/Down message on each stream, which may also
        increase the network load. Therefore, the solution with control
        stream is designed. Like the design of BGP over QUIC (BoQ)
        <xref target="I-D.retana-idr-bgp-quic"/>, the per-peer or
        per-AFI/SAFI streams (function channels) and the associated
        control stream (control channel) for the BMP session are called
        "BMP channels". In one BMPoQUIC connection, one control channel
        and one or more function channels are used to carry BMP
        information, as shown in the figure below.
        </t>
        <figure anchor="fig-bmp-channel" title="BMP Channel Structure">
          <artwork><![CDATA[
   +------------------------+               +--------------+
   |    Control Channel     |<------------->|   Stream 0   |
   +------------------------+               +--------------+
   +------------------------+               +--------------+
   |   Function Channel 1   |-------------->|   Stream 1   |
   +------------------------+               +--------------+
           ~                                       ~
           ~                                       ~
   +------------------------+               +--------------+
   |   Function Channel n   |-------------->|   Stream n   |
   +------------------------+               +--------------+
]]></artwork>
        </figure>
        <t>
        On a BMPoQUIC connection, the BMPoQUIC client first establishes a
        bidirectional stream for the "BMP control channel". The control
        channel is used to send the associated status control information,
        such as BMP session state control messages (Initiation message and
        Termination message) and BGP peer relationship state control
        messages (Peer Up Notification message and Peer Down Notification
        message). The control channel is also used to carry the associated
        control response information for keeping the order of BMP messages.
        In addition, the control channel is used to carry the periodic and
        low-load message, such as Statistics Report message.
        </t>
        <t>
        When the BGP route association information with high load is needed
        to send, the function channel is created to deliver the key non-
        status BMP messages by monitored router, such as Route Monitoring
        message, and Route Mirroring message.
        </t>
        <t>
        The Control channel is always the first stream created
        (Stream 0 in <xref target="fig-bmp-channel"/>) and is a client-
        initiated bidirectional stream (QUIC Stream ID 0x0). The Function
        channels, which are initiated by a monitored router, are
        unidirectional streams (the first one having QUIC Stream ID
        0x2, the next 0x6, and so on).
        </t>

        <section anchor="framing-layer" title="Framing Layer">
          <t>
          In QUIC layer, BMPoQUIC message are carried by QUIC STREAM
          frames. In BMPoQUIC layer, the two BMPoQUIC Frame types are
          defined, namely Data and Control Data, according to the BMP
          channels.
          </t>
          <t>
          Data frames have following format:
          </t>
          <artwork><![CDATA[
    BMPoQUIC Data Frame Format {
        Type (8) = 0,
        Length (24),
        Frame Payload (...)
    }
]]></artwork>
          <t>
          Control Data frames have following format:
          </t>
          <artwork><![CDATA[
    BMPoQUIC Control Data Frame Format {
        Type (8) = 1,
        Length (24),
        Sequence Number (32),
        Frame Payload (...)
    }
]]></artwork>
          <dl>
            <dt>Type:</dt>
            <dd>
            one octet, identifying the frame type.
            </dd>
            <dt>Length:</dt>
            <dd>
            a 24-bit unsigned integer that describes the length in bytes
            of the frame payload.
            </dd>
            <dt>Sequence Number:</dt>
            <dd>
            a 32-bit unsigned integer that indicating the sequence number
            of sending the control data by monitored router. After the
            sequence number increases to 2^32-1 by monitored router, the
            next sequence number returns to 0.
            </dd>
            <dt>Frame Payload:</dt>
            <dd>
            BMP messages.
            </dd>
          </dl>
          <t>
          When the monitoring station needs send response message in
          control channel, the Length is set to 0 and the Sequence Number
          is same with corresponding BMP message from the monitored
          router.
          </t>
        </section>

        <section anchor="interactive-process" title="Interactive Process">
          <t>
          After the control channel is created, the Initiation message is
          first sent over control channel. Only when the response message
          corresponding to the initialization message is received by the
          monitored router, the other BMP messages are allowed to be sent
          by the monitored router.
          </t>
          <t>
          When the Peer Up Notification message is sent over the control
          channel, and its response message from the monitoring station
          MUST be received, the monitored router can create function
          channels by using unidirectional QUIC streams. Or before the
          monitored router needs send other peer-related BMP messages over
          function channels, the corresponding function channel MUST be
          created. These function channels are used to carry the relevant
          non-status BMP messages with high load for specific peer or
          AFI/SAFI. So these function channels include one Per-Peer common
          function channel and several Per-Peer Per-AFI/SAFI function
          channels according to the AFI/SAFIs of the OPEN information
          contained in the Peer Up Notification message
          <xref target="RFC7854"/>.
          </t>
          <t>
          The Per-Peer common function channel can be used to carry
          messages related to peer and need to be sent on the same
          channel, such as Route Mirroring message. For Route Mirroring
          message (regardless of whether it can get AFI/SAFI or not), it
          SHOULD be carried over the Per-Peer common function channel to
          prevent impacting the transmission efficiency of Route
          Monitoring messages in the Per-Peer Per-AFI/SAFI function
          channel, because Route Mirroring message may be extremely
          verbose.
          </t>
          <t>
          For Statistics Report message (regardless of whether it can get
          AFI/SAFI or not), since it may be a periodic message with low
          load, and different statistics may have some correlation. So it
          SHOULD always be carried over the control channel to maintain
          better atomicity of all statistics.
          </t>
          <t>
          The Per-Peer Per-AFI/SAFI function channel SHOULD be used to
          transmit messages only related to AFI/SAFI for a specific peer,
          such as Route Monitoring message.
          </t>
          <t>
          As a Peer Down Notification message is sent over the control
          channel, the router SHALL close all the related function
          channels. After the Peer Down Notification message was sent, the
          response message to the previous Peer Up Notification message
          SHOULD be ignored. In the future, the Peer Down Notification message may
          be expanded to include AFI/SAFI information, allowing the router
          to notify peer down event of the specified AFI/SAFI for a peer.
          </t>
        </section>

        <section anchor="use-case" title="Use Case">
          <t>
          In Monitored Router, the IPv4 unicast peer 192.0.2.1 is
          monitored. The Monitored Router and Monitoring Station establish
          a BMPoQUIC connection, then the relevant processing flow is
          shown in <xref target="fig-usecase-ipv4"/>.
          </t>
          <figure anchor="fig-usecase-ipv4" title="Typical Use Case (IPv4)">
            <artwork><![CDATA[
          +-----------+                    +------------+
          | Monitored |<------------------>| Monitoring |
          |  Router   |                    |  Station   |
          +-----------+                    +-----------+
1. Connection     |                            |
   Establishment  |      3. Send Initiation    |
2. Create CC      |--------------CC----------->|4. Receive
   (Stream 0)     |                            |   Initiation
                  | 5.Send Initiation Response |
6. Receive        |<-------------CC------------|
   Initiation     |                            |
   Response       |                            |
                  | 8.Send Peer Up Notification|
7. Peer 192.0.2.1 |--------------CC----------->|9. Receive Peer
   Up             |                            |   Up Notification
                  | 10.Send Peer Up Response   |
11. Receive Peer  |<-------------CC------------|
    Up Response   |                            |
                  | 12a.Create FC-1 (Stream 1) |
                  |    Send Related Message    |
                  |            (RMI)           |
                  |--------------FC-1--------->|
                  |                            |
                  | 12b.Create FC-2 (Stream 2) |
                  |    Send Related Message    |
                  |            (RMO)           |
                  |--------------FC-2--------->|
                  |                            |
                  | 12c.Send SR Message        |
                  |--------------CC----------->|
                  |                            |
13. Peer 192.0.2.1| 14.Send Peer Down          |
    Down          |    Notification            |
                  |--------------CC----------->|
15. Close FC-1/2  |                            |
                  |                            |
16. Close         | 17.Send Termination        |
    Connection    |--------------CC----------->|
]]></artwork>
          </figure>
          <t>
          Similarly, for IPv6, the IPv6 unicast peer
          2001:db8::1 is monitored. The processing flow is
          shown in <xref target="fig-usecase-ipv6"/>.
          </t>
          <figure anchor="fig-usecase-ipv6" title="Typical Use Case (IPv6)">
            <artwork><![CDATA[
           +-----------+                    +------------+
           | Monitored |<------------------>| Monitoring |
           |  Router   |                    |  Station   |
           +-----------+                    +-----------+
1. Connection      |                            |
   Establishment   |      3. Send Initiation    |
2. Create CC       |--------------CC----------->|4. Receive
   (Stream 0)      |                            |   Initiation
                   | 5.Send Initiation Response |
6. Receive         |<-------------CC------------|
   Initiation      |                            |
   Response        |                            |
                   | 8.Send Peer Up Notification|
7. Peer 2001:db8::1|------------CC------------->|9. Receive Peer
   Up              |                            |   Up Notification
                   | 10.Send Peer Up Response   |
11.Receive Peer    |<-------------CC------------|
   Up Response     |                            |
                   | 12a.Create FC-1 (Stream 1) |
                   |    Send Related Message    |
                   |            (RMI)           |
                   |--------------FC-1--------->|
                   |                            |
                   | 12b.Create FC-2 (Stream 2) |
                   |    Send Related Message    |
                   |            (RMO)           |
                   |--------------FC-2--------->|
                   |                            |
                   | 12c.Send SR Message        |
                   |--------------CC----------->|
                   |                            |
13.Peer 2001:db8::1| 14.Send Peer Down          |
   Down            |    Notification            |
                   |--------------CC----------->|
15.Close FC-1/2    |                            |
                   |                            |
16.Close Connection| 17.Send Termination        |
                   |--------------CC----------->|
]]></artwork>
          </figure>
          <t>
          In <xref target="fig-usecase-ipv4"/> and
          <xref target="fig-usecase-ipv6"/>, CC is the Control Channel,
          and FC is the Function Channel. RMI is the Route Mirroring
          message, and RMO is the Route Monitoring message. SR is the
          Statistics Report message.
          </t>
        </section>
      </section>
    </section>

    <section anchor="endpoint-authentication" title="Endpoint Authentication">
      <t>
      BMPoQUIC uses QUIC which uses TLS version 1.3 <xref target="RFC9846"/>
      or greater. Therefore, the TLS handshake process can be used for
      BMPoQUIC endpoint authentication. A third-party authentication
      mechanism can also be applied for BMPoQUIC endpoint authentication,
      such as a TLS client certificate.
      </t>
    </section>

    <section anchor="operational-considerations" title="Operational Considerations">
      <t>
      The decision to use BMPoQUIC instead of the TCP-based mechanism in
      <xref target="RFC7854"/> is an operational decision, and an
      implementation MUST provide a configuration mechanism to enable
      BMPoQUIC on the BMP session.
      </t>
      <t>
      Some connectivity problems (such as blocking UDP) could result in a
      failure to establish a QUIC connection. In this case, the monitored
      router MUST NOT automatically fall back to a TCP-based BMP session.
      BMP is a provisioned mechanism: whether the BMP session uses QUIC
      or TCP is determined by configuration at both ends. Automatic
      fallback would silently downgrade the transport security of the
      BMP session, since TCP-based BMP is not encrypted, and could
      surprise operators.
      </t>
      <t>
      If a QUIC connection fails after it has been established, the
      monitored router SHOULD attempt to re-establish a new QUIC
      connection rather than fall back to a TCP-based BMP session. On
      the new connection, a new BMP session starts with an Initiation
      message, as described in <xref target="bmpoquic-connection-termination"/>.
      </t>
      <t>
      This document does not define any stream-level error recovery
      mechanism. If a monitoring station receives a BMP message that it
      cannot parse on any stream, it SHOULD terminate the entire BMP
      session, consistent with the behavior of TCP-based BMP
      <xref target="RFC7854"/>. The station MAY reset the individual
      stream on which the malformed message was received before
      terminating the session. Stream-local error handling (e.g.,
      resetting a single stream while keeping the rest of the BMP
      session operational) would require mechanisms for stream identity
      negotiation and message re-synchronization that BMP does not
      currently define; this is left for future revisions of this
      document.
      </t>
      <t>
      When using multiple streams, a configuration MAY be implemented to
      select which multi-stream selection to use.
      </t>
      <t>
      Debugging BMPoQUIC sessions is more complex than debugging
      TCP-based BMP sessions, because QUIC encrypts all transport-layer
      information. Protocol analysis tools such as Wireshark can decode
      QUIC streams and analyze each stream separately, but only when the
      TLS session keys are provided (e.g., through a TLS key log file).
      Operators are therefore advised to capture the TLS key log file
      together with the packet trace when debugging BMPoQUIC sessions.
      </t>
    </section>

    <section anchor="iana" title="IANA Considerations">
      <t>
      This document creates a new registration for the identification of
      BMPoQUIC in the "Application Layer Protocol Negotiation (ALPN)
      Protocol IDs registry established in <xref target="RFC7301"/>.
      </t>
      <t>
      The "BMPoQ" string identifies BMPoQUIC:
      </t>
      <ul>
        <li>Protocol: BMPoQUIC</li>
        <li>Identification Sequence: 0x42 0x4d 0x50 0x6f 0x51 ("BMPoQ")</li>
        <li>Specification: This document</li>
      </ul>
    </section>

    <section anchor="security" title="Security Considerations">
      <t>
      The security considerations described throughout
      <xref target="RFC9846"/> and <xref target="RFC7854"/> apply here as
      well.
      </t>
      <t>
      This document replaces the transport protocol layer of BMP from TCP
      to QUIC. The basic protocol specification of BMP is not modified,
      and therefore the new security risks are not introduced to the basic
      BMP protocol. BMPoQUIC enhances transport-layer security for BMP
      session according to <xref target="RFC9000"/>.
      </t>
      <t>
      This document does not require to support third-party authentication
      (e.g., backend Authentication) due to the fact that TLS does not
      specify this way of authentication. If third-party authentication is
      needed, TLS client certificates are recommended to be used here.
      </t>

      <t>
      A BMPoQUIC connection is typically long-lived and may stay idle
      for extended periods, which widens the window for off-path
      ICMP-based attacks, as studied for TCP in
      <xref target="RFC5927"/>. A single successful injection can
      affect the connection for its entire remaining lifetime.
      Implementations MUST follow the ICMP handling requirements of
      <xref target="RFC9000"/> and <xref target="RFC8085"/>; in
      particular, ICMP messages whose embedded payload cannot be
      validated as belonging to the QUIC connection MUST be ignored,
      ICMP Packet Too Big messages indicating a size below the
      1200-byte minimum datagram size MUST be ignored, and the maximum
      datagram size MUST NOT be increased based on ICMP.
      </t>
      <t>
      A BMPoQUIC implementation MUST NOT close the QUIC connection on
      the basis of ICMP destination or port unreachable errors alone.
      ICMP unreachable errors are unauthenticated and can be forged.
      Liveness of the connection is determined by QUIC's own loss
      detection and timeout machinery <xref target="RFC9002"/> as
      required by <xref target="RFC8085"/>.
      </t>
      <t>
      Since a spoofed PMTU reduction is not reversed without new
      probing, BMPoQUIC implementations SHOULD implement DPLPMTUD
      <xref target="RFC8899"/> with periodic probing so that a
      successfully spoofed PMTU clamp can recover.
      </t>
      <t>
      Long-lived, high-throughput BMPoQUIC connections will reach the
      AEAD confidentiality limits of <xref target="RFC9001"/>, whose
      key update procedures MUST be supported.
      </t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>

        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner">
              <organization>Harvard University</organization>
            </author>
            <date month="March" year="1997"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>

        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author initials="S." surname="Friedl"/>
            <author initials="A." surname="Popov"/>
            <author initials="A." surname="Langley"/>
            <author initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>

        <reference anchor="RFC7854">
          <front>
            <title>BGP Monitoring Protocol (BMP)</title>
            <author initials="J." surname="Scudder" role="editor"/>
            <author initials="R." surname="Fernando"/>
            <author initials="S." surname="Stuart"/>
            <date month="June" year="2016"/>
          </front>
          <seriesInfo name="RFC" value="7854"/>
          <seriesInfo name="DOI" value="10.17487/RFC7854"/>
        </reference>

        <reference anchor="RFC8085">
          <front>
            <title>UDP Usage Guidelines</title>
            <author initials="L." surname="Eggert"/>
            <author initials="G." surname="Fairhurst"/>
            <author initials="G." surname="Shepherd"/>
            <date month="March" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </reference>

        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>

        <reference anchor="RFC8899">
          <front>
            <title>Packetization Layer Path MTU Discovery for Datagram Transports</title>
            <author initials="G." surname="Fairhurst"/>
            <author initials="T." surname="Jones"/>
            <author initials="M." surname="Tuexen"/>
            <author initials="I." surname="Ruengeler"/>
            <author initials="T." surname="Voelker"/>
            <date month="September" year="2020"/>
          </front>
          <seriesInfo name="STD" value="119"/>
          <seriesInfo name="RFC" value="8899"/>
          <seriesInfo name="DOI" value="10.17487/RFC8899"/>
        </reference>

        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author initials="J." surname="Iyengar" role="editor"/>
            <author initials="M." surname="Thomson" role="editor"/>
            <date month="May" year="2021"/>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>

        <reference anchor="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author initials="M." surname="Thomson" role="editor"/>
            <author initials="S." surname="Turner" role="editor"/>
            <date month="May" year="2021"/>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>

        <reference anchor="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author initials="J." surname="Iyengar" role="editor"/>
            <author initials="I." surname="Swett" role="editor"/>
            <date month="May" year="2021"/>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>

        <reference anchor="RFC9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor="RFC5927">
          <front>
            <title>ICMP Attacks Against TCP</title>
            <author initials="F." surname="Gont"/>
            <date month="July" year="2010"/>
          </front>
          <seriesInfo name="RFC" value="5927"/>
          <seriesInfo name="DOI" value="10.17487/RFC5927"/>
        </reference>

        <!-- Auto-fetched at build time and always resolves to the latest
             version of the cited draft. -->
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.retana-idr-bgp-quic.xml"/>
      </references>
    </references>
  </back>
</rfc>
