¿A qué socket va? Demultiplexación UDP y TCP

Los clientes A, B (y D) envían segmentos al servidor C. C mira la cabecera para elegir el socket: UDP solo mira el destino (IP_D, PD); TCP mira los cuatro valores (IP_O, PO, IP_D, PD). Sigue cada segmento hasta la tabla de sockets de C.

Escenario

Protocolo de transporte

Clientes y puertos efímeros

El SO del cliente elige el puerto origen en el rango efímero. El nuevo cliente (D, o una conexión nueva de A, B o D) envía al primer puerto en el que escucha C.

Modo

Practicar

Un escenario aleatorio de 4 a 6 segmentos, en modo predicción. Atención al mismo puerto origen en dos hosts y a los puertos en los que nadie escucha.

Vista

Segmentos que llegan a C

Supuestos del modelo
  • Las direcciones se escriben con letras (A, B, C, D), como en las diapositivas. IP_O: dirección IP origen; IP_D: dirección IP destino; PO: puerto origen; PD: puerto destino.
  • UDP (no orientado a conexión): el socket se identifica solo por su destino (IP_D, PD). Segmentos con orígenes distintos e igual destino van al mismo socket. El puerto origen sirve como dirección de retorno.
  • TCP (orientado a conexión): el servidor tiene un socket de bienvenida en el puerto en el que escucha y un socket de conexión por cada conexión simultánea, identificado por los cuatro valores (IP_O, PO, IP_D, PD). Aquí un segmento con una 4-tupla nueva llega al socket de bienvenida, que crea el socket de conexión; cómo se establece la conexión se verá en GG32.
  • Procesos: «uno a uno» es un proceso por conexión (P0 tiene el socket de bienvenida y crea P4, P5…); «uno a varios» es un proceso con un hilo por conexión; por eventos (nginx, Node.js), un proceso con muchos sockets. El número de sockets no depende de ello; el de procesos, sí.
  • El campo Protocolo de la cabecera IP (6 = TCP, 17 = UDP) elige el protocolo de transporte antes de mirar el puerto, así que 443/TCP y 443/UDP son sockets distintos. Un segmento a un puerto en el que nadie escucha con ese protocolo se descarta.
  • Puertos efímeros: el rango de la IANA es 49152–65535; Linux usa por defecto 32768–60999 (net.ipv4.ip_local_port_range). Los puertos del servidor son bien conocidos (80, 443…) o, como en las diapositivas, los fija la aplicación (6428).