8000 GitHub - Pranavh-2004/SCIONMiniNet: Learn SCION architecture hands-on. Run a complete multi-AS network locally with Docker, explore multi-path routing, and experiment with path-aware networking. Inspired by ETH Zurich research.
[go: up one dir, main page]

Skip to content

Learn SCION architecture hands-on. Run a complete multi-AS network locally with Docker, explore multi-path routing, and experiment with path-aware networking. Inspired by ETH Zurich research.

License

Notifications You must be signed in to change notification settings

Pranavh-2004/SCIONMiniNet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SCION MiniNet 🌐

An educational project for learning SCION architecture through hands-on experimentation

Inspired by the groundbreaking research at ETH Zurich and the SCION Association, this project provides a local, containerized SCION network for students, researchers, and developers to explore path-aware networking without needing access to the global SCIONLab testbed.

🎯 Project Goals

  • Learn by Doing β€” Run a complete SCION network locally and see how it differs from traditional BGP-based routing
  • Understand Path-Awareness β€” Experience sender-selected paths, multi-path communication, and instant failover
  • Explore SCION Concepts β€” Isolation Domains (ISDs), beaconing, Trust Root Configurations (TRCs), and cryptographic path validation
  • Safe Experimentation β€” Break links, simulate failures, and observe network behavior without affecting production systems

πŸ”¬ Background

SCION (Scalability, Control, and Isolation on Next-generation Networks) was developed at ETH Zurich as a clean-slate Internet architecture that addresses fundamental security and reliability issues in today's Internet. Unlike BGP, SCION gives end hosts control over their network paths and provides cryptographic guarantees about path authenticity.

This project is not affiliated with ETH Zurich or the SCION Association β€” it's an independent learning resource built on top of the open-source scionproto/scion implementation.

SCION Architecture Docker License

πŸ—οΈ Network Topology

                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚                     SCION Network                        β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                              
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚   ISD 1 (Academic Network)   β”‚         β”‚  ISD 2 (Commercial Network)  β”‚
     β”‚                              β”‚         β”‚                              β”‚
     β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  CORE   β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
     β”‚  β”‚   AS 1-ff00:0:110      │◄─┼────────►┼──│   AS 2-ff00:0:210      β”‚  β”‚
     β”‚  β”‚   (Core AS)            β”‚  β”‚  Link   β”‚  β”‚   (Core AS)            β”‚  β”‚
     β”‚  β”‚   β€’ Control Service    β”‚  β”‚         β”‚  β”‚   β€’ Control Service    β”‚  β”‚
     β”‚  β”‚   β€’ Border Router      β”‚  β”‚         β”‚  β”‚   β€’ Border Router      β”‚  β”‚
     β”‚  β”‚   β€’ SCION Daemon       β”‚  β”‚         β”‚  β”‚   β€’ SCION Daemon       β”‚  β”‚
     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
     β”‚              β”‚ CHILD         β”‚         β”‚              β”‚ CHILD         β”‚
     β”‚              β–Ό               β”‚         β”‚              β–Ό               β”‚
     β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
     β”‚  β”‚   AS 1-ff00:0:111      β”‚  β”‚  PEER   β”‚  β”‚   AS 2-ff00:0:211      β”‚  β”‚
     β”‚  β”‚   (Leaf AS)            │◄─┼────────►┼──│   (Leaf AS)            β”‚  β”‚
     β”‚  β”‚   β€’ Control Service    β”‚  β”‚  Link   β”‚  β”‚   β€’ Control Service    β”‚  β”‚
     β”‚  β”‚   β€’ Border Router      β”‚  β”‚         β”‚  β”‚   β€’ Border Router      β”‚  β”‚
     β”‚  β”‚   β€’ SCION Daemon       β”‚  β”‚         β”‚  β”‚   β€’ SCION Daemon       β”‚  β”‚
     β”‚  β”‚   β€’ End Host (host-111)β”‚  β”‚         β”‚  β”‚   β€’ End Host (host-211)β”‚  β”‚
     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
     β”‚                              β”‚         β”‚                              β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

     Available Paths from host-111 to host-211:
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     Path 1 (Direct):     111 ──PEER──► 211
     Path 2 (Via Cores):  111 ──PARENT──► 110 ──CORE──► 210 ──CHILD──► 211

πŸš€ Quick Start

Prerequisites

  • Docker & Docker Compose
  • Bash shell
  • ~2GB disk space for SCION images

Launch the Network

# 1. Clone this repository
git clone <repo-url> && cd SCIONMiniNet

# 2. Generate configuration files
make setup

# 3. Start the network
make up

# 4. Wait for convergence (~20 seconds)
sleep 20

# 5. Explore paths between ASes
make paths

# 6. Send ping across the network
make ping

πŸ“Έ Screenshots

GUI Visualizer (make visualizer)

Network Topology AS Details Path Discovery
Topology AS Details Paths
Container Status Ping Test
Status Ping

Terminal Commands

Setup & Start Path Discovery
Setup Paths
Container Status SCION Ping
Status Ping

πŸ“– SCION Fundamentals

This project teaches these core SCION concepts:

🏒 Isolation Domains (ISDs)

ISDs are administrative regions that manage trust and routing policies. Our topology has:

  • ISD 1: Academic Network (AS 110, AS 111)
  • ISD 2: Commercial Network (AS 210, AS 211)

πŸ”— AS Relationships

  • CORE: Links between core ASes (backbone)
  • CHILD/PARENT: Hierarchical provider-customer links
  • PEER: Direct connections between non-hierarchical ASes

πŸ›€οΈ Path Discovery

Unlike BGP, SCION endpoints discover ALL available paths and choose which to use:

make paths   # See all paths from AS111 to AS211

πŸ“¦ Packet-Carried Forwarding State (PCFS)

Each SCION packet carries its complete path in the header. Routers don't need routing tablesβ€”they just follow the embedded path.

🎯 Path Selection

The sender (not the network) chooses the path based on:

  • Latency requirements
  • Bandwidth needs
  • Trust/jurisdiction constraints
  • Failover policies
make interactive  # Manually select a path and ping over it

πŸ› οΈ CLI Tools

Command Description
make paths Show all available paths from AS111 to AS211
make ping Send SCMP echo requests
make measure Measure latency on each path
make interactive Interactive path selection and ping
make shell-111 Shell into host in AS 1-ff00:0:111
make shell-211 Shell into host in AS 2-ff00:0:211

πŸ§ͺ Experiments

1. Link Failure & Failover

# Break the core link by stopping AS110's router
make break-link ROUTER=router-110

# Observe: only the PEER path remains
make paths

# Restore the link
make restore-link ROUTER=router-110

2. Path Latency Comparison

# Measure RTT on all available paths
make measure

# Compare: which path is faster?
# The PEER link (111β†’211) should be faster than via cores

3. Multi-Path Transfer

# Open two terminals and send traffic on different paths
# Terminal 1:
make shell-111
scion ping 2-ff00:0:211 -c 100

# Terminal 2:
make shell-211
scion ping 1-ff00:0:111 -c 100

πŸ“ Project Structure

SCIONMiniNet/
β”œβ”€β”€ Makefile                 # All commands
β”œβ”€β”€ README.md               # This file
β”œβ”€β”€ docker-compose.yml      # Container orchestration
β”œβ”€β”€ topology/
β”‚   └── topology.topo       # SCION topology definition
β”œβ”€β”€ scripts/
β”‚   β”œβ”€β”€ setup.sh           # Generates configs
β”‚   └── cleanup.sh         # Removes generated files
β”œβ”€β”€ bin/
β”‚   β”œβ”€β”€ scion-paths        # Path discovery
β”‚   β”œβ”€β”€ scion-ping         # SCMP ping
β”‚   β”œβ”€β”€ scion-measure      # Latency measurement
β”‚   └── scion-interactive  # Interactive explorer
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ CONCEPTS.md        # SCION deep-dive
β”‚   └── EXPERIMENTS.md     # Guided experiments
└── gen/                   # Generated configs (gitignored)

πŸ”§ Modifying the Topology

Edit topology/topology.topo to add ASes or links:

ASes:
  "1-ff00:0:112":              # Add a new AS
    cert_issuer: 1-ff00:0:110
    mtu: 1472

links:
  # Add new link
  - {a: "1-ff00:0:111#3", b: "1-ff00:0:112#1", linkAtoB: PEER}

Then regenerate and restart:

make clean
make setup
make up

🀝 Extending to Multi-Path Transfers

SCION applications can use multiple paths simultaneously:

  1. Discover paths: Query the daemon for all available paths
  2. Distribute traffic: Split data across paths based on capacity
  3. Handle failures: Automatically failover when a path breaks

See docs/EXPERIMENTS.md for a multi-path implementation guide.

πŸ“š Further Reading

πŸ› Troubleshooting

Paths not showing?

# Wait for beacon propagation
sleep 30 && make paths

Containers not starting?

# Check Docker status
docker compose ps
docker compose logs

Permission denied?

chmod +x scripts/*.sh bin/*

πŸ“„ License

MIT License - See LICENSE for details.


Built for learning SCION fundamentals through hands-on experimentation.

About

Learn SCION architecture hands-on. Run a complete multi-AS network locally with Docker, explore multi-path routing, and experiment with path-aware networking. Inspired by ETH Zurich research.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0