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 involves overwriting the IP address and port numbers of packets in the router. A NAT device keeps track of the connections initiated by hosts inside its private network and adds a port mapping for each. Any incoming packet is examined to check if it belongs to a session initiated by one of the hosts inside the private network. The packet is forwarded to the appropriate host if an appropriate mapping exists, otherwise the packet is dropped. 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 STUNT require a public server with global access to assist in discovering the NAT behavior. Other techniques take advantage of NAT configuration protocols such as UPnP IGD to learn the public IP address and add port mappings.
In pCDN, peers receive a list of potential senders from the server. The peer chooses some of these senders, connects to them over TCP, and downloads the requested file. All peers are listening for incoming connections from other peers. If peers are behind NAT, no connection can be established unless the NAT device is configured properly to pass the traffic through. Moreover, the downloading peer needs to know the public IP and external port of the sender. This information should be discovered by each peer through examining the NAT device it is behind, and reporting it to the pCDN server. The pCDN server in turn provides downloading peers with this information.