我了解到,元组(源IP,源端口,目标ip,目标端口)标识了TCP连接。从理论上讲,因此应该有可能将host1:port1中的客户端连接到server1:port1,同时将另一个客户端(在host1上运行)从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