add section about rendezvous server

master
Christian Ulrich 2020-10-20 00:28:31 +02:00
parent 5459cdee1b
commit 31f09a0a88
No known key found for this signature in database
GPG Key ID: 8241BE099775A097
1 changed files with 3 additions and 0 deletions

View File

@ -8,6 +8,9 @@ The idea is to try out a sequence of well known hole punching techniques until o
- [SYNI](https://www.uni-kassel.de/eecs/fileadmin/datas/fb16/Fachgebiete/UC/papers/HWW_11-SYNI.pdf) (TCP hole punching based on SYN injection), DOI: 10.1109/NCA.2011.66
- [NUTSS](https://www.cs.cornell.edu/people/francis/nutss-fdna.pdf) (TCP hole punching, the non-spoofing approach described in section 4.2.2 of the paper), DOI: 10.1145/1016707.1016715
The assumption of those techniques is that there is a side-channel (i.e. a rendezvous server) between the two hosts. A peer that wants to be available for hole punching needs to constantly be connected (subscribed) to the rendezvous server so it can be notified by other peers about new hole punching attempts. Also it needs to provide its peer ID (e.g. a public key for encryption) and its endpoint (public IP address and port) to other peers before those can initiate the hole punching.
The example applications include a naive rendezvous server implementation which allows any peer to subscribe by registering a peer ID (an arbitrary string) and endpoint information. Other peers can then query that information and send notifications through the server.
# How can I use punchd?
Applications can communicate with ``punchd`` through a unix domain socket (by default ``/tmp/punchd.socket``). An application can call one of ``punchd``'s API functions to either start a hole punching attempt (``initiate``) or react to an attempt started by another peer (``respond``). After calling an API function ``punchd`` will report back a status (either ``ok``, ``progress`` or ``error``). After a successful hole punching attempt, ``punchd`` will pass a socket to the application which can be used immediately to communicate with the other peer. The full ``punchd`` API is described in section ``The punchd API``.