TCP 연결이 튜플 (소스 IP, 소스 포트, 대상 IP, 대상 포트)로 식별된다는 것을 알게되었습니다. 이론적으로, host1 : port1의 클라이언트가 server1 : port1에 연결하는 동시에 다른 클라이언트 (host1에서 실행)를 host1 : port1에서 server2 : port1로 연결할 수 있어야합니다.
Java에서 조금 테스트했지만 지금까지 가능합니다.
그러나 소스 포트가 호스트 주소에 대해 고유해야한다는 것을 여러 번 읽었습니다. 이는 기본적으로 최대 65536 개의 동시 발신 TCP 연결의 하드 한계가 있음을 의미합니다. 그게 사실입니까?
업데이트 : 여기 내 Java 코드가 있습니다. 이것은 작동하는 것으로 보이며 netstat -t 는 포트 9990 (1 ~ 9997, 1 ~ 9998)에서 2 개의 활성 발신 연결을 명확하게 보여줍니다 . 적어도 현대 리눅스에서는 가능할 것 같습니까?
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