Network Address Translation (NAT) is a technique that allows multiple hosts on a private network to access the Internet using a single IP address. This usually requires overwriting the IP address and port numbers of outgoing packets in the router. In addition, depending on the NAT type, incoming traffic is blocked unless it belongs to a session initiated by one of the hosts inside the private network. The major drawback is that hosts behind NAT devices are not able to establish connection with one another. This in particular causes problems for P2P applications.
NAT Traversal techniques help in some situations however no single solution exist as NAT behavior is not standardized. Some of the techniques such as STUN require a public server with global access to assist in the connection establishment phase. Other techniques take advantage of NAT configuration protocols such as UPnP.