NAT Traversal
Note: work in progress
Overview
NAT (Network Address Translation) is widely used to connect private networks to the internet. The main idea is to map several private IP addresses to only one public IP address. Having in mind that P2P network clients should be able to communicate with each other one basic question comes into mind: how can internet hosts communicate with a host in a private network? We will first have a look at NAT itself and problems it brings. Then, we show how to traverse NATs by either changing their configuration or by using other tricks.
Network Address Translation
A network address is simply the IP + Port number (for UDP/TCP). A NAT router receives an incoming IP packet, saves the address in its NAT table, rewrites sender address to one of its own public addresses and sends the packet to the destination. Incoming packets accepted on this public address are forwarded to the private host sending the first request after rewriting the destination address back to the private host's address.
IMG (general configuration + NAT communication)
Four NAT types: - Full Cone - Restricted Cone - Port Restricted Cone - Symmetric
router configuration
Port forwarding
UPnP
STUN
TURN
Hole punching
Text