Я дізнався, що TCP-з'єднання ідентифікується кортежем (вихідний IP, вихідний порт, ip призначення, порт призначення). Теоретично, таким чином, має бути можливість мати клієнта з host1: port1 підключення до server1: port1 і одночасно іншого клієнта (працює на хості1) з host1: port1 до server2: port1.
Я трохи перевірив Java, і поки що це здається можливим.
Однак я не раз читав, що вихідний порт повинен бути унікальним для адреси хоста, що в основному означає, що існує жорсткий ліміт не більше 65536 одночасно вихідних TCP-з'єднань. Це правда?
Оновлення: Ось мій код Java. Це, здається, працює, і netstat -t чітко показує два активних вихідних з'єднання з порту 9990 (один до 9997, один до 9998). Принаймні, на сучасному Linux це здається можливим?
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);
І netstat -t вихід (усічений):
tcp6 0 0 localhost:9990 localhost:9998 CONNECTED
tcp6 0 0 localhost:9990 localhost:9999 CONNECTED