Skip to content

Proposal: Native SCION Transport & Multipath Support #3458

Description

@martenwallewein

Hi everyone,

We have developed a native transport for SCION (a path-aware, next-gen Internet architecture) in go-libp2p. We want to align with the core team before opening a PR, as our implementation introduces some unique multipath behaviors.

1. SCION Addressing (Multiaddr)

To enable dialing and listening on SCION, we have defined a new multiaddr format that encapsulates the SCION ISD-AS (Isolation Domain - Autonomous System) identifier.

Format: /scion/<ISD-AS>/<Host-Multiaddr>

Example:
For a node in ISD 19, AS ffaa:1:f, wrapping a standard UDP/IP endpoint:

/scion/19-ffaa:1:f/ip4/10.0.0.1/udp/123

Status:

  • We have registered the codec in multicodec PR #325.
  • We have submitted a PR to implement this in go-multiaddr: multiformats/go-multiaddr#285.
  • Note: The merge of the go-multiaddr PR is currently a blocker for opening our PR against go-libp2p, as the transport relies on validation logic within that library.

2. Multipath Transport (QUIC)
To leverage SCION's multipath capabilities, our transport differs from standard QUIC:

  • Path Pinning: Instead of migrating a single connection, we establish distinct QUIC connections for each available SCION path.
  • Pooling: These connections are pooled to allow upper layers (like Bitswap) to stripe requests across multiple paths simultaneously.
  • Current Code: netsys-lab/go-libp2p/feature/scion-quic-transport, needs to be rebased on newest version of go-libp2p

Questions for Maintainers:

  1. Architecture: Do you see any issues with our "connection pooling" approach (multiple physical connections per logical peer) fitting into the current Transport interfaces?
  2. Dependencies: Since we rely on the unmerged go-multiaddr PR, what is the preferred workflow for proposing the transport implementation here?
  3. External Components: Any concerns regarding a transport that relies on communication with a local daemon (the SCION dispatcher)?

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions