Aprendí que la tupla identifica una conexión TCP (IP de origen, puerto de origen, IP de destino, puerto de destino). Teóricamente, debería ser posible tener un cliente de host1: puerto1 conectado al servidor1: puerto1 y al mismo tiempo otro cliente (ejecutándose en host1) de host1: puerto1 a servidor2: puerto1.
He probado un poco en Java, y hasta ahora parece posible.
Sin embargo, he leído varias veces que el puerto de origen debe ser único para la dirección del host, lo que básicamente significa que hay un límite estricto de como máximo 65536 conexiones TCP salientes concurrentes. ¿Es eso cierto?
Actualización: Aquí está mi código Java. Esto parece funcionar, y netstat -t muestra claramente dos conexiones salientes activas desde el puerto 9990 (una a 9997, una a 9998). Al menos en un Linux moderno, ¿parece posible?
Socket s1 = new Socket();
s1.setReuseAddress(true);
SocketAddress saremote = new InetSocketAddress("localhost",9999);
SocketAddress salocal = new InetSocketAddress("localhost",9990);
s1.bind(salocal);
s1.connect(saremote);
Socket s2 = new Socket();
s2.setReuseAddress(true);
SocketAddress saremote2 = new InetSocketAddress("localhost",9998);
SocketAddress salocal2 = new InetSocketAddress("localhost",9990);
s2.bind(salocal2);
s2.connect(saremote2);
Y la salida netstat -t (truncada):
tcp6 0 0 localhost:9990 localhost:9998 CONNECTED
tcp6 0 0 localhost:9990 localhost:9999 CONNECTED