Tôi đã học được rằng một kết nối TCP được xác định bởi bộ dữ liệu (IP nguồn, cổng nguồn, ip đích, cổng đích). Về mặt lý thuyết, do đó, có thể có một máy khách từ host1: port1 kết nối với server1: port1 và đồng thời một máy khách khác (chạy trên host1) từ host1: port1 đến server2: port1.
Tôi đã thử nghiệm một chút trong Java và cho đến nay dường như là có thể.
Tuy nhiên, tôi đã đọc nhiều lần rằng cổng nguồn phải là duy nhất cho địa chỉ máy chủ, điều đó về cơ bản có nghĩa là có giới hạn cứng của tối đa 65536 kết nối TCP gửi đi đồng thời. Điều đó có đúng không?
Cập nhật: Đây là mã Java của tôi. Điều này dường như hoạt động và netstat -t hiển thị rõ ràng hai kết nối đang hoạt động, đi từ cổng 9990 (một đến 9997, một đến 9998). Ít nhất là trên một Linux hiện đại, dường như là có thể?
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);
Và đầu ra netstat -t (cắt ngắn):
tcp6 0 0 localhost:9990 localhost:9998 CONNECTED
tcp6 0 0 localhost:9990 localhost:9999 CONNECTED