Iván Novick
Si un servidor de socket TCP escucha en el puerto 28081 las conexiones entrantes y luego acepta una conexión y comienza a recibir datos. ¿El puerto al que llegan los datos sigue siendo 28081 o se cambia el puerto?
por ejemplo, ¿a qué puerto llegan los datos entrantes en el pseudocódigo a continuación? ¿Sigue siendo 28081 o el sistema operativo asigna un nuevo puerto?:
bind
listen (on port 28081)
while 1
fd = accept
fork
if child process incoming data
André Holzner
Una conexión TCP se identifica de forma única por dos (IP address, TCP port)
tuplas (una para cada extremo). Entonces, por definición, uno no puede moverse un puerto o dirección IP de una conexión, pero simplemente abra uno diferente.
Si el servidor se vincula al puerto 28081, todas las conexiones aceptadas tendrán este puerto en el lado del servidor (aunque lo más probable es que tengan números de puerto diferentes en el lado del cliente).
Por ejemplo, si dos procesos de la misma máquina cliente se conectarán al mismo servidor, el IP address
y TCP port
en el lado del servidor será el mismo para ambas conexiones. Sin embargo, en el lado del cliente, tendrán dos números de puerto diferentes, lo que permitirá que el sistema operativo de ambos lados identifique de manera única a qué proceso y descriptor de archivo se deben asignar los paquetes TCP recibidos.
-
¿Quién maneja la designación del puerto en el cliente? ¿La capa del sistema operativo reconoce una coincidencia exacta en una conexión existente y asigna dinámicamente la nueva conexión a un nuevo puerto?
– Jesús
7 oct 2010 a las 20:18
-
Jess, no estoy seguro de entender completamente la pregunta. Cuando el cliente abre una nueva conexión al puerto del servidor 28081, se asegura de que usa una dirección de puerto de origen que aún no ha usado para el mismo host y puerto del servidor. Es decir, si tiene una conexión del puerto de origen del cliente 40’000 al puerto del servidor 28081, la próxima conexión podría usar el puerto de origen 40’001 al mismo servidor en el puerto 28081. Esto garantiza que tanto el cliente como el servidor sepan que esto es una nueva conexión porque al menos una de las cuatro cantidades
(client IP address, client TCP port, server IP address, server TCP port)
es diferente.– André Holzner
8 de octubre de 2010 a las 6:24
-
“Una conexión TCP se identifica de forma única por un dos (dirección IP, puerto TCP)” Se define por dos veces que. En ambas máquinas. Si no fuera un servidor, no podría abrir múltiples conexiones en el mismo puerto e IP.
– usuario
13 de enero de 2012 a las 10:02
-
sí, debería quitar la ‘a’ antes del ‘dos’ para que se lea
two ... tuples
.– André Holzner
13 de enero de 2012 a las 19:27
Sí, permanece en ese puerto, aunque algunos protocolos (FTP) pueden abrir una segunda conexión en otro puerto. No piense en un puerto como una ruta física o un enchufe, como un puerto USB que solo puede tener una cosa enchufada. Pero considérelo como un identificador del servicio que se solicita.
Sin embargo, a menudo, la nueva conexión de socket pasa a otro subproceso que maneja las lecturas/escrituras para esa conexión específica.
Puede haber más de un cliente conectado a un puerto, ya que la conexión se identifica por la dirección IP y el puerto del servidor y del cliente. Por lo tanto, aceptar la conexión de un cliente no impide que otros se conecten. Incluso podría conectarse en otro momento desde el mismo cliente (usando otro puerto de cliente).
Véase también esta pregunta.
– Dimitri C.
16 de noviembre de 2010 a las 11:09