Skip to content

per-path datagram ceiling: relay/WebRTC have no physical 1200 B MTU, and max-datagram-size changes when connection.path moves #47

Description

@lann

Deferred from wosh's datagram-surface evaluation (our finding 14, riding your #3 family) with "file when the need is concrete" — the WebRTC upgrade path made it concrete.

Two related observations

  1. The 1200 B MTU profile is synthetic on non-UDP paths. wosh runs mosh SSP over send-datagram/recv-datagram. A stock C mosh-server emits 1252 B datagrams, over the observed ~1162 B application ceiling, so our proxy sub-frames oversized server datagrams through the tunnel (fragmentation working around a ceiling that exists only by profile). On the relay path (websocket frames) and the WebRTC path (SCTP messages) there is no physical 1200 B MTU — both wires carry larger application messages natively. A per-path ceiling would let relay/WebRTC consumers skip the fragmentation tax entirely, while UDP keeps the QUIC datagram bound.

  2. max-datagram-size is already path-dependent in time. With the upgrade live (post-endpoint: event-driven wakeups replace the bounded-polling pump #44 endpoints; both sides enable endpoint-options.webrtc, dialer offers the webrtc addr hint), a relay-dialed connection migrates to the data channel in the background and connection.path moves — a consumer that sized to the dial-time value now under-uses (or over-estimates) the wire. wosh re-polls opportunistically, but nothing in the WIT says the value can move.

Ask

Either expose per-path ceilings (e.g. max-datagram-size documented as "for the CURRENT path; re-read after connection.path changes" plus raising the synthetic ceiling on relay/webrtc), or an explicit capability read keyed by path-kind. Even just the doc ruling ("the value is path-dependent and not latched") would remove the ambiguity; raising the non-UDP ceilings is the part that buys real throughput for datagram protocols with >1200 B frames.

Context for sizing: mosh's worst-case wire datagram is payload+38 B; we patched our engine's fragment payload 1300→1100 to fit the current ceiling (1338→1138 B), verified wire-compatible against C mosh-server 1.4.0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions