Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement simple path measurements and path selection #55

Open
6 tasks
mlegner opened this issue Nov 28, 2023 · 4 comments
Open
6 tasks

Implement simple path measurements and path selection #55

mlegner opened this issue Nov 28, 2023 · 4 comments
Assignees
Milestone

Comments

@mlegner
Copy link
Contributor

mlegner commented Nov 28, 2023

  • Measure aliveness and latency of paths
    • In the Go implementation, this is done via a traceroute to the final hop, see here
  • Choose path based on latency, path length (?)
  • Ideally shared among multiple sockets/connections of the same application
  • Potential optimization: Use RTT measurements of upper-layer protocol (i.e., QUIC).
  • Question: Should this instead be handled by the SCION Daemon?
  • Question: How to choose between IP and SCION?
    - Always choose SCION if it is available?
    - Compare performance?

Probably depends on #54

@mlegner mlegner added this to the MVP milestone Nov 28, 2023
@jpcsmith
Copy link
Contributor

Some thoughts on the implementation.

As an alternative to wrapping the socket, we could define and implement the trait PathAwareDatagramSocket on UdpSocket and move the methods that are related to path persistence to it:

trait PathAwareDatagramSocket {
  fn path();
  fn set_path();
  fn set_path_service(PathService);
  fn send_to();
  fn send();
  // Method to propagate paths from recvs to PathService
  fn on_received_path();
}

@mlegner
Copy link
Contributor Author

mlegner commented Jan 26, 2024

General path selection mechanisms are implemented now. More strategies, e.g., based on measurements will be added in the next version.

@mlegner mlegner modified the milestones: v0.1, v0.2 Jan 26, 2024
@jpcsmith jpcsmith self-assigned this Jan 31, 2024
@jpcsmith
Copy link
Contributor

jpcsmith commented Jan 31, 2024

@mlegner The pan implementation in golang seems to use Ping instead of traceroute to select paths. Do we want to use the same approach?

The upside: we would be including the delay in the destination AS in the measurements.
The downside: Measurements are done per-destination and so cannot be shared between different destinations in the same AS.

@mlegner
Copy link
Contributor Author

mlegner commented Jan 31, 2024

The pan implementation in golang seems to use Ping instead of traceroute to select paths. Do we want to use the same approach?

Yes, I became aware of that as well. The aliveness check (e.g., for scion showpaths) uses traceroute while the path selection in pan uses pings. In the current deployments, there is probably very little difference between the two in terms of measurement results as we usually have very small source and destination ASes.

I don't have a strong opinion but would probably go with the traceroute approach to start with.

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

No branches or pull requests

2 participants