Skip to content

overview

Jared Fowler edited this page Apr 10, 2018 · 1 revision

Overview

awl is a module for connecting peers that are both behind a p2p friendly NAT;

  • a rendezvous server Ṟ -- globally available IP addr -- listens for UDP connections

  • Ṟ connects two peers A → B;

    • If A wants to connect to B, A pings Ṟ and receives a response from Ṟ with B's IP/PORT info (B[IP]:B[PORT])

    • A then sends a packet to B[IP]:B[PORT], which opens that port on A's NAT but is blocked by B's NAT.

    • B does the same: msg request for A[IP]:A[PORT] → Ṟ → A[IP]:A[PORT] to B. B requests to A[IP]:A[PORT]. A receives this message because its NAT has been opened at B's PORT. \0/

  • the awl client sends a request to awl service with destination IP and Hosts hashed.

    • crafty nats that look for IP-like data can't read it
    • maintain request & dest data privacy during hole punching
  • awl rendezous service and clients handle

    1. direct actual peer to peer connections (peers behind on the same LAN, behind same NAT, peers with global public IP addr)
    2. connection where peer 1 is behind a NAT, peer 2 is publicly available.
    3. port collisions

TODO

  • use the bryanosaurus paper and/or dat to clarify "p2p" friendly.

Clone this wiki locally