Czy po otwarciu połączenia TCP zostają przeniesione na inny port? [duplikat]

To pytanie ma już odpowiedź tutaj:

Jeśli serwer gniazda TCP nasłuchuje na porcie 28081 połączeń przychodzących, a następnie akceptuje połączenie i zaczyna odbierać dane. Czy port, do którego dane trafiają, jest nadal 28081, czy też port zostaje zmieniony.

Dla przykład do jakiego portu trafiają przychodzące dane w poniższym pseudo kodzie? Czy nadal jest to 28081, czy system operacyjny przypisuje Nowy port?:

bind
listen (on port 28081)

while 1
  fd = accept
  fork
  if child process incoming data 
Author: caf, 2010-09-03

3 answers

Połączenie TCP jest jednoznacznie identyfikowane przez dwie krotki (IP address, TCP port) (po jednej dla każdego punktu końcowego). Tak więc z definicji, nie można przenieść portu lub adresu IP połączenia, ale po prostu otworzyć inny.

Jeśli serwer połączy się z portem 28081, wszystkie akceptowane połączenia będą miały ten port po stronie serwera (chociaż najprawdopodobniej będą miały różne numery portów po stronie klienta).

Na przykład, jeśli dwa procesy z tej samej maszyny klienckiej połączą się z tym samym serwerem, IP address i TCP port Po stronie serwera będą takie same dla obu połączeń. Po stronie klienta będą jednak miały dwa różne numery portów, co umożliwi systemowi operacyjnemu po obu stronach jednoznaczne określenie, do którego procesu i deskryptora plików powinny być przypisane otrzymane pakiety TCP.

 33
Author: Andre Holzner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-19 16:26:27

Tak, pozostaje na tym porcie, chociaż niektóre protokoły (FTP) mogą otworzyć drugie połączenie na innym porcie. Nie myśl o porcie jako fizycznej ścieżce lub wtyczce, jak port USB, który może mieć tylko jedną rzecz podłączoną do niego. Ale raczej pomyśl o tym jako o identyfikatorze żądanej usługi.

Często jednak nowe połączenie gniazda jest przekazywane do innego wątku, który obsługuje odczyt/zapis dla tego konkretnego połączenia.

 4
Author: GrandmasterB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-03 19:33:22

Do jednego portu może być podłączonych więcej niż jeden klient, ponieważ połączenie jest identyfikowane zarówno przez adres IP serwera, jak i klienta oraz port. Tak więc akceptacja połączenia od jednego klienta nie blokuje innym połączenia. Możesz nawet połączyć się innym razem z tego samego klienta (używając innego portu klienta).

 1
Author: Frank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-03 19:42:32