TCP接続はタプル(ソースIP、ソースポート、宛先IP、宛先ポート)によって識別されることを学びました。したがって、理論的には、host1:port1からのクライアントをserver1:port1に接続し、同時にhost1:port1からserver2:port1への別のクライアント(host1で実行中)を接続することが可能になるはずです。
私はJavaで少しテストしましたが、これまでのところ可能であるようです。
ただし、送信元ポートがホストアドレスに対して一意である必要があることを何度も読みました。これは、基本的に、最大65536の同時発信TCP接続のハード制限があることを意味します。本当?
更新:これが私のJavaコードです。これは機能しているようで、netstat -t はポート9990からの2つのアクティブな発信接続(1から9997、1から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