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 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.