I have made a few TCP/IP based programs in the past. One of the requirements my program had was to open up the required port in the user's router.

How does MSN / AIM / Google Talk etc.. communicate with a server without making me open the required port in my router? Does it not need a new port to be opened? If so, how do I do the same?