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. A NAT device is only able of determining the destination of the incoming traffic if it belongs to a session initiated by one of the hosts inside the private network. Therefore, hosts behind a NAT cannot act as a server. 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.