Multiplexación y demultiplexación, identificación de sockets

Multiplexación y demultiplexación, identificación de sockets

de Gaston Daniel Barreto Sugliani -
Número de respuestas: 3


Datos del libro, capitulo Multiplexación y demultiplexación

"Ahora ya debería estar claro cómo la capa de transporte podría implementar el servicio de demultiplexación: cada socket del host se puede asignar a un número de puerto "

"cada segmento tenga campos especiales que indiquen el socket al que tiene que entregarse el segmento. Estos campos especiales, mostrados en la Figura 3.3, son el campo número de puerto de origen y el campo número de puerto de destino"

Aca es donde confunde el libro:

"si dos segmentos UDP tienen diferentes direcciones IP y/o números de puerto de origen, pero la misma dirección IP de destino y el mismo número puerto de destino, entonces los dos segmentos se enviarán al mismo proceso de destino a través del mismo socket de destino" 

1) Por qué el libro habla de IP en segmentos? Si la IP no es de agregada al datagrama en la capa de red? Un segmento no tiene IP.  Cómo sabe UDP la IP del emisor?

-----

"la diferencia entre un socket TCP y un socket UDP es que el primero queda identificado por una tupla de cuatro elementos: dirección IP de origen, número  de puerto de origen, dirección IP de destino, número de puerto de destino. Por tanto, cuando un segmento TCP llega a un host procedente de la red, el host emplea los cuatro valores para dirigir (demultiplexar) el segmento al socket apropiado. "

2) Yo tenía entendido que todo socket tiene un puerto y se identifica por éste (que además no se comparte). Leyendo esto, eso quiere decir que un socket tiene identificadores arbitrarios? (por ejemplo UDP utiliza IP y puerto para identificar sockets)

3) Podría pasar entonces que un hayan dos sockets que utilice el mismo puerto?


En respuesta a Gaston Daniel Barreto Sugliani

Re: Multiplexación y demultiplexación, identificación de sockets

de Gaston Daniel Barreto Sugliani -

Cuando el sistema operativo del host que está ejecutando el proceso servidor recibe el segmento de entrada de solicitud de conexión con el puerto de destino 12000, localiza el proceso de servidor que está esperando para aceptar una conexión en el número de puerto 12000. El proceso de servidor crea entonces un nuevo socket: 


Si los sockets TCP se identifican por los 4 valores del mensaje anterior (entre ellos IP emisor), qué sucede con el socket de acogida, cómo está identificado? Cómo hace la capa de aplicación para demultiplexar dos segmentos con IP origen y/o puerto destino distintos al mismo socket de bienvenida?

En respuesta a Gaston Daniel Barreto Sugliani

Re: Multiplexación y demultiplexación, identificación de sockets

de Matias Richart -

Cuando el sistema operativo del host que está ejecutando el proceso servidor recibe el segmento de entrada de solicitud de conexión con el puerto de destino 12000, localiza el proceso de servidor que está esperando para aceptar una conexión en el número de puerto 12000. El proceso de servidor crea entonces un nuevo socket: 


Si los sockets TCP se identifican por los 4 valores del mensaje anterior (entre ellos IP emisor), qué sucede con el socket de acogida, cómo está identificado? Cómo hace la capa de aplicación para demultiplexar dos segmentos con IP origen y/o puerto destino distintos al mismo socket de bienvenida?

Creo que esto quedó contestado en la respuesta anterior pero por las dudas repitro.

En el caso de los sockets de acogida, solo los identifica la IP y puerto destino. Es decir, si no hay un conexión establecida para esta tupla (no hay un socket que coincida con las IP y puerto origen y destino), entonces ese segmento se dirigirá al socket de acogida si es que coinciden la IP y puerto destino.

En respuesta a Gaston Daniel Barreto Sugliani

Re: Multiplexación y demultiplexación, identificación de sockets

de Matias Richart -

Buenas.

Copio tus preguntas y respondo entre líneas.

Datos del libro, capitulo Multiplexación y demultiplexación

"Ahora ya debería estar claro cómo la capa de transporte podría implementar el servicio de demultiplexación: cada socket del host se puede asignar a un número de puerto "

"cada segmento tenga campos especiales que indiquen el socket al que tiene que entregarse el segmento. Estos campos especiales, mostrados en la Figura 3.3, son el campo número de puerto de origen y el campo número de puerto de destino"

Aca es donde confunde el libro:

"si dos segmentos UDP tienen diferentes direcciones IP y/o números de puerto de origen, pero la misma dirección IP de destino y el mismo número puerto de destino, entonces los dos segmentos se enviarán al mismo proceso de destino a través del mismo socket de destino" 

1) Por qué el libro habla de IP en segmentos? Si la IP no es de agregada al datagrama en la capa de red? Un segmento no tiene IP.  Cómo sabe UDP la IP del emisor?

Lo primero a comentar es que la separación entre capas no es siempre tan perfecta como uno esperaría. Vamos a ver varios ejemplos donde hay "violaciones" a la separación de capas.

En el caso de las capas de transporte y red es común que suceda esto. Es tan así que muchas veces verás que a TCP se lo llama TCP/IP.

El caso que planteas es muy interesante. Por un tema de diseño del stack de protocolos de Internet, una aplicación que desea conectarse con otra, para identificar a la aplicación receptora, va a necesitar identificar tanto el puerto donde esta esperando conexiones como el host donde está ejecutando. Si pensamos en capas totalmente separadas esto ya es un poco raro porque desde la capa de aplicación no solo interactuás con información de la capa inferior (transporte) sino también la capa de mas abajo (red).

Al programar esto queda bien claro, por ejemplo, cuando haces un sendto() en un socket UDP le tenés que indicar la dirección IP y el puerto destino.

O por ejemplo, al hacer un bind() también se le indica una IP y puerto.

También los sockets te ofrecen la posibilidad de obtener tanto la dirección IP como el puerto origen de un segmento cuando es recibido.

Es decir, la capa de red al recibir un datagrama, no solo le pasa los datos a la capa de transporte sino que también le pasa la información de las direcciones IP.

En el ejemplo del libro entiendo que menciona las direcciones IP de origen para hacer notar que en UDP para la demultiplexación solo le interesa el puerto destino.

-----

"la diferencia entre un socket TCP y un socket UDP es que el primero queda identificado por una tupla de cuatro elementos: dirección IP de origen, número  de puerto de origen, dirección IP de destino, número de puerto de destino. Por tanto, cuando un segmento TCP llega a un host procedente de la red, el host emplea los cuatro valores para dirigir (demultiplexar) el segmento al socket apropiado. "

2) Yo tenía entendido que todo socket tiene un puerto y se identifica por éste (que además no se comparte). Leyendo esto, eso quiere decir que un socket tiene identificadores arbitrarios? (por ejemplo UDP utiliza IP y puerto para identificar sockets)

Lo primero acá es entender que es identificar un socket. Cuando hablamos de identificar en este contexto es poder determinar el socket al que entregar los datos de un segmento. Es decir, lo necesario para poder hacer la demultiplexación.

En TCP, cuando se establece una conexión, los sockets que son parte de esa conexión, se identifican por la tupla de cuatro elementos que se mencionan en el libro.

Es decir, se usan los cuatro valores para realizar la demultiplexación. De esta forma se permite tener varias conexiones simultaneas establecidas con el mismo IP y puerto destino.

Pero en TCP también podemos tener un socket para recibir las conexiones, en este caso donde la conexión aún no está establecida, se utiliza solo los datos de destino.

En UDP se utiliza solo la IP y puerto destino, aunque podrás ver que algunas veces se menciona que se utiliza solo el puerto destino dado que en ese caso se está asumiendo una IP dada o que el host tiene una única IP.

3) Podría pasar entonces que un hayan dos sockets que utilice el mismo puerto?

Si. Puede pasar que en una misma máquina se tengan dos interfaces de red con direcciones IP distintas, entonces se puede tener 2 sockets asociados con IPs distintas y el mismo puerto.

También sucede que cuando se tiene un servidor TCP con varias conexiones al puerto 80, se tiene un socket por cada una de esas conexiones con puerto destino el 80.