title: Why does internet communication work between two clients?
body: <p>NOTE: my terminology and understanding is most likely incorrect, please educate me!</p>
  <p><strong>TL;DR</strong></p>
  <p>Why can't I connect from one client to another over the internet without port forwarding?<br />
  How is this different from any website / internet-based software which connects two clients together?</p>
  <p><strong>What I have read</strong></p>
  <ul>
  <li><a href="https://stackoverflow.com/questions/32204773/connecting-to-a-known-external-ip-and-internal-ip-without-port-forwarding">It's impossible to connect to a known IP without port forwarding</a></li>
  </ul>
  <blockquote>
  <p>Two solutions - the simplest is a port forwarding rule on his firewall, the second is as you suggest an external server that both clients connect to.</p>
  </blockquote>
  <ul>
  <li><a href="https://www.pythonforthelab.com/blog/how-to-control-a-device-through-the-network/" rel="nofollow noreferrer">Connecting between computers in Python</a></li>
  </ul>
  <blockquote>
  <p>Accessing a computer from outside the local network is possible, but it normally depends on the policy of the institution where you work. The easiest way is to have port forwarding...</p>
  </blockquote>
  <p><strong>My understanding</strong></p>
  <p>A router protects all the client computer fs from outside connections (e.g. firewall). And this prevents two clients from connecting over the internet even if they know each other's IP addresses unless you explicitly tell your router to let them communicate by something like port forwarding.</p>
  <p>I have always thought that websites are just servers running on a computer somewhere. But apparently this isn't correct, since we just established that a server running on a computer cannot connect to another computer over the internet because firewall.</p>
  <ul>
  <li>I (client) can open up a browser, go to a web domain (external IP server), and download a picture.</li>
  <li>But I (server) can't write a program to send a picture to an external IP (client).</li>
  <li>I also (client) can't write a program to connect to an external IP (server) and download a picture from it.</li>
  </ul>
  <p><strong>Questions (looks like a lot but it's repetitive)</strong></p>
  <p>How is an external server that a client connects to (which has an external IP and is accepted through the router's firewall) any different from an external server that a client connects to (which has an external IP but is not accepted through the router's firewall)?</p>
  <p>Essentially what is the difference between my computer running a server and a web domain server (computer).</p>
  <p>What is different about the ISP, router, firewall of a web domain server from my own computer.</p>
  <p>What is the difference between a computer I rent online running my server program which anybody in the world can connect to and my own computer running my server program which nobody can connect to (outside my LAN).</p>
  <p>Why is it impossible for my own computer to run a server which anybody can connect to. What is the difference between a central server and a server on a computer in my LAN?</p>