Mit Verlaub, das stimmt nun gar nicht. Ein HTTP-Request beginnt damit, dass das Betreibssystem nach dem socket()-Aufruf auf dem Client (sagen wir, 192.0.2.255) für den Webbrowser einen Client-Port "aufmacht". (Eigentlich macht es ihn nicht richtig "auf", denn andere Rechner können sich nicht auf den Port verbinden.) Die Portnummer wird hierbei in der Regel vom Betriebssystem vergeben; dem Webbrowser ist dieser Client-Port herzlich egal. Jeder neu aufgemachte Client-Port kriegt eine eigene Portnummer. Mit dieser Client-Portnummer, sagen wir mal 12345, schickt der Client, sobald der Client sockaddr_in() und connect() macht, ein SYN-Paket an den Server, sagen wir 192.0.2.255, auf Port 80. Falls der Clientrechner 192.0.2.255 zufällig zum gleichen Zeitpunkt ebenfalls eine Verbindung zu 192.0.2.255 aufmacht (z.B. anderer Browser oder parallele Verbindung), dann kann man die beiden Verbindungen anhand der Client-Portnummern unterscheiden, weil die zweite Verbindung eine andere Client-Portnummer hat, z.B. 12346. Die Antwort des Servers teilt nun gar nichts bezüglich der Ports mit -- der Server schickt sein SYN-ACK an 192.0.2.255, Port 12345 (erste Verbindung) bzw. an Port 12346 (zweite Verbindung) zurück, weil es von dort kam. Er hat keine andere Wahl; alles andere würde zu einem RST führen (oder von der Firewall ignoriert).