SCION Address URI encoding
- Author: Dominik Roos 
- Last updated: 2020-09-02 
- Status: Active 
- Discussion at: - 
Abstract
Certain libraries and applications rely on addresses encoded in an URI format. This document defines a URI syntax for encoding SCION addresses.
Schemes
The SCION control plane uses two mechanisms to establish a QUIC/SCION connection. If the client knows the exact address the server is listening for QUIC/SCION connections on, it can directly establish the connection.
For cases where the QUIC port cannot be known before hand, e.g., anycast to an svc address, the server will deploy a redirect endpoint. This endpoint runs on UDP/SCION, and redirects requests to the QUIC endpoint.
To distinguish the two cases, we employ two different schemes.
scion
The scion scheme indicates, that the client should directly dial a
QUIC/SCION connection to the specified authority.
The scheme syntax is defined as follows:
scion://host[:port][/path]
Example:
scion://[1-ff00:0:110,192.0.2.1]:30652
scion://[1-ff00:0:110,2001:DB8::1]:30652
scion+udp
The scion+udp scheme indicates, that the client should attempt to query a
redirect over UDP/SCION, and establish a QUIC/SCION connection on the resolved
address.
The scheme syntax is defined as follows:
scion+udp://host[:port][/path]
Examples:
scion+udp://[1-ff00:0:110,2]
scion+udp://[1-ff00:0:110,192.0.2.1]:30252
scion+udp://[1-ff00:0:110,2001:DB8::1]:30252
Extensions to RFC 3986
RFC 3986 defines a host with the following ABNF:
host          = IP-literal / IPv4address / reg-name
IP-literal    = "[" ( IPv6address / IPvFuture  ) "]"
IPvFuture     = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
We extend the definition of IP-literal with a SCIONAddress:
IP-literal    = "[" ( SCIONAddress / IPv6address / IPvFuture  ) "]"
SCIONAddress  = ISD "-" AS "," ( IPv4address / IPv6address / SvcAddress )
ISD           = 1*DIGIT
AS            = (1*4HEXDIG ":" 1*4HEXDIG ":" 1*4HEXDIG) / 1*DIGIT
SvcAddress    = dec-octet
Some examples of a valid extended IP-literal:
[1-ff00:0:110,192.0.2.1]
[1-ff00:0:110,2001:DB8::1]
[1-64496,2001:DB8::1]
[1-64496,2]
[2001:DB8::1]
See RFC 3986, Appendix A for all the rules that are not defined here.
Considered alternatives
We chose to extend the definition of IP-literal similar to RFC 6874. We considered the following
alternatives in the process.
Using IPvFuture
Instead of extending the IP-literal definition, we could utilize the
IPvFuture and allocate a version number to SCION. However, SCION unaware
applications will fail to parse URIs, since they do not know the version number.
Without obvious benefit, this would introduce a constant and redundant prefix
that needs to be included in every URI.
Encode ISD-AS and IP in reg-name
We could encode the ISD-AS and IP address in the host as a reg-name. The
drawback is, that neither :, nor [] are valid characters in
reg-name. They either need to be percent encoded, or replaced with a
different character. Both of these options are suboptimal for readability.
Encode address as path
We could encode a SCION address as an absolute path. For example:
scion:/1-ff00:0:110/2001:DB8::1/30652. The drawback is, that this notation
is very unfamiliar. We loose the concept of what is the authority and what is
the path.