Skip to content

Conversation

@SpencerDawkins
Copy link
Collaborator

Closes #21
supersedes #30

@SpencerDawkins
Copy link
Collaborator Author

@alvestrand and @rshpount, this PR replaces #30, and OUGHT to address your comments on that PR. Thank you for your help!

The profiles defined in {{rtp-protos}} assume that if an application needs to perform NAT traversal, the endpoints will perform ICE procedures as described in {{!RFC8445}} to gather and prioritize candidate pairs, and will then select candidate pairs that can be included in SDP media lines, as described in {{rtp-protos}}.
The profiles defined in {{rtp-protos}} assume that if an application needs to perform NAT traversal, the RoQ endpoints will perform ICE procedures as described in {{!RFC8445}} to gather and prioritize candidate pairs, and will then select candidate pairs that can be included in SDP media lines, as described in {{rtp-protos}}.

The RoQ endpoints need to negotiate a suitable candidate pair that can provide a UDP path, in order to open a QUIC connection and use RoQ. This is necessary because RoQ packets are encapsulated in QUIC packets, which are encapsulated in UDP packets. If no candidate pair suitable for UDP can be negotiated, fallback to another transport protocol might be a useful alternative (for example, {{?RFC4571}} framing using a TCP candidate port pair).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ROQ endpoint needs to be represented in a way that prevents matching up with an UDP candidate - an UDP candidate expects to match up with an endpoint sending / receiving raw RTP packets.

The easiest way to do this is to define a new "proto" field in the candidate (instead of "udp", "tcp" and "tls") of "roq" or "quic".


The RoQ endpoints need to negotiate a suitable candidate pair that can provide a UDP path, in order to open a QUIC connection and use RoQ. This is necessary because RoQ packets are encapsulated in QUIC packets, which are encapsulated in UDP packets. If no candidate pair suitable for UDP can be negotiated, fallback to another transport protocol might be a useful alternative (for example, {{?RFC4571}} framing using a TCP candidate port pair).

ICE procedures are performed outside of RoQ, relying on {{!RFC9443}} multiplexing, which allows RoQ endpoints to distinguish QUIC packets from STUN and TURN packets (among other protocols) that can also arrive on the same UDP port.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that QUIC still doesn't have peer-to-peer exensions specified, we might want to mention that the client end of the connection will have to specify port 9 (discard) - meaning that it can do outgoing QUIC but not incoming QUIC over this UDP port pair.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve guidance on how ICE should work with RoQ

3 participants