networkingCan P2P be done without port forwarding

I was making a simple file transfer program through IRC and when I was reading up I saw that IRC when sharing a file creates a direct connection between the two users independent of the server (DCC, Direct Client Connect). After searching a while I have found this: Direct Connect and Advanced Direct Connect.

None of these pages answer this question that I can't get out of my head: Is P2P data transfer possible without any user doing a special port-forward?
An intermediate server which helps set up the connection (as in the IRC examples) is allowed. The data transfer itself must be independent of the server.

Yes - if you can get an external server to forward the connection request for you, there are so-called hole-punching techniques that can be used to set up a direct connection. This technical paper has a more detailed explanation.

Note that these do not necessarily work on all NATs - but they do work on quite a lot of them.

Practical JXTA II (available for reading on Scribd) has a chapter explaining techniques to perform NAT traversal. Hole punching is a subset of techniques to perform NAT traversal.

Related Articles
  • I am designing a p2p application which works on port 30000. My router is not UPnP so I required to forward a port to router. But Skype a another p2p application works without port forwarding on my pc. When I analyzed it with wireshark I found its usi
  • I'm dealing with school programming projects that involve TCP connections over the Internet. I CANNOT use port forwarding on the clients! Having a relay server works. For example, instead of client A connecting to client B and sending data, they both
  • I have a basic Java Client Server TCP Programm which is able to connect over LAN and also when i use my public ip with port forwarding. What bothers me, is that it does not work when i try to use the same programm inside of a hamachi VPN network. I w
  • I am trying to achieve double NAT working with UPNP. My PC connection is as follows: Internet -> Router 1 -> Router 2-> PC I have successfully done port forwarding on the Router 2, but not able to do on router 1. Due to which packets from the ser
  • I am doing a local forwarding to the remote port at 80 which the apache2 is listening on like this ssh -L 80:localhost:80 [email protected] , so it connects me to the remote server, however I find I can still do mkdir rm and such commands. Isn't it so th
  • When I check the logs there are a few rare occasions where for some visitors(bot I think) the $_SERVER['HTTP_HOST'] is returning: www.domain.co.uk:80 What is the correct way to get only the domain name without any ports? Should I be doing it this way
  • I'm using git for a long time now. But I've never used it in a collaborative way. I'm currently setting up a new project and planning a lot of things, among others: how to git? Okay so I've started reading a bit and it was a simple decision to say: F
  • Situation: We have a web application running on a server. This application needs to fetch data from some other PC(Clients), which are on a different network. On the clients' pc there are WCF hosted in Windows Services using its their local Sql db. i
  • I'm trying connect to my Nitrous.IO MySQL server instance using MySQL Workbench on a Windows box (in other words, without port forwarding). These are the steps I've taken without success, maybe someone can point out any mistakes/potential issues? Add
You Might Also Like