Nauczyłem się, że krotka identyfikuje połączenie TCP (źródłowy adres IP, port źródłowy, docelowy adres IP, port docelowy). Teoretycznie powinna istnieć możliwość połączenia klienta z hosta1: port1 z serwerem1: port1 i jednocześnie innego klienta (działającego na hoście1) z hosta1: port1 na serwer2: port1.
Przetestowałem trochę w Javie i jak dotąd wydaje się to możliwe.
Jednak wielokrotnie czytałem, że port źródłowy musi być unikalny dla adresu hosta, co w zasadzie oznaczałoby, że istnieje sztywny limit co najwyżej 65536 równoczesnych wychodzących połączeń TCP. Czy to prawda?
Aktualizacja: Oto mój kod Java. Wydaje się, że to działa, a netstat -t wyraźnie pokazuje dwa aktywne, wychodzące połączenia z portu 9990 (jeden do 9997, jeden do 9998). Przynajmniej na nowoczesnym Linuksie wydaje się to możliwe?
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);
I wynik netstat -t (obcięty):
tcp6 0 0 localhost:9990 localhost:9998 CONNECTED
tcp6 0 0 localhost:9990 localhost:9999 CONNECTED