I know this is late, but since the thread is still on the internet, and because it’s a common question with very few authoritative answers on the web, it deserves a more complete and concise explanation for those who may stumble into it, even at this late date.
-
You open a browser to pull up a web site, let’s say google.com. In the process of specifying the web site your computer will arbitrarily pick a port number to use as its “source port.” The number will be above 49152 which is the beginning of the “Dynamic, Private, or ephemeral ports” but below 65535 which is the highest port number available. The chosen port number is associated with that browser “instance.”
-
Just for fun, you open a new tab on the browser and also type “google.com” on the url line. Your goal is to have two instances of google.com running because you’re looking for different things. Your computer then chooses a second port number for that session, different from the “source” port it used for the first session. You could, in fact, do this many, many times, and each session will have a unique “source” port associated with each instance.
-
Your packet goes out to google.com, and the destination port number in every instance will be port 80. Web servers “listen” on port 80 for incoming connection requests. For each session with google.com you’ve opened, the destination port, from the perspective of your computer, will always be port 80, but for each instance of connection to google.com on your browser or browsers, the source port will uniquely identify one specific tab on one browser instance, uniquely. This is how they are differentiated on your computer.
-
google.com gets your first request. Its reply will specify port 80 as its source port. Here’s where it gets interesting. Each query google.com received from you will be treated as a “socket,” which is a combination of your IP address, and the specific port number associated with the process that contacted google.com. So, for instance we’ll say your IP address is 165.40.30.12, and the source port number your computer used as its source port for four instances of communications with google.com (let’s say four different tabs all opening google.com) were 61235, 62421, 58392, and 53925. These four “sockets” would then be 165.40.30.12:61235, 165.40.30.12:62421, 165.40.30.12:58392, and 165.40.30.12:53925. Each combination of “IP address:source port number” is unique, and google.com will treat each instance as unique. google.com responds to, and communicates with the “socket,” that is, the combination of IP address and port.
-
Your computer gets its responses from google.com, and sorts them out by what it receives as its destination “socket” which it parses out by port numbers, assigning the response from google.com to the appropriate browser window or tab, as appropriate. No problem from your end of things as you see the correct response in the correct window every time.
-
“But,” you’re thinking, “what if someone else accidentally uses the same port number – let’s say 61235 – as I’ve used for my source number? Doesn’t this confuse google.com?” Not at all, because google.com is tracking “sockets” which are a combination of IP address and port number. Someone else, naturally, and we sincerely hope, is using a different IP address from the one you’re using, let’s say 152.126.11.27, and the combination of IP address and port number are unique – 152.126.11.27:61235 – differentiated by their different IP addresses, even though the port numbers are the same.
-
It doesn’t matter if google.com gets 1000 queries from 1000 users, all using port 80 as their destination port number (the port google.com is listening to for incoming communications) because each of those 1000 users will all have unique IP addresses. google.com tracks its clients by their unique – and they always have to be unique, don’t they? – socket numbers consisting of their IP address and “source” port number. Even if every one of those 1000 clients somehow managed to use the same “source” port number (unlikely to the max), they would still have differing IP addresses, making their source “socket” unique among all of the others.
-
This is all rather simple when you see it explained this way. It makes it clear that a web server can always listen on one port (80) and still differentiate from the various clients. It doesn’t simply look at the IP address it received in the query – you’d think they should all be unique at first blush until you realize you could have more than one web page opened on that web server – but at the source port number, which in combination, make every query unique. I hope this is pretty clear. It’s an elegant system when you think about it, yet simple once you understand it.