Czy ServerSocket akceptuje gniazdo zwrotne w dowolnym porcie?

Widziałem wiele odpowiedzi podobnych do tej dotyczącej serwerów w java: „Powiedzmy, że masz serwer z serwerem na porcie 5000. Klient A i klient B będą łączyć się z naszym serwerem.

Klient A wysyła żądanie do serwera na porcie 5000. Port po stronie klienta A jest wybierany przez system operacyjny. Zwykle system operacyjny wybiera następny dostępny port. Punktem wyjścia dla tego wyszukiwania jest poprzednio używany numer portu + 1 (więc na przykład, jeśli system operacyjny stał się ostatnio portem 45546, system operacyjny spróbowałby wówczas 45547).

Zakładając, że nie występują problemy z połączeniem, serwer odbiera żądanie klienta A, aby połączyć się z portem 5000. Następnie serwer otwiera własny następny dostępny port i wysyła go do klienta. W tym przypadku klient A łączy się z nowym portem, a serwer ma ponownie dostępny port 5000. ”

Widziałem takie odpowiedzi w wielu pytaniach na temat stackoverflow o tym, jak inny port jest używany w zwracanym gnieździe accept () niż port, na którym nasłuchuje ServerSocket. Zawsze miałem wrażenie, że TCP jest identyfikowany przez kwartet informacji:

IP klienta: port klienta i IP serwera: port serwera -> również protokół (aby odróżnić TCP od UDP)

Dlaczego więc accept () musi zwrócić gniazdo powiązane z innym portem? Czy kwartet informacji wysyłanych w każdym nagłówku nie rozróżnia wielu połączeń z tym samym portem serwera z różnych maszyn na tyle, że nie musiałby korzystać z różnych portów na serwerze do komunikacji?

questionAnswers(2)

yourAnswerToTheQuestion