GSoC 2015: NAT traversal using UDP hole punching Timeline

jellysheep edited this page Sep 18, 2015 · 27 revisions

Timeline of the GSoC 2015 project: NAT traversal using UDP hole punching

Before and during the coding period:

  • Study and get to know the P2PSP protocols and code, especially the class inheritance system and NAT traversal documentation.
  • Study on various methods for NAT traversal, especially on port prediction techniques for symmetric NAT traversal.

Week 1

  • Setup virtual machines to simulate network situtations and configure network interfaces with different NAT types.

Week 2

  • Test UDP hole punching on the test network for different NAT combinations.

Week 3

  • Develop an UDP NAT Traversal test program nts_tests (commits).

Week 4

  • Add NTS classes and implement NTS algorithms 1 and 2 (commits).

Week 5

  • Avoid nested instances in all peer classes by setting their type (commit).
  • Develop a NAT traversal testing script for P2PSP classes (commits).
  • Investigate odd NAT traversal results (e.g. FCN<->SYM).

Week 6

  • Add documentation on NAT traversal testing (commits 1, 2, 3).
  • Adapt NAT traversal testing script to have the monitor on the same host as the splitter (commit).
  • Check if chunks are received between each of the instances (splitter, monitor, peers) (commit).
  • Adapt peer to connect to splitter instead of (commit).

Week 7

  • Add local source server to NAT testing script (commit).
  • Add network simulation setup details to the documentation (commits).
  • Add iptables rules to test different NAT types, with symmetric NAT subtypes (commits).
  • Improve inheritance and overriding possibilities of the process_next_message method (commit).

Week 8

  • Adapt Peer_NTS to changed packet handling method (commit).
  • Add peer ID generation and sending to NTS classes (commits).

Week 9

  • Extend NTS peer and monitor to send packets continuously to peers and splitter until a reply is received in case packets get lost (commits).
  • Add peer list transmission and hello packets between peers (commit).

Week 10

  • NTS Test script: Detect connection success via NAT entries; execute several test runs and output success rate (commits).
  • Add sequential port prediction (commit).

Week 11

  • Adapt NTS splitter and peer to limit the number of arriving peers by removing them after a timeout (commits).
  • Move port prediction to Peer_NTS and extend Peer_NTS to send to different probable next source ports of other peers (commit).
  • Handle peer arrival with an existing peer behind a sequentially allocating NAT (commit).

Week 12

  • Implement workaround to force wanted SYMSP behaviour (commit).
  • Extend NTS peer to send feedback about the source port step of other peers to the splitter (commit).
  • Make NTS peers retry to join the team if some P2P connections do not work (commit).
  • Extend P2PSP to use more than one monitor peer for more accurate source port step detection in the NTS classes (commits 1, 2, 3).
  • Adapt NTS classes to store the currently allocated source port of incorporated peers behind SYMSP NATs (commit).
  • Add script to setup network with NATs using Linux network namespaces (commit).

Week 13

  • Add better source port prediction algorithm (commit).
  • Extend test script to support parallel test runs (commit).
  • Make peers SYMSP NATs reconnect to monitor to determine the currently allocated source port when a new peer is arriving (commit).
  • Add NAT traversal methods with sequence diagrams to the documentation (commits).
  • Add developed testing scripts to automatically run teams and filter output to the repo (commit).
  • Add final test results to the documentation (commit).
  • Clean up the code, apply python coding guidelines and add more comments (commits).
  • Implement congestion avoidance for splitter messages (commits).


All done :)

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.