Data Plane

The data plane handles the exchange of application data between Zenoh entities. It consists of two independent flows: pub/sub (push) and request/reply (query).

Push Flow (Pub/Sub)

Publisher         Router(s)          Subscriber
     |                |                   |
     |─ PUSH(PUT) ───>|─── PUSH(PUT) ────>|   publish value
     |                |                   |
     |─ PUSH(DEL) ───>|─── PUSH(DEL) ────>|   delete resource

A PUSH message delivers a value (PUT) or a deletion notification (DEL) to all matching subscribers. On the default transport it is carried inside a FRAME transport message; negotiated low-latency unicast may serialize the network message directly.

Query/Reply Flow

Querier           Router(s)          Queryable
     |                |                   |
     |─ REQUEST ─────>|──── REQUEST ─────>|   query
     |                |                   |
     |<─ RESPONSE ────|<──── RESPONSE ────|   zero or more replies
     |<─ RESPONSE ────|<──── RESPONSE ────|
     |<─ RESP_FINAL ──|<──── RESP_FINAL ──|   end of replies

A REQUEST message queries all matching Queryables. Each Queryable responds with zero or more RESPONSE messages followed by a RESPONSE_FINAL that marks the end of its replies.

Message Nesting

Data-plane messages are nested across three layers:

Transport:  FRAME (seq_num, channel)
Network:      PUSH / REQUEST / RESPONSE / RESPONSE_FINAL
Data:           PUT / DEL / QUERY / REPLY / ERR

In negotiated low-latency unicast mode, the transport layer may serialize the network message directly instead of wrapping it in FRAME/FRAGMENT.

See Message Reference for the complete byte-level reference.