GithubHelp home page GithubHelp logo

ygina / sidekick Goto Github PK

View Code? Open in Web Editor NEW
6.0 4.0 0.0 35.92 MB

Sidekick protocols are a method for in-network assistance of opaque transport protocols that leaves the transport protocol unmodified on the wire and free to evolve.

License: MIT License

Rust 29.37% Python 65.15% Shell 1.38% HTML 0.76% JavaScript 3.04% CSS 0.31%

sidekick's Introduction

Sidekick

The data sender sends packets using an opaque base protocol to the data receiver. The middlebox, which is on the path, sends quACKs via the sidekick protocol to the data sender

Sidekick protocols are a method for in-network assistance of opaque transport protocols that leaves the transport protocol unmodified on the wire and free to evolve. The sidekick protocol is spoken on an adjacent connection between an end host and a PEP. Sidekick PEPs report their observations on packets in the base connection, and end hosts use this information to influence decisions about how and when to send or resend packets, approximating some of the performance benefits of traditional PEPs.

The repository is organized as follows:

deps/               # scripts for building and installing dependencies
figures/            # scripts for running/graphing experiments in the NSDI '24 paper
http3_integration/  # HTTP/3 file upload client integration
|__curl/
|__quiche/
media_integration/  # low-latency media client integration
mininet/            # two-hop network emulation environment
quack/              # library and microbenchmarks for the quack data structure
sidekick/           # sidekick binary implementations for middleboxes
visualizer/         # web visualizer for sidekick-related quiche debug logs

Getting Started

To reproduce the experiments in the NSDI '24 paper, Sidekick: In-Network Assistance for Secure End-to-End Transport Protocols, first build and install all dependencies according to the instructions here. Our experiments were run on an m4.xlarge AWS instance with a 4-CPU Intel Xeon E5 processor and 16 GB memory, running Ubuntu 22.04, but it should be possible to adapt the instructions for any Linux machine. (These experiments have also been tested on a CloudLab d710 node running Ubuntu 22.04.) Each figure in the paper has a corresponding script, and the instructions can be found here.

For a more minimal installation, install Rust and mininet. Build the media server and client using cargo build --release and run the low-latency media experiment in emulation using python figures/fig4b_low_latency_media.py --execute -t 1. You may need to install some Python and other system dependencies as well.

BibTeX

TODO

Quacknowledgements

This work was supported in part by NSF grants 2045714, 2039070, 2028733, 1931750, 1918056, 1763256, and DGE1656518, DARPA contract HR001120C0107, a Stanford Graduate Fellowship, a Sloan Research Fellowship, and by Google, VMware, Dropbox, Amazon, and Meta Platforms.

sidekick's People

Contributors

ygina avatar

Stargazers

dikshie avatar Yuanlai Zhou avatar Guanzhou Hu avatar Chengke avatar Jiajin LIU avatar EnanaShinonome avatar

Watchers

Keith Winstein avatar Matthew Sotoudeh avatar  avatar Michael Welzl avatar

sidekick's Issues

Document the visualizer

Demonstrate packets that are quacked before they are ACKed
Demonstrate reordering algorithm
Demonstrate quACKs detecting loss from transmission error and ACKs detecting loss from congestion
Visualize header with stats about congestion window, time, etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.