> Say for example: I have two servers on my local network both having port 80 forwarded. If I try to connect to through my public IP, how does it know which server I want to connect to?
You'll use a reverse proxy for this kind of setup, so that it takes the connection to port 80 and uses some kind of logic (in this case, probably the URL) to determine which server to connect it to. So there's only one server forwarded from port 80 (the reverse proxy) and two servers forwarded from behind that.
> Or, if you host two different things on two different ports on a single server, how does someone connecting to my public IP know which specific port to enter?
If it's not a standard service port (80 for HTTP, 22 for SSH, etc..), you'll have to tell them which port to enter (since you have security setup so that they can't just scan for open ports, right?)
Back in the day, O'Reilly's "Animal" books were the gold standard for learning about *Nix and Networking. They're dense, but if you want to learn the nitty gritty details, they can't be beat. For TCP/IP, it's the Crab Book