2010-09-03 12 views
26

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 en el que están entrando los datos sigue siendo 28081 o cambia el puerto?¿Las conexiones TCP se mueven a otro puerto después de que se abren?

por ejemplo, ¿a qué puerto llegan los datos entrantes en el pseudo código siguiente? ¿Sigue siendo 28081 o no el sistema operativo asigne un nuevo puerto ?:

bind 
listen (on port 28081) 

while 1 
    fd = accept 
    fork 
    if child process incoming data 
+0

Ver también [esta pregunta] (http://stackoverflow.com/questions/2997754/does-the-port-change-when-a-tcp-connection-is-accepted-by-a-server). –

Respuesta

32

Una conexión TCP está identificada de forma exclusiva por dos tuplas (IP address, TCP port) (una para cada punto final). Entonces, por definición, uno no puede mover un puerto o dirección IP de una conexión, sino simplemente abrir uno diferente.

Si el servidor se une al puerto 28081, todas las conexiones aceptadas tendrán este puerto en el lado del servidor (aunque lo más probable es que tengan diferentes números de puerto en el lado del cliente).

Por ejemplo, si dos procesos de la misma máquina cliente se conectarán al mismo servidor, IP address y TCP port en el lado del servidor serán los mismos para ambas conexiones. Sin embargo, en el lado del cliente, tendrán dos números de puerto diferentes que permitirán que el sistema operativo en ambos lados identifique de forma exclusiva a qué proceso y qué descriptor de archivo deben asignarse los paquetes TCP recibidos.

+1

¿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? – Jess

+1

Jess, no estoy seguro de entender completamente la pregunta. Cuando el cliente abre una nueva conexión al puerto 28081 del servidor, se asegura de que utiliza una dirección de puerto de origen que aún no ha utilizado 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 para el mismo servidor en el puerto 28081. Esto asegura que tanto el cliente como el servidor saben que esto es un conexión nueva porque al menos una de las cuatro cantidades '(dirección IP del cliente, puerto TCP del cliente, dirección IP del servidor, puerto TCP del servidor)' es diferente. –

+0

"Una conexión TCP está identificada de forma exclusiva por dos (dirección IP, puerto TCP)" Está definida 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. – usr

4

Sí, se queda en ese puerto, aunque algunos protocolos (FTP) podrían abrir una segunda conexión en otro puerto. No piense en un puerto como un camino físico o enchufe, como un puerto USB que solo puede tener una cosa conectada. Pero mejor piense en ello como un identificador para el servicio que se solicita.

A menudo, sin embargo, la nueva conexión de socket pasa a otra cadena que maneja las lecturas/escrituras para esa conexión específica.

1

Puede haber más de un cliente que se conecta a un puerto, ya que la conexión se identifica tanto por el servidor como por la dirección IP del cliente y el puerto. Por lo tanto, aceptar la conexión de un cliente no impide que otros se conecten. Incluso podría conectar otra vez desde el mismo cliente (utilizando otro puerto de cliente).

Cuestiones relacionadas