<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.32 (Ruby 4.0.1) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc compact="yes"?>

<rfc ipr="trust200902" docName="draft-teodor-pilot-protocol-00" category="exp" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Pilot Protocol">Pilot Protocol: An Overlay Network for Autonomous Agent Communication</title>

    <author initials="C." surname="Teodor" fullname="Calin Teodor">
      <organization>Vulture Labs</organization>
      <address>
        <email>calin@vulturelabs.com</email>
      </address>
    </author>

    <date year="2026" month="March" day="14"/>

    <area>Internet</area>
    <workgroup>Independent Submission</workgroup>
    

    <abstract>


<?line 43?>

<t>This document specifies Pilot Protocol, an overlay network that provides
autonomous AI agents with virtual addresses, port-based service
multiplexing, reliable and unreliable transport, NAT traversal, encrypted
tunnels, and a bilateral trust model. Pilot Protocol operates as a
network and transport layer beneath application-layer agent protocols such
as A2A and MCP. It encapsulates virtual packets in UDP datagrams for
transit over the existing Internet. The protocol gives agents first-class
network citizenship --- stable identities, reachable addresses, and
standard transport primitives --- independent of their underlying network
infrastructure.</t>



    </abstract>



  </front>

  <middle>


<?line 56?>

<section anchor="introduction"><name>Introduction</name>

<t>AI agents are autonomous software entities that reason, plan, and execute
tasks. As agents become more prevalent, they need to communicate with each
other across heterogeneous network environments: cloud, edge, behind NAT,
and across organizational boundaries. Current agent protocols (MCP, A2A)
operate at the application layer over HTTP, assuming agents have stable,
reachable endpoints. This assumption fails for a large class of
deployments.</t>

<t>Pilot Protocol is an overlay network stack that gives agents network-layer
primitives: virtual addresses, ports, reliable streams, unreliable
datagrams, NAT traversal, encrypted tunnels, name resolution, and a
bilateral trust model. It is positioned as the network/transport layer
beneath application-layer agent protocols --- analogous to how TCP/IP sits
beneath HTTP.</t>

<section anchor="design-principles"><name>Design Principles</name>

<t>The protocol is designed around five principles:</t>

<t><list style="numbers" type="1">
  <t><strong>Agents are first-class network citizens.</strong> Every agent gets a unique
virtual address, can bind ports, listen for connections, and be reached
by any authorized peer.</t>
  <t><strong>The network boundary is the trust boundary.</strong> Network membership
serves as the primary access control mechanism. Joining a network
requires meeting its rules.</t>
  <t><strong>Transport agnosticism.</strong> The protocol provides reliable streams
(TCP-equivalent) and unreliable datagrams (UDP-equivalent). Anything
that runs on TCP/IP can run on the overlay.</t>
  <t><strong>Minimize the protocol, maximize the surface.</strong> The protocol defines
addressing, packets, and transport. Application-level message formats
are layers built on top.</t>
  <t><strong>Practical over pure.</strong> The protocol uses a centralized registry for
address assignment and a centralized beacon for NAT traversal. Full
decentralization is a future goal, not a prerequisite.</t>
</list></t>

</section>
<section anchor="relationship-to-existing-protocols"><name>Relationship to Existing Protocols</name>

<t>Pilot Protocol operates at the network and transport layers of the overlay
stack. It is complementary to, not competitive with, application-layer
agent protocols:</t>

<t><list style="symbols">
  <t>A2A defines what agents say to each other. Pilot defines how they reach
each other.</t>
  <t>MCP defines agent-to-tool interfaces. Pilot provides the transport
substrate.</t>
  <t>QUIC <xref target="RFC9000"/> is a potential underlay transport. Pilot could run over
QUIC instead of raw UDP.</t>
  <t>LISP <xref target="RFC9300"/> provides conceptual precedent for identity/locator
separation.</t>
  <t>VXLAN <xref target="RFC7348"/> and GENEVE <xref target="RFC8926"/> are overlay encapsulation
precedents at the data link layer. Pilot operates at the network layer.</t>
</list></t>

</section>
</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>

<?line -18?>

<dl>
  <dt>Agent:</dt>
  <dd>
    <t>An autonomous software entity capable of reasoning, planning, and
executing tasks without continuous human supervision.</t>
  </dd>
  <dt>Daemon:</dt>
  <dd>
    <t>The local Pilot Protocol process that implements the virtual network
stack. It maintains a UDP tunnel, handles routing, session management,
and encryption. Analogous to a virtual NIC.</t>
  </dd>
  <dt>Driver:</dt>
  <dd>
    <t>An SDK or library that agents import to communicate with the local
daemon over IPC. Provides the application-facing API (listen, dial,
read, write, close).</t>
  </dd>
  <dt>Registry:</dt>
  <dd>
    <t>A centralized service that assigns virtual addresses, maintains the
address-to-locator mapping table, manages network membership, and stores
public keys.</t>
  </dd>
  <dt>Beacon:</dt>
  <dd>
    <t>A service that provides NAT traversal coordination: endpoint discovery
(STUN-like), hole-punch coordination, and relay fallback.</t>
  </dd>
  <dt>Virtual Address:</dt>
  <dd>
    <t>A 48-bit overlay address assigned to an agent, independent of its
underlying IP address.</t>
  </dd>
  <dt>Trust Pair:</dt>
  <dd>
    <t>A bilateral trust relationship between two agents, established through
explicit mutual consent.</t>
  </dd>
</dl>

</section>
<section anchor="architecture-overview"><name>Architecture Overview</name>

<section anchor="protocol-stack"><name>Protocol Stack</name>

<t>Pilot Protocol is a five-layer overlay stack:</t>

<texttable>
      <ttcol align='left'>Layer</ttcol>
      <ttcol align='left'>Function</ttcol>
      <c>Application</c>
      <c>HTTP, RPC, custom protocols (above Pilot)</c>
      <c>Session</c>
      <c>Reliable streams, unreliable datagrams</c>
      <c>Network</c>
      <c>Virtual addresses, ports, routing</c>
      <c>Tunnel</c>
      <c>NAT traversal, UDP encapsulation, encryption</c>
      <c>Physical</c>
      <c>Real Internet (IP/TCP/UDP)</c>
</texttable>

<t>The overlay handles addressing, routing, and session management. The
underlying Internet handles physical delivery.</t>

</section>
<section anchor="component-roles"><name>Component Roles</name>

<dl>
  <dt>Registry:</dt>
  <dd>
    <t>Assigns virtual addresses, maintains address table, manages networks
and trust pairs, relays handshake requests for private nodes. Runs on
TCP. The only globally reachable component.</t>
  </dd>
  <dt>Beacon:</dt>
  <dd>
    <t>Provides STUN-like endpoint discovery, hole-punch coordination, and
relay fallback for symmetric NAT. Runs on UDP.</t>
  </dd>
  <dt>Daemon:</dt>
  <dd>
    <t>Core protocol implementation running on each participating machine.
Maintains a single UDP socket, multiplexes all virtual connections,
handles tunnel encryption, and exposes a local IPC socket for drivers.</t>
  </dd>
  <dt>Driver:</dt>
  <dd>
    <t>Client SDK that agents import. Connects to the local daemon via Unix
domain socket. Implements standard network interfaces (listeners,
connections).</t>
  </dd>
  <dt>Nameserver:</dt>
  <dd>
    <t>DNS equivalent for the overlay. Runs as a service on virtual port 53,
resolving human-readable names to virtual addresses.</t>
  </dd>
  <dt>Gateway:</dt>
  <dd>
    <t>Bridge between the overlay and standard IP. Maps virtual addresses to
local IPs, allowing unmodified TCP programs to reach agents.</t>
  </dd>
</dl>

</section>
</section>
<section anchor="addressing"><name>Addressing</name>

<section anchor="virtual-address-format"><name>Virtual Address Format</name>

<t>Addresses are 48 bits, split into two fields:</t>

<figure><artwork><![CDATA[
 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Network ID (16 bits)     |       Node ID (32 bits) ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~             Node ID (continued)               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<dl>
  <dt>Network ID (16 bits):</dt>
  <dd>
    <t>Identifies the network or topic. Network 0 is the global backbone; all
nodes are members by default. Networks 1-65534 are created for specific
purposes. Network 65535 is reserved.</t>
  </dd>
  <dt>Node ID (32 bits):</dt>
  <dd>
    <t>Identifies the individual agent within a network. Supports over 4
billion nodes per network.</t>
  </dd>
</dl>

</section>
<section anchor="text-representation"><name>Text Representation</name>

<t>Addresses are written as <spanx style="verb">N:XXXX.YYYY.ZZZZ</spanx> where:</t>

<t><list style="symbols">
  <t><spanx style="verb">N</spanx> is the network ID in decimal</t>
  <t><spanx style="verb">XXXX.YYYY.ZZZZ</spanx> is the node ID as three groups of 4 hexadecimal digits</t>
</list></t>

<t>Examples:</t>

<t><list style="symbols">
  <t><spanx style="verb">0:0000.0000.0001</spanx> --- Node 1 on the backbone</t>
  <t><spanx style="verb">1:00A3.F291.0004</spanx> --- A node on network 1</t>
</list></t>

</section>
<section anchor="socket-addresses"><name>Socket Addresses</name>

<t>A socket address appends a port: <spanx style="verb">1:00A3.F291.0004:1000</spanx></t>

</section>
<section anchor="special-addresses"><name>Special Addresses</name>

<texttable>
      <ttcol align='left'>Address</ttcol>
      <ttcol align='left'>Meaning</ttcol>
      <c><spanx style="verb">0:0000.0000.0000</spanx></c>
      <c>Unspecified / wildcard</c>
      <c><spanx style="verb">0:0000.0000.0001</spanx></c>
      <c>Registry</c>
      <c><spanx style="verb">0:0000.0000.0002</spanx></c>
      <c>Beacon</c>
      <c><spanx style="verb">0:0000.0000.0003</spanx></c>
      <c>Nameserver</c>
      <c><spanx style="verb">X:FFFF.FFFF.FFFF</spanx></c>
      <c>Broadcast on network X</c>
</texttable>

</section>
</section>
<section anchor="ports"><name>Ports</name>

<section anchor="port-ranges"><name>Port Ranges</name>

<t>Virtual ports are 16-bit unsigned integers (0-65535):</t>

<texttable>
      <ttcol align='left'>Range</ttcol>
      <ttcol align='left'>Purpose</ttcol>
      <c>0-1023</c>
      <c>Reserved / well-known</c>
      <c>1024-49151</c>
      <c>Registered services</c>
      <c>49152-65535</c>
      <c>Ephemeral / dynamic</c>
</texttable>

</section>
<section anchor="well-known-ports"><name>Well-Known Ports</name>

<texttable>
      <ttcol align='left'>Port</ttcol>
      <ttcol align='left'>Service</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>Ping</c>
      <c>Liveness checks</c>
      <c>1</c>
      <c>Control</c>
      <c>Daemon-to-daemon control</c>
      <c>7</c>
      <c>Echo</c>
      <c>Echo service (testing)</c>
      <c>53</c>
      <c>Name resolution</c>
      <c>Nameserver queries</c>
      <c>80</c>
      <c>Agent HTTP</c>
      <c>Web endpoints</c>
      <c>443</c>
      <c>Secure channel</c>
      <c>X25519 + AES-256-GCM</c>
      <c>444</c>
      <c>Trust handshake</c>
      <c>Peer trust negotiation</c>
      <c>1000</c>
      <c>Standard I/O</c>
      <c>Text stream between agents</c>
      <c>1001</c>
      <c>Data exchange</c>
      <c>Typed frames (text, binary, JSON, file)</c>
      <c>1002</c>
      <c>Event stream</c>
      <c>Pub/sub with topic filtering</c>
      <c>1003</c>
      <c>Task submission</c>
      <c>Task lifecycle and reputation scoring</c>
</texttable>

</section>
</section>
<section anchor="packet-format"><name>Packet Format</name>

<section anchor="header-layout"><name>Header Layout</name>

<t>The fixed packet header is 34 bytes:</t>

<figure title="Pilot Protocol Packet Header (34 bytes)" anchor="fig-header"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Ver  | Flags |   Protocol    |         Payload Length        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Source Network ID          |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+     Source Node ID            |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Destination Network ID       |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   Destination Node ID         |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Source Port             |     Destination Port          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Sequence Number                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Window (segments)        |        Checksum (hi)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Checksum (lo)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>All multi-byte fields are in network byte order (big-endian).</t>

</section>
<section anchor="field-definitions"><name>Field Definitions</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Offset</ttcol>
      <ttcol align='left'>Size</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>Version</c>
      <c>0</c>
      <c>4 bits</c>
      <c>Protocol version. Current: 1</c>
      <c>Flags</c>
      <c>0</c>
      <c>4 bits</c>
      <c>SYN (0x1), ACK (0x2), FIN (0x4), RST (0x8)</c>
      <c>Protocol</c>
      <c>1</c>
      <c>1 byte</c>
      <c>Transport type (see <xref target="protocol-types"/>)</c>
      <c>Payload Length</c>
      <c>2</c>
      <c>2 bytes</c>
      <c>Payload length in bytes (max 65535)</c>
      <c>Source Network</c>
      <c>4</c>
      <c>2 bytes</c>
      <c>Source network ID</c>
      <c>Source Node</c>
      <c>6</c>
      <c>4 bytes</c>
      <c>Source node ID</c>
      <c>Dest Network</c>
      <c>10</c>
      <c>2 bytes</c>
      <c>Destination network ID</c>
      <c>Dest Node</c>
      <c>12</c>
      <c>4 bytes</c>
      <c>Destination node ID</c>
      <c>Source Port</c>
      <c>16</c>
      <c>2 bytes</c>
      <c>Source port</c>
      <c>Dest Port</c>
      <c>18</c>
      <c>2 bytes</c>
      <c>Destination port</c>
      <c>Sequence Number</c>
      <c>20</c>
      <c>4 bytes</c>
      <c>Byte offset of this segment</c>
      <c>Ack Number</c>
      <c>24</c>
      <c>4 bytes</c>
      <c>Next expected byte from peer</c>
      <c>Window</c>
      <c>28</c>
      <c>2 bytes</c>
      <c>Advertised receive window in segments</c>
      <c>Checksum</c>
      <c>30</c>
      <c>4 bytes</c>
      <c>CRC32 over header + payload</c>
</texttable>

</section>
<section anchor="protocol-types"><name>Protocol Types</name>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0x01</c>
      <c>Stream</c>
      <c>Reliable, ordered delivery (TCP-like)</c>
      <c>0x02</c>
      <c>Datagram</c>
      <c>Unreliable, unordered (UDP-like)</c>
      <c>0x03</c>
      <c>Control</c>
      <c>Internal control messages</c>
</texttable>

</section>
<section anchor="flag-definitions"><name>Flag Definitions</name>

<texttable>
      <ttcol align='left'>Bit</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>SYN</c>
      <c>Synchronize --- initiate connection</c>
      <c>1</c>
      <c>ACK</c>
      <c>Acknowledge --- confirm receipt</c>
      <c>2</c>
      <c>FIN</c>
      <c>Finish --- close connection</c>
      <c>3</c>
      <c>RST</c>
      <c>Reset --- abort connection</c>
</texttable>

</section>
<section anchor="checksum-calculation"><name>Checksum Calculation</name>

<t>The checksum is computed as follows:</t>

<t><list style="numbers" type="1">
  <t>Set the 4-byte checksum field to zero.</t>
  <t>Compute CRC32 (IEEE polynomial) over the entire header (34 bytes with
zeroed checksum field) concatenated with the payload bytes.</t>
  <t>Write the resulting 32-bit value into the checksum field in big-endian
byte order.</t>
</list></t>

<t>Receivers <bcp14>MUST</bcp14> verify the checksum and discard packets with incorrect
values.</t>

<t>Note: CRC32 detects accidental corruption but does not provide
cryptographic integrity. Tamper resistance is provided by tunnel-layer
encryption (<xref target="tunnel-encryption"/>).</t>

</section>
</section>
<section anchor="tunnel-encapsulation"><name>Tunnel Encapsulation</name>

<t>Virtual packets are encapsulated in UDP datagrams for transit over the
real Internet. Four frame types are defined, distinguished by a 4-byte
magic value.</t>

<section anchor="plaintext-frame-pilt"><name>Plaintext Frame (PILT)</name>

<figure><artwork><![CDATA[
+------+------+------+------+---...---+---...---+
| 0x50 | 0x49 | 0x4C | 0x54 | Header  | Payload |
+------+------+------+------+---...---+---...---+
    P      I      L      T     34 bytes  variable
]]></artwork></figure>

<t>The magic bytes 0x50494C54 ("PILT") indicate an unencrypted Pilot
Protocol frame. The header and payload follow immediately.</t>

</section>
<section anchor="tunnel-encryption"><name>Encrypted Frame (PILS)</name>

<figure><artwork><![CDATA[
+------+------+------+------+----------+----------+---...---+
| 0x50 | 0x49 | 0x4C | 0x53 | SenderID |  Nonce   |Ciphertext
+------+------+------+------+----------+----------+---...---+
    P      I      L      S    4 bytes    12 bytes   variable
]]></artwork></figure>

<t>The magic bytes 0x50494C53 ("PILS") indicate an encrypted frame.</t>

<dl>
  <dt>SenderID:</dt>
  <dd>
    <t>4-byte Node ID of the sending daemon, in big-endian. Used by the
receiver to look up the shared AES-256-GCM key for this peer.</t>
  </dd>
  <dt>Nonce:</dt>
  <dd>
    <t>12-byte GCM nonce. See <xref target="nonce-management"/> for construction.</t>
  </dd>
  <dt>Ciphertext:</dt>
  <dd>
    <t>The Pilot Protocol header and payload, encrypted with AES-256-GCM
<xref target="RFC5116"/>. The ciphertext includes a 16-byte authentication tag
appended by GCM.</t>
  </dd>
</dl>

<t>The encryption key is derived from an X25519 <xref target="RFC7748"/> ECDH exchange
between the two daemons (see <xref target="key-exchange"/>).</t>

</section>
<section anchor="key-exchange"><name>Key Exchange Frame (PILK)</name>

<figure><artwork><![CDATA[
+------+------+------+------+----------+---...---+
| 0x50 | 0x49 | 0x4C | 0x4B | SenderID | X25519  |
+------+------+------+------+----------+---...---+
    P      I      L      K    4 bytes    32 bytes
]]></artwork></figure>

<t>Anonymous key exchange. The sender transmits its ephemeral X25519 public
key (32 bytes, per <xref target="RFC7748"/>). Both sides compute the ECDH shared
secret and derive an AES-256-GCM key.</t>

<t>PILK provides confidentiality but not authentication. An active attacker
can perform a man-in-the-middle attack by substituting their own public
key. See <xref target="authenticated-key-exchange"/> for the authenticated variant.</t>

</section>
<section anchor="authenticated-key-exchange"><name>Authenticated Key Exchange Frame (PILA)</name>

<figure><artwork><![CDATA[
+------+------+------+------+----------+---------+---------+---------+
| 0x50 | 0x49 | 0x4C | 0x41 | SenderID | X25519  | Ed25519 |  Sig   |
+------+------+------+------+----------+---------+---------+---------+
    P      I      L      A    4 bytes   32 bytes  32 bytes  64 bytes
]]></artwork></figure>

<t>Authenticated key exchange. In addition to the X25519 public key, the
sender includes its Ed25519 public key (32 bytes, per <xref target="RFC8032"/>) and a
64-byte Ed25519 signature.</t>

<t>The signature covers the concatenation of:</t>

<t><list style="numbers" type="1">
  <t>The ASCII string "auth" (4 bytes)</t>
  <t>The sender's Node ID (4 bytes, big-endian)</t>
  <t>The X25519 public key (32 bytes)</t>
</list></t>

<t>The receiver verifies the signature using the sender's Ed25519 public key,
which it obtains from the registry and cross-checks against the claimed
Node ID. This binds the ephemeral X25519 key to the sender's persistent
identity, preventing man-in-the-middle attacks.</t>

<t>Daemons with persistent Ed25519 identities <bcp14>SHOULD</bcp14> use PILA. Daemons
without persistent identities fall back to PILK.</t>

</section>
</section>
<section anchor="session-layer"><name>Session Layer</name>

<section anchor="connection-state-machine"><name>Connection State Machine</name>

<figure title="Connection State Machine" anchor="fig-state-machine"><artwork><![CDATA[
                         Dial()
    CLOSED -----------> SYN_SENT
      ^                    |
      |               SYN-ACK recv
      |                    |
      |                    v
      |              ESTABLISHED <--- Listen() + SYN recv
      |                    |
      |               Close()
      |                    |
      |                    v
      |               FIN_WAIT
      |                    |
      |                ACK recv
      |                    |
      |                    v
      |               TIME_WAIT
      |                    |
      |               10s timeout
      |                    |
      +--------------------+
]]></artwork></figure>

</section>
<section anchor="three-way-handshake"><name>Three-Way Handshake</name>

<t>Connection establishment uses a three-way handshake:</t>

<figure><artwork><![CDATA[
Initiator                          Responder
    |                                  |
    |-------- SYN seq=X ------------->|
    |                                  |
    |<--- SYN+ACK seq=Y ack=X+1 -----|
    |                                  |
    |-------- ACK ack=Y+1 ----------->|
    |                                  |
    |       ESTABLISHED                |       ESTABLISHED
]]></artwork></figure>

<t>The initiator selects an initial sequence number X. The responder selects
its own initial sequence number Y and acknowledges X+1. The initiator
confirms by acknowledging Y+1.</t>

<t>Both sides include their advertised receive window in the Window field of
the SYN and SYN-ACK packets.</t>

</section>
<section anchor="connection-teardown"><name>Connection Teardown</name>

<figure><artwork><![CDATA[
Closer                             Remote
    |                                  |
    |-------- FIN seq=N ------------->|
    |                                  |
    |<------- ACK ack=N+1 -----------|
    |                                  |
    |       TIME_WAIT (10s)            |       CLOSED
    |                                  |
    |       CLOSED                     |
]]></artwork></figure>

<t>The closer sends FIN, waits for ACK, and enters TIME_WAIT for 10
seconds. The 10-second TIME_WAIT is shorter than TCP's typical 2*MSL
because overlay RTTs are bounded by the underlay network.</t>

</section>
<section anchor="sequence-number-arithmetic"><name>Sequence Number Arithmetic</name>

<t>Sequence numbers are 32-bit unsigned integers with wrapping comparison
per <xref target="RFC1982"/>:</t>

<figure><artwork><![CDATA[
seqAfter(a, b) = int32(a - b) > 0
]]></artwork></figure>

<t>This correctly handles wraparound at 2^32.</t>

</section>
<section anchor="reliable-delivery"><name>Reliable Delivery</name>

<t>The Stream protocol (0x01) provides reliable, ordered byte stream
delivery using a sliding window mechanism.</t>

<section anchor="retransmission-timeout-rto"><name>Retransmission Timeout (RTO)</name>

<t>RTO is computed per <xref target="RFC6298"/>:</t>

<t><list style="symbols">
  <t>SRTT (Smoothed RTT): updated with alpha = 1/8</t>
  <t>RTTVAR (RTT Variance): updated with beta = 1/4</t>
  <t>RTO = SRTT + max(G, 4 * RTTVAR)</t>
  <t>G (clock granularity floor) = 10 ms</t>
  <t>RTO is clamped to the range 200 ms to 10 s</t>
</list></t>

<t>SYN packets are retransmitted with exponential backoff: 1s, 2s, 4s, 8s,
up to 5 retries. Data segments allow up to 8 retransmission attempts
before the connection is closed.</t>

</section>
<section anchor="out-of-order-handling"><name>Out-of-Order Handling</name>

<t>Segments received out of order are buffered and delivered to the
application in sequence order when gaps are filled.</t>

</section>
</section>
<section anchor="selective-acknowledgment-sack"><name>Selective Acknowledgment (SACK)</name>

<t>When the receiver has out-of-order segments, it encodes SACK blocks in the
ACK payload. Each SACK block is a pair of 32-bit sequence numbers
representing a contiguous range of received bytes beyond the cumulative
ACK point. Up to 4 SACK blocks are encoded per ACK.</t>

<t>The sender uses SACK information to retransmit only the missing segments,
skipping segments the peer has already received.</t>

</section>
<section anchor="congestion-control"><name>Congestion Control</name>

<t>The protocol implements TCP-style congestion control:</t>

<dl>
  <dt>Slow Start:</dt>
  <dd>
    <t>The congestion window (cwnd) starts at 10 segments (40 KB) per
<xref target="RFC6928"/> and grows by one segment for each ACK received, until cwnd
reaches the slow-start threshold (ssthresh).</t>
  </dd>
  <dt>Congestion Avoidance:</dt>
  <dd>
    <t>After cwnd reaches ssthresh, growth switches to additive-increase:
cwnd grows by approximately one segment per round-trip time (Appropriate
Byte Counting per <xref target="RFC3465"/>).</t>
  </dd>
  <dt>Fast Retransmit:</dt>
  <dd>
    <t>After 3 duplicate pure ACKs (data packets with piggybacked ACKs are
excluded per <xref target="RFC5681"/> Section 3.2), the sender retransmits the
missing segment without waiting for RTO.</t>
  </dd>
  <dt>Multiplicative Decrease:</dt>
  <dd>
    <t>On loss detection (fast retransmit or RTO), ssthresh is set to
max(cwnd/2, 2 segments). On RTO, cwnd is additionally reset to 1
segment (Tahoe behavior).</t>
  </dd>
</dl>

<t>The maximum congestion window is 1 MB. The maximum segment size (MSS)
is 4096 bytes.</t>

</section>
<section anchor="flow-control"><name>Flow Control</name>

<t>Each ACK carries the receiver's advertised window --- the number of free
segments in its receive buffer. The sender's effective window is:</t>

<figure><artwork><![CDATA[
effective_window = min(cwnd, peer_advertised_window)
]]></artwork></figure>

<t>This prevents a fast sender from overwhelming a slow receiver.</t>

<section anchor="zero-window-probing"><name>Zero-Window Probing</name>

<t>When the receiver advertises a zero window, the sender enters persist
mode and sends 1-byte probe segments at exponentially increasing intervals
until the receiver opens its window.</t>

</section>
</section>
<section anchor="write-coalescing-nagles-algorithm"><name>Write Coalescing (Nagle's Algorithm)</name>

<t>Small writes are buffered when unacknowledged data is in flight and
flushed when:</t>

<t><list style="symbols">
  <t>The buffer reaches MSS (4096 bytes), or</t>
  <t>All previous data is acknowledged, or</t>
  <t>A 40 ms timeout expires.</t>
</list></t>

<t>This reduces packet overhead for applications performing many small
writes. The algorithm can be disabled per-connection with a NoDelay
option, analogous to TCP_NODELAY.</t>

</section>
<section anchor="automatic-segmentation"><name>Automatic Segmentation</name>

<t>Large writes are automatically segmented into MSS-sized chunks (4096
bytes) by the daemon. Applications can write arbitrarily large buffers
without manual chunking.</t>

</section>
<section anchor="delayed-acks"><name>Delayed ACKs</name>

<t>Instead of sending an ACK for every received segment, the daemon batches
up to 2 segments or 40 ms (whichever comes first). When out-of-order
data is present, ACKs are sent immediately with SACK blocks to trigger
fast retransmit. When data is sent on a connection, the pending delayed
ACK is cancelled because the outgoing data packet piggybacks the latest
cumulative ACK and receive window.</t>

</section>
<section anchor="keepalive-and-idle-timeout"><name>Keepalive and Idle Timeout</name>

<t>Keepalive probes (empty ACKs) are sent every 30 seconds to idle
connections. Connections idle for 120 seconds are automatically closed.
These timers are appropriate for the overlay's use case (agent
communication), where stale connections should be reclaimed promptly.</t>

</section>
<section anchor="timewait"><name>TIME_WAIT</name>

<t>Closed connections enter TIME_WAIT for 10 seconds before being removed.
During TIME_WAIT, the connection occupies its port binding (preventing
reuse confusion with delayed packets) but does not count as active.</t>

</section>
</section>
<section anchor="nat-traversal"><name>NAT Traversal</name>

<section anchor="stun-based-endpoint-discovery"><name>STUN-Based Endpoint Discovery</name>

<t>On startup, the daemon sends a UDP probe to the beacon. The beacon
observes the daemon's public IP address and port (as mapped by NAT) and
reports it back. This follows the mechanism described in <xref target="RFC8489"/>
(Session Traversal Utilities for NAT).</t>

<t>The discovered public endpoint is registered with the registry as the
daemon's locator.</t>

<t>For daemons with known public endpoints (e.g., cloud VMs), the
<spanx style="verb">-endpoint host:port</spanx> flag skips STUN and registers the specified
endpoint directly.</t>

</section>
<section anchor="hole-punching"><name>Hole Punching</name>

<t>When daemon A wants to reach daemon B and both are behind NAT:</t>

<t><list style="numbers" type="1">
  <t>Daemon A sends a punch request to the beacon, specifying B's Node ID.</t>
  <t>The beacon looks up B's registered endpoint and sends a punch command
to both A and B, instructing each to send a UDP packet to the other's
observed endpoint.</t>
  <t>Both daemons send UDP packets to each other simultaneously, punching
holes in their respective NATs.</t>
  <t>Subsequent packets flow directly between A and B.</t>
</list></t>

<t>This works for Full Cone, Restricted Cone, and Port-Restricted Cone NAT
types.</t>

</section>
<section anchor="relay-fallback"><name>Relay Fallback</name>

<t>When hole punching fails (typically Symmetric NAT, where the mapped port
changes per destination), the beacon provides transparent relay:</t>

<figure><artwork><![CDATA[
+----------+         +----------+         +----------+
| Daemon A | ------> |  Beacon  | ------> | Daemon B |
+----------+  relay  +----------+  relay  +----------+
]]></artwork></figure>

<t>The relay frame format:</t>

<figure><artwork><![CDATA[
+------+----------+----------+---...---+
| 0x05 | SenderID |  DestID  | Payload |
+------+----------+----------+---...---+
1 byte   4 bytes    4 bytes   variable
]]></artwork></figure>

<t>The beacon unwraps the relay header and forwards the payload to the
destination daemon. Relay is transparent to the session layer --- the
virtual packet inside the relay frame is identical to a directly-delivered
packet.</t>

</section>
<section anchor="connection-establishment-strategy"><name>Connection Establishment Strategy</name>

<t>When dialing a remote daemon, the connection strategy is:</t>

<t><list style="numbers" type="1">
  <t>Attempt 3 direct UDP sends to the peer's registered endpoint.</t>
  <t>If all 3 fail, switch to relay mode through the beacon.</t>
  <t>Attempt 3 relay sends.</t>
  <t>If all relay attempts fail, return an error to the application.</t>
</list></t>

<t>The switch from direct to relay is automatic and transparent to the
application layer.</t>

</section>
</section>
<section anchor="security"><name>Security</name>

<section anchor="identity"><name>Identity</name>

<t>Each node receives an Ed25519 <xref target="RFC8032"/> keypair from the registry upon
registration. The private key serves as the node's identity credential.
The registry holds all public keys and can verify signatures.</t>

<t>Identities may be persisted to disk so that a node retains its keypair
and virtual address across restarts. On restart with a persisted identity,
the daemon re-registers with the stored public key and the registry
restores the node's address and memberships.</t>

</section>
<section anchor="tunnel-layer-encryption"><name>Tunnel-Layer Encryption</name>

<t>Tunnel encryption is enabled by default. On startup, each daemon
generates an ephemeral X25519 <xref target="RFC7748"/> keypair. When two daemons first
communicate, they exchange public keys via PILK (<xref target="key-exchange"/>) or PILA
(<xref target="authenticated-key-exchange"/>) frames, compute an ECDH shared secret,
and establish an AES-256-GCM <xref target="RFC5116"/> cipher.</t>

<t>All subsequent packets between the pair are encrypted (PILS frames),
regardless of virtual port. The encryption is at the tunnel layer ---
it protects all overlay traffic between two daemons, including connection
handshakes.</t>

<t>Tunnel encryption is backward-compatible: if a peer does not respond to
key exchange, communication falls back to plaintext (PILT frames).</t>

</section>
<section anchor="authenticated-key-exchange-upgrade"><name>Authenticated Key Exchange Upgrade</name>

<t>When a daemon has a persisted Ed25519 identity, the key exchange is
upgraded from PILK to PILA (see <xref target="authenticated-key-exchange"/>). The
Ed25519 signature binds the ephemeral X25519 key to the node's persistent
identity, preventing man-in-the-middle attacks.</t>

<t>Implementations <bcp14>SHOULD</bcp14> use PILA when an Ed25519 identity is available.</t>

</section>
<section anchor="application-layer-encryption-port-443"><name>Application-Layer Encryption (Port 443)</name>

<t>Virtual port 443 provides end-to-end encryption between two agents, on
top of any tunnel-layer encryption. The agents perform an X25519 ECDH
handshake to derive a shared secret, then use AES-256-GCM for all
subsequent data.</t>

<t>Each encrypted frame:</t>

<figure><artwork><![CDATA[
[4-byte length][12-byte nonce][ciphertext + 16-byte GCM tag]
]]></artwork></figure>

<t>This provides defense in depth: even if the tunnel encryption is
compromised (e.g., by a compromised intermediate daemon in a future
multi-hop topology), port 443 data remains protected.</t>

</section>
<section anchor="trust-handshake-protocol-port-444"><name>Trust Handshake Protocol (Port 444)</name>

<t>Port 444 implements a bilateral trust negotiation protocol. Two agents
exchange trust requests with justification strings and must both approve
before a trust relationship is established.</t>

<t>Three auto-approval paths exist:</t>

<t><list style="numbers" type="1">
  <t><strong>Mutual handshake</strong>: If both agents independently request trust with
each other, the relationship is auto-approved.</t>
  <t><strong>Network trust</strong>: If both agents share a non-backbone network, the
relationship is auto-approved (network membership serves as a trust
signal).</t>
  <t><strong>Manual approval</strong>: If neither condition is met, the request is queued
for the receiving agent's operator to approve or reject.</t>
</list></t>

<t>Trust pairs are recorded in the registry and persist across restarts.
Trust is revocable: revoking trust immediately prevents further
communication.</t>

</section>
<section anchor="privacy-model"><name>Privacy Model</name>

<t>Agents are private by default:</t>

<t><list style="symbols">
  <t>A node's physical IP:port is never disclosed in registry responses
unless the node has explicitly opted into public visibility.</t>
  <t>Resolving a private node's endpoint requires one of: (a) the node is
public, (b) a mutual trust pair exists, or (c) both nodes share a
non-backbone network.</t>
  <t>Listing nodes on the backbone (network 0) is rejected by the registry.
Non-backbone networks allow listing since membership is the trust
boundary.</t>
</list></t>

</section>
<section anchor="rate-limiting"><name>Rate Limiting</name>

<t>The registry enforces per-connection sliding window rate limits using a
token-bucket algorithm with per-source tracking. Clients that exceed the
limit receive throttle responses.</t>

<t>Daemons implement SYN rate limiting to mitigate connection flood attacks.</t>

</section>
<section anchor="ipc-security"><name>IPC Security</name>

<t>The daemon's Unix domain socket is created with mode 0600, restricting
access to the socket owner. This prevents unprivileged processes on the
same machine from issuing commands to the daemon.</t>

</section>
</section>
<section anchor="nonce-management"><name>Nonce Management</name>

<section anchor="construction"><name>Construction</name>

<t>AES-256-GCM nonces are 96 bits (12 bytes), constructed as:</t>

<figure><artwork><![CDATA[
+---...---+---...---+
|  Prefix | Counter |
+---...---+---...---+
 4 bytes    8 bytes
]]></artwork></figure>

<dl>
  <dt>Prefix:</dt>
  <dd>
    <t>4 bytes generated from a cryptographically secure random source when
the tunnel session is established. Unique per session with overwhelming
probability.</t>
  </dd>
  <dt>Counter:</dt>
  <dd>
    <t>8-byte unsigned integer, starting at 0, incremented by 1 for each
packet encrypted. The counter <bcp14>MUST NOT</bcp14> be reset within a session.</t>
  </dd>
</dl>

</section>
<section anchor="session-lifecycle"><name>Session Lifecycle</name>

<t>A new tunnel session is established when two daemons perform an X25519
key exchange (PILK or PILA). Each session produces:</t>

<t><list style="symbols">
  <t>A fresh AES-256-GCM key (from the ECDH shared secret)</t>
  <t>A fresh random nonce prefix</t>
</list></t>

<t>Since each session uses a different key, nonces from different sessions
cannot collide (different keys are independent encryption contexts).</t>

</section>
<section anchor="counter-exhaustion"><name>Counter Exhaustion</name>

<t>The 8-byte counter supports 2^64 encryptions per session. Implementations
<bcp14>MUST</bcp14> re-key (initiate a new key exchange) before the counter reaches
2^64 - 1. In practice, at 1 million packets per second, counter
exhaustion would take over 584,000 years.</t>

</section>
<section anchor="application-layer-nonces-port-443"><name>Application-Layer Nonces (Port 443)</name>

<t>Secure connections on port 443 use a separate nonce scheme: a
monotonically increasing 8-byte counter zero-padded to 12 bytes. Each
connection has an independent counter and key derived from its own X25519
handshake.</t>

</section>
</section>
<section anchor="version-negotiation"><name>Version Negotiation</name>

<section anchor="version-field"><name>Version Field</name>

<t>The 4-bit Version field in the packet header identifies the protocol
version. The current version is 1. Version 0 is reserved and <bcp14>MUST NOT</bcp14>
be used.</t>

</section>
<section anchor="handling-mismatches"><name>Handling Mismatches</name>

<t>The initiator includes its protocol version in the SYN packet. The
responder checks the version:</t>

<t><list style="symbols">
  <t>If supported: echoes the same version in SYN-ACK. Both sides use this
version for the connection's lifetime.</t>
  <t>If unsupported: sends RST. No version downgrade negotiation occurs.</t>
</list></t>

<t>For non-SYN packets, if the Version field does not match the connection's
established version, the packet is silently discarded. Implementations
<bcp14>SHOULD</bcp14> log such events at debug level.</t>

</section>
<section anchor="future-extensibility"><name>Future Extensibility</name>

<t>Future protocol versions <bcp14>MAY</bcp14> extend the header format. Implementations
<bcp14>MUST NOT</bcp14> assume a fixed header size based solely on the Version field ---
they <bcp14>SHOULD</bcp14> use the version to determine the expected header layout.</t>

</section>
</section>
<section anchor="path-mtu-considerations"><name>Path MTU Considerations</name>

<section anchor="encapsulation-overhead"><name>Encapsulation Overhead</name>

<t>The total per-packet overhead for encrypted tunnel frames is:</t>

<texttable>
      <ttcol align='left'>Component</ttcol>
      <ttcol align='left'>Size</ttcol>
      <c>PILS magic</c>
      <c>4 bytes</c>
      <c>Sender Node ID</c>
      <c>4 bytes</c>
      <c>GCM nonce</c>
      <c>12 bytes</c>
      <c>Pilot header</c>
      <c>34 bytes</c>
      <c>GCM authentication tag</c>
      <c>16 bytes</c>
      <c><strong>Total</strong></c>
      <c><strong>70 bytes</strong></c>
</texttable>

<t>For plaintext frames (PILT), overhead is 38 bytes (4-byte magic + 34-byte
header).</t>

</section>
<section anchor="effective-payload"><name>Effective Payload</name>

<t>With a typical 1500-byte Ethernet MTU, 20-byte IP header, and 8-byte UDP
header:</t>

<t><list style="symbols">
  <t>Available for Pilot: 1500 - 28 = 1472 bytes</t>
  <t>Encrypted payload capacity: 1472 - 70 = 1402 bytes</t>
  <t>Plaintext payload capacity: 1472 - 38 = 1434 bytes</t>
</list></t>

</section>
<section anchor="mss-selection"><name>MSS Selection</name>

<t>The default MSS of 4096 bytes exceeds single-packet capacity on standard
Ethernet paths. Full-MSS segments will be fragmented into 3 IP fragments.
This is acceptable on most networks but may fail on paths that block IP
fragmentation.</t>

<t>Recommendations:</t>

<t><list style="symbols">
  <t>For Internet-facing deployments where IP fragmentation may be blocked,
an MSS of 1400 bytes avoids fragmentation on virtually all paths.</t>
  <t>For datacenter or local deployments (jumbo frames), the default 4096
MSS is appropriate.</t>
  <t>Implementations <bcp14>SHOULD</bcp14> provide a configurable MSS option.</t>
  <t>Implementations <bcp14>SHOULD NOT</bcp14> set the Don't Fragment (DF) bit on UDP
datagrams, allowing IP-layer fragmentation as a fallback.</t>
</list></t>

</section>
</section>
<section anchor="built-in-services"><name>Built-in Services</name>

<section anchor="echo-port-7"><name>Echo (Port 7)</name>

<t>The echo service reflects any data received back to the sender. It is
used for liveness testing (ping) and throughput benchmarking.</t>

</section>
<section anchor="data-exchange-port-1001"><name>Data Exchange (Port 1001)</name>

<t>A typed frame protocol for structured data. Each frame carries a 4-byte
type tag and a 4-byte length prefix:</t>

<texttable>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>Text</c>
      <c>0x01</c>
      <c>UTF-8 text</c>
      <c>Binary</c>
      <c>0x02</c>
      <c>Raw bytes</c>
      <c>JSON</c>
      <c>0x03</c>
      <c>JSON document</c>
      <c>File</c>
      <c>0x04</c>
      <c>File with name metadata</c>
</texttable>

</section>
<section anchor="event-stream-port-1002"><name>Event Stream (Port 1002)</name>

<t>A publish/subscribe broker. Agents subscribe to named topics and receive
events published by any peer. Wildcard subscriptions (<spanx style="verb">*</spanx>) match all
topics. The wire protocol uses newline-delimited text commands:</t>

<t><list style="symbols">
  <t><spanx style="verb">SUB &lt;topic&gt;</spanx> --- subscribe to a topic</t>
  <t><spanx style="verb">PUB &lt;topic&gt; &lt;payload&gt;</spanx> --- publish an event</t>
  <t><spanx style="verb">EVENT &lt;topic&gt; &lt;payload&gt;</spanx> --- delivered event (broker to subscriber)</t>
</list></t>

</section>
<section anchor="task-submission-port-1003"><name>Task Submission (Port 1003)</name>

<t>A task lifecycle protocol. Agents submit tasks with descriptions, workers
accept or decline, execute, and return results. A reputation score (polo
score) adjusts based on execution efficiency.</t>

</section>
</section>
<section anchor="ipc-protocol"><name>IPC Protocol</name>

<section anchor="framing"><name>Framing</name>

<t>The daemon and driver communicate over a Unix domain socket using
length-prefixed messages:</t>

<figure><artwork><![CDATA[
[4-byte big-endian length][message bytes]
]]></artwork></figure>

<t>Maximum message size: 1,048,576 bytes (1 MB).</t>

</section>
<section anchor="command-set"><name>Command Set</name>

<texttable>
      <ttcol align='left'>Cmd</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Direction</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0x01</c>
      <c>Bind</c>
      <c>Driver -&gt; Daemon</c>
      <c>Bind a virtual port</c>
      <c>0x02</c>
      <c>BindOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Confirm port binding</c>
      <c>0x03</c>
      <c>Dial</c>
      <c>Driver -&gt; Daemon</c>
      <c>Connect to remote agent</c>
      <c>0x04</c>
      <c>DialOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Connection established</c>
      <c>0x05</c>
      <c>Accept</c>
      <c>Daemon -&gt; Driver</c>
      <c>Incoming connection</c>
      <c>0x06</c>
      <c>Send</c>
      <c>Driver -&gt; Daemon</c>
      <c>Send data on connection</c>
      <c>0x07</c>
      <c>Recv</c>
      <c>Daemon -&gt; Driver</c>
      <c>Receive data</c>
      <c>0x08</c>
      <c>Close</c>
      <c>Driver -&gt; Daemon</c>
      <c>Close connection</c>
      <c>0x09</c>
      <c>CloseOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Connection closed</c>
      <c>0x0A</c>
      <c>Error</c>
      <c>Daemon -&gt; Driver</c>
      <c>Error response</c>
      <c>0x0B</c>
      <c>SendTo</c>
      <c>Driver -&gt; Daemon</c>
      <c>Send datagram</c>
      <c>0x0C</c>
      <c>RecvFrom</c>
      <c>Daemon -&gt; Driver</c>
      <c>Receive datagram</c>
      <c>0x0D</c>
      <c>Info</c>
      <c>Driver -&gt; Daemon</c>
      <c>Query daemon status</c>
      <c>0x0E</c>
      <c>InfoOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Status response (JSON)</c>
      <c>0x0F</c>
      <c>Handshake</c>
      <c>Driver -&gt; Daemon</c>
      <c>Trust handshake command</c>
      <c>0x10</c>
      <c>HandshakeOK</c>
      <c>Daemon -&gt; Driver</c>
      <c>Handshake result (JSON)</c>
</texttable>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="crc32-limitations"><name>CRC32 Limitations</name>

<t>The packet checksum uses CRC32 (IEEE polynomial), which detects accidental
corruption but provides no cryptographic integrity. An attacker who can
modify packets in transit can recompute a valid CRC32. Integrity against
active attackers is provided by tunnel-layer AES-256-GCM encryption, which
<bcp14>MUST</bcp14> be used for all Internet-facing deployments.</t>

</section>
<section anchor="anonymous-key-exchange"><name>Anonymous Key Exchange</name>

<t>The PILK key exchange frame provides no identity binding. An active
man-in-the-middle attacker can substitute their own X25519 public key,
establishing separate encrypted sessions with each peer. The PILA
authenticated key exchange (<xref target="authenticated-key-exchange"/>) prevents this
by binding the ephemeral key to an Ed25519 identity. Implementations
<bcp14>SHOULD</bcp14> use PILA whenever an Ed25519 identity is available.</t>

</section>
<section anchor="registry-as-trusted-third-party"><name>Registry as Trusted Third Party</name>

<t>The registry is a centralized trusted third party. Compromise of the
registry could allow:</t>

<t><list style="symbols">
  <t>Address hijacking (reassigning a node's virtual address)</t>
  <t>Locator spoofing (returning incorrect IP:port for a node)</t>
  <t>Public key substitution (enabling identity impersonation)</t>
  <t>Metadata harvesting (enumerating registered nodes)</t>
</list></t>

<t>Mitigations include TLS transport for registry connections, admin token
authentication for write operations, and hot-standby replication for
availability. Future work should explore distributed registry designs
with consensus-based replication.</t>

</section>
<section anchor="gcm-nonce-uniqueness"><name>GCM Nonce Uniqueness</name>

<t>AES-256-GCM security depends critically on nonce uniqueness under the same
key. The nonce construction (<xref target="nonce-management"/>) guarantees uniqueness
through a random prefix (unique per session) and a monotonic counter
(never reset within a session). Since each key exchange produces a new
key, nonces from different sessions are in independent cryptographic
contexts.</t>

<t>Implementations <bcp14>MUST NOT</bcp14> reuse nonces. Implementations <bcp14>MUST NOT</bcp14> reset
the counter within a session. Implementations <bcp14>MUST</bcp14> re-key before counter
exhaustion.</t>

</section>
<section anchor="metadata-exposure"><name>Metadata Exposure</name>

<t>Even with tunnel encryption (PILS), the sender's Node ID is transmitted
in cleartext (it is needed for the receiver to look up the decryption
key). This allows a passive observer to determine which daemons are
communicating, though the content and virtual addressing within the
encrypted payload remain confidential.</t>

</section>
<section anchor="double-congestion-control"><name>Double Congestion Control</name>

<t>Pilot Protocol implements congestion control at the overlay layer, while
the underlay UDP-over-IP path may also be subject to network-level
congestion signals (ICMP source quench, ECN). The overlay congestion
control operates independently, which may lead to suboptimal behavior on
heavily congested paths. This is a known issue shared with all overlay
transport protocols.</t>

</section>
<section anchor="replay-protection"><name>Replay Protection</name>

<t>Tunnel-layer AES-256-GCM provides implicit replay protection: GCM
authentication will fail for replayed packets if the receiver tracks seen
nonces. However, the current specification does not mandate a replay
window. Implementations <bcp14>SHOULD</bcp14> track recently seen nonces and discard
duplicates.</t>

</section>
<section anchor="ipc-as-trust-boundary"><name>IPC as Trust Boundary</name>

<t>The Unix domain socket IPC between daemon and driver is a trust boundary.
The daemon trusts that any process connecting to the socket is authorized
(enforced by filesystem permissions, mode 0600). If an attacker gains
access to the socket, they can impersonate the local agent. Deployments
<bcp14>SHOULD</bcp14> ensure the daemon runs under a dedicated user account.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="pilot-protocol-tunnel-magic-values"><name>Pilot Protocol Tunnel Magic Values</name>

<t>This document requests the creation of a "Pilot Protocol Tunnel Magic
Values" registry with the following initial entries:</t>

<texttable>
      <ttcol align='left'>Magic</ttcol>
      <ttcol align='left'>Hex</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>PILT</c>
      <c>0x50494C54</c>
      <c>Plaintext frame</c>
      <c>PILS</c>
      <c>0x50494C53</c>
      <c>Encrypted frame</c>
      <c>PILK</c>
      <c>0x50494C4B</c>
      <c>Key exchange frame</c>
      <c>PILA</c>
      <c>0x50494C41</c>
      <c>Authenticated key exchange frame</c>
</texttable>

</section>
<section anchor="pilot-protocol-type-values"><name>Pilot Protocol Type Values</name>

<t>This document requests the creation of a "Pilot Protocol Type Values"
registry with the following initial entries:</t>

<texttable>
      <ttcol align='left'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0x01</c>
      <c>Stream</c>
      <c>Reliable, ordered delivery</c>
      <c>0x02</c>
      <c>Datagram</c>
      <c>Unreliable, unordered delivery</c>
      <c>0x03</c>
      <c>Control</c>
      <c>Internal control messages</c>
</texttable>

</section>
<section anchor="pilot-protocol-well-known-ports"><name>Pilot Protocol Well-Known Ports</name>

<t>This document requests the creation of a "Pilot Protocol Well-Known
Ports" registry with the following initial entries:</t>

<texttable>
      <ttcol align='left'>Port</ttcol>
      <ttcol align='left'>Service</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>0</c>
      <c>Ping</c>
      <c>Liveness checks</c>
      <c>1</c>
      <c>Control</c>
      <c>Daemon-to-daemon control</c>
      <c>7</c>
      <c>Echo</c>
      <c>Echo service</c>
      <c>53</c>
      <c>Name Resolution</c>
      <c>Nameserver</c>
      <c>80</c>
      <c>Agent HTTP</c>
      <c>Web endpoints</c>
      <c>443</c>
      <c>Secure</c>
      <c>End-to-end encrypted channel</c>
      <c>444</c>
      <c>Trust</c>
      <c>Trust handshake protocol</c>
      <c>1000</c>
      <c>StdIO</c>
      <c>Text stream</c>
      <c>1001</c>
      <c>DataExchange</c>
      <c>Typed frame protocol</c>
      <c>1002</c>
      <c>EventStream</c>
      <c>Pub/sub broker</c>
      <c>1003</c>
      <c>TaskSubmit</c>
      <c>Task lifecycle</c>
</texttable>

</section>
</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t>Per <xref target="RFC7942"/>, this section documents the known implementations of
Pilot Protocol at the time of writing.</t>

<section anchor="go-reference-implementation"><name>Go Reference Implementation</name>

<dl>
  <dt>Organization:</dt>
  <dd>
    <t>Vulture Labs</t>
  </dd>
  <dt>Description:</dt>
  <dd>
    <t>Complete implementation of Pilot Protocol including daemon, driver SDK,
registry, beacon, nameserver, gateway, and CLI (pilotctl). Implemented
in Go with zero external dependencies.</t>
  </dd>
  <dt>Level of maturity:</dt>
  <dd>
    <t>Production-ready for experimental deployments.</t>
  </dd>
  <dt>Coverage:</dt>
  <dd>
    <t>All features specified in this document are implemented, including
tunnel encryption (PILK/PILA/PILS), SACK, congestion control, flow
control, Nagle's algorithm, automatic segmentation, NAT traversal
(STUN, hole-punch, relay), trust handshake protocol, privacy model,
and all built-in services.</t>
  </dd>
  <dt>Testing:</dt>
  <dd>
    <t>226+ tests (202 PASS, 24 SKIP). Integration tests validated across
5 GCP regions (US Central, US East, Europe West, US West, Asia East)
with both public-IP and NAT-only topologies.</t>
  </dd>
  <dt>Licensing:</dt>
  <dd>
    <t>Proprietary.</t>
  </dd>
  <dt>Contact:</dt>
  <dd>
    <t>calin@vulturelabs.com</t>
  </dd>
</dl>

</section>
<section anchor="python-sdk"><name>Python SDK</name>

<dl>
  <dt>Organization:</dt>
  <dd>
    <t>Vulture Labs</t>
  </dd>
  <dt>Description:</dt>
  <dd>
    <t>Python client SDK using ctypes FFI to the Go shared library. Published
on PyPI as <spanx style="verb">pilotprotocol</spanx>.</t>
  </dd>
  <dt>Level of maturity:</dt>
  <dd>
    <t>Beta.</t>
  </dd>
  <dt>Coverage:</dt>
  <dd>
    <t>Driver operations (dial, listen, accept, send, receive, close),
datagram support, info queries.</t>
  </dd>
  <dt>Licensing:</dt>
  <dd>
    <t>Proprietary.</t>
  </dd>
  <dt>Contact:</dt>
  <dd>
    <t>calin@vulturelabs.com</t>
  </dd>
</dl>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC1982">
  <front>
    <title>Serial Number Arithmetic</title>
    <author fullname="R. Elz" initials="R." surname="Elz"/>
    <author fullname="R. Bush" initials="R." surname="Bush"/>
    <date month="August" year="1996"/>
    <abstract>
      <t>The DNS has long relied upon serial number arithmetic, a concept which has never really been defined, certainly not in an IETF document, though which has been widely understood. This memo supplies the missing definition. It is intended to update RFC1034 and RFC1035. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="1982"/>
  <seriesInfo name="DOI" value="10.17487/RFC1982"/>
</reference>
<reference anchor="RFC5116">
  <front>
    <title>An Interface and Algorithms for Authenticated Encryption</title>
    <author fullname="D. McGrew" initials="D." surname="McGrew"/>
    <date month="January" year="2008"/>
    <abstract>
      <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5116"/>
  <seriesInfo name="DOI" value="10.17487/RFC5116"/>
</reference>
<reference anchor="RFC5681">
  <front>
    <title>TCP Congestion Control</title>
    <author fullname="M. Allman" initials="M." surname="Allman"/>
    <author fullname="V. Paxson" initials="V." surname="Paxson"/>
    <author fullname="E. Blanton" initials="E." surname="Blanton"/>
    <date month="September" year="2009"/>
    <abstract>
      <t>This document defines TCP's four intertwined congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. In addition, the document specifies how TCP should begin transmission after a relatively long idle period, as well as discussing various acknowledgment generation methods. This document obsoletes RFC 2581. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5681"/>
  <seriesInfo name="DOI" value="10.17487/RFC5681"/>
</reference>
<reference anchor="RFC6298">
  <front>
    <title>Computing TCP's Retransmission Timer</title>
    <author fullname="V. Paxson" initials="V." surname="Paxson"/>
    <author fullname="M. Allman" initials="M." surname="Allman"/>
    <author fullname="J. Chu" initials="J." surname="Chu"/>
    <author fullname="M. Sargent" initials="M." surname="Sargent"/>
    <date month="June" year="2011"/>
    <abstract>
      <t>This document defines the standard algorithm that Transmission Control Protocol (TCP) senders are required to use to compute and manage their retransmission timer. It expands on the discussion in Section 4.2.3.1 of RFC 1122 and upgrades the requirement of supporting the algorithm from a SHOULD to a MUST. This document obsoletes RFC 2988. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6298"/>
  <seriesInfo name="DOI" value="10.17487/RFC6298"/>
</reference>
<reference anchor="RFC6928">
  <front>
    <title>Increasing TCP's Initial Window</title>
    <author fullname="J. Chu" initials="J." surname="Chu"/>
    <author fullname="N. Dukkipati" initials="N." surname="Dukkipati"/>
    <author fullname="Y. Cheng" initials="Y." surname="Cheng"/>
    <author fullname="M. Mathis" initials="M." surname="Mathis"/>
    <date month="April" year="2013"/>
    <abstract>
      <t>This document proposes an experiment to increase the permitted TCP initial window (IW) from between 2 and 4 segments, as specified in RFC 3390, to 10 segments with a fallback to the existing recommendation when performance issues are detected. It discusses the motivation behind the increase, the advantages and disadvantages of the higher initial window, and presents results from several large-scale experiments showing that the higher initial window improves the overall performance of many web services without resulting in a congestion collapse. The document closes with a discussion of usage and deployment for further experimental purposes recommended by the IETF TCP Maintenance and Minor Extensions (TCPM) working group.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6928"/>
  <seriesInfo name="DOI" value="10.17487/RFC6928"/>
</reference>
<reference anchor="RFC7748">
  <front>
    <title>Elliptic Curves for Security</title>
    <author fullname="A. Langley" initials="A." surname="Langley"/>
    <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
    <author fullname="S. Turner" initials="S." surname="Turner"/>
    <date month="January" year="2016"/>
    <abstract>
      <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7748"/>
  <seriesInfo name="DOI" value="10.17487/RFC7748"/>
</reference>
<reference anchor="RFC8032">
  <front>
    <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
    <date month="January" year="2017"/>
    <abstract>
      <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8032"/>
  <seriesInfo name="DOI" value="10.17487/RFC8032"/>
</reference>
<reference anchor="RFC8489">
  <front>
    <title>Session Traversal Utilities for NAT (STUN)</title>
    <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
    <author fullname="G. Salgueiro" initials="G." surname="Salgueiro"/>
    <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
    <author fullname="D. Wing" initials="D." surname="Wing"/>
    <author fullname="R. Mahy" initials="R." surname="Mahy"/>
    <author fullname="P. Matthews" initials="P." surname="Matthews"/>
    <date month="February" year="2020"/>
    <abstract>
      <t>Session Traversal Utilities for NAT (STUN) is a protocol that serves as a tool for other protocols in dealing with NAT traversal. It can be used by an endpoint to determine the IP address and port allocated to it by a NAT. It can also be used to check connectivity between two endpoints and as a keep-alive protocol to maintain NAT bindings. STUN works with many existing NATs and does not require any special behavior from them.</t>
      <t>STUN is not a NAT traversal solution by itself. Rather, it is a tool to be used in the context of a NAT traversal solution.</t>
      <t>This document obsoletes RFC 5389.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8489"/>
  <seriesInfo name="DOI" value="10.17487/RFC8489"/>
</reference>
<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC3465">
  <front>
    <title>TCP Congestion Control with Appropriate Byte Counting (ABC)</title>
    <author fullname="M. Allman" initials="M." surname="Allman"/>
    <date month="February" year="2003"/>
    <abstract>
      <t>This document proposes a small modification to the way TCP increases its congestion window. Rather than the traditional method of increasing the congestion window by a constant amount for each arriving acknowledgment, the document suggests basing the increase on the number of previously unacknowledged bytes each ACK covers. This change improves the performance of TCP, as well as closes a security hole TCP receivers can use to induce the sender into increasing the sending rate too rapidly. This memo defines an Experimental Protocol for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="3465"/>
  <seriesInfo name="DOI" value="10.17487/RFC3465"/>
</reference>
<reference anchor="RFC7348">
  <front>
    <title>Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks</title>
    <author fullname="M. Mahalingam" initials="M." surname="Mahalingam"/>
    <author fullname="D. Dutt" initials="D." surname="Dutt"/>
    <author fullname="K. Duda" initials="K." surname="Duda"/>
    <author fullname="P. Agarwal" initials="P." surname="Agarwal"/>
    <author fullname="L. Kreeger" initials="L." surname="Kreeger"/>
    <author fullname="T. Sridhar" initials="T." surname="Sridhar"/>
    <author fullname="M. Bursell" initials="M." surname="Bursell"/>
    <author fullname="C. Wright" initials="C." surname="Wright"/>
    <date month="August" year="2014"/>
    <abstract>
      <t>This document describes Virtual eXtensible Local Area Network (VXLAN), which is used to address the need for overlay networks within virtualized data centers accommodating multiple tenants. The scheme and the related protocols can be used in networks for cloud service providers and enterprise data centers. This memo documents the deployed VXLAN protocol for the benefit of the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7348"/>
  <seriesInfo name="DOI" value="10.17487/RFC7348"/>
</reference>
<reference anchor="RFC7942">
  <front>
    <title>Improving Awareness of Running Code: The Implementation Status Section</title>
    <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
    <author fullname="A. Farrel" initials="A." surname="Farrel"/>
    <date month="July" year="2016"/>
    <abstract>
      <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
      <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="205"/>
  <seriesInfo name="RFC" value="7942"/>
  <seriesInfo name="DOI" value="10.17487/RFC7942"/>
</reference>
<reference anchor="RFC8926">
  <front>
    <title>Geneve: Generic Network Virtualization Encapsulation</title>
    <author fullname="J. Gross" initials="J." role="editor" surname="Gross"/>
    <author fullname="I. Ganga" initials="I." role="editor" surname="Ganga"/>
    <author fullname="T. Sridhar" initials="T." role="editor" surname="Sridhar"/>
    <date month="November" year="2020"/>
    <abstract>
      <t>Network virtualization involves the cooperation of devices with a wide variety of capabilities such as software and hardware tunnel endpoints, transit fabrics, and centralized control clusters. As a result of their role in tying together different elements of the system, the requirements on tunnels are influenced by all of these components. Therefore, flexibility is the most important aspect of a tunneling protocol if it is to keep pace with the evolution of technology. This document describes Geneve, an encapsulation protocol designed to recognize and accommodate these changing capabilities and needs.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8926"/>
  <seriesInfo name="DOI" value="10.17487/RFC8926"/>
</reference>
<reference anchor="RFC9000">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9000"/>
  <seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>
<reference anchor="RFC9300">
  <front>
    <title>The Locator/ID Separation Protocol (LISP)</title>
    <author fullname="D. Farinacci" initials="D." surname="Farinacci"/>
    <author fullname="V. Fuller" initials="V." surname="Fuller"/>
    <author fullname="D. Meyer" initials="D." surname="Meyer"/>
    <author fullname="D. Lewis" initials="D." surname="Lewis"/>
    <author fullname="A. Cabellos" initials="A." role="editor" surname="Cabellos"/>
    <date month="October" year="2022"/>
    <abstract>
      <t>This document describes the data plane protocol for the Locator/ID Separation Protocol (LISP). LISP defines two namespaces: Endpoint Identifiers (EIDs), which identify end hosts; and Routing Locators (RLOCs), which identify network attachment points. With this, LISP effectively separates control from data and allows routers to create overlay networks. LISP-capable routers exchange encapsulated packets according to EID-to-RLOC mappings stored in a local Map-Cache.</t>
      <t>LISP requires no change to either host protocol stacks or underlay routers and offers Traffic Engineering (TE), multihoming, and mobility, among other features.</t>
      <t>This document obsoletes RFC 6830.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9300"/>
  <seriesInfo name="DOI" value="10.17487/RFC9300"/>
</reference>



    </references>

</references>


<?line 1209?>

<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>The author thanks the participants of the IETF AI protocols discussions
for their contributions to the understanding of the agent communication
landscape.</t>

</section>
<section anchor="wire-examples"><name>Wire Examples</name>

<section anchor="syn-packet"><name>SYN Packet</name>

<t>A SYN packet from <spanx style="verb">0:0000.0000.0001</spanx> port 49152 to <spanx style="verb">0:0000.0000.0002</spanx>
port 1000, with no payload:</t>

<figure><artwork><![CDATA[
Byte  0:    0x11         (version=1, flags=SYN)
Byte  1:    0x01         (protocol=Stream)
Byte  2-3:  0x0000       (payload length=0)
Byte  4-5:  0x0000       (src network=0)
Byte  6-9:  0x00000001   (src node=1)
Byte 10-11: 0x0000       (dst network=0)
Byte 12-15: 0x00000002   (dst node=2)
Byte 16-17: 0xC000       (src port=49152)
Byte 18-19: 0x03E8       (dst port=1000)
Byte 20-23: 0x00000000   (seq=0)
Byte 24-27: 0x00000000   (ack=0)
Byte 28-29: 0x0200       (window=512 segments)
Byte 30-33: [CRC32]      (computed over header)
]]></artwork></figure>

<t>Total: 34 bytes.</t>

</section>
<section anchor="data-packet"><name>Data Packet</name>

<t>An ACK data packet with 5-byte payload "hello":</t>

<figure><artwork><![CDATA[
Byte  0:    0x12         (version=1, flags=ACK)
Byte  1:    0x01         (protocol=Stream)
Byte  2-3:  0x0005       (payload length=5)
...
Byte 28-29: 0x01F6       (window=502 segments)
Byte 30-33: [CRC32]      (computed over header + payload)
Byte 34-38: 0x68656C6C6F ("hello")
]]></artwork></figure>

<t>Total: 39 bytes.</t>

</section>
<section anchor="encrypted-tunnel-frame"><name>Encrypted Tunnel Frame</name>

<t>A PILS frame carrying an encrypted Pilot packet:</t>

<figure><artwork><![CDATA[
Byte  0-3:  0x50494C53   (magic="PILS")
Byte  4-7:  0x00000001   (sender node ID=1)
Byte  8-19: [12-byte nonce]
Byte 20+:   [ciphertext + 16-byte GCM tag]
]]></artwork></figure>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
3tvi+9dYwc85/P1/ACR+HdK3pgAA

-->

</rfc>

