ฉันได้เรียนรู้ว่าการเชื่อมต่อ TCP ถูกระบุโดย tuple (IP ต้นทาง, พอร์ตต้นทาง, ปลายทาง IP, พอร์ตปลายทาง) ในทางทฤษฎีแล้วมันควรจะเป็นไปได้ที่จะมีไคลเอนต์จาก host1: พอร์ต 1 เชื่อมต่อกับเซิร์ฟเวอร์ 1: พอร์ต 1 และในเวลาเดียวกันไคลเอนต์อื่น (ทำงานบนโฮสต์ 1) จากโฮสต์ 1: พอร์ต 1 ถึงเซิร์ฟเวอร์ 2: พอร์ต 1
ฉันได้ทำการทดสอบกับ Java แล้วและดูเหมือนว่าจะเป็นไปได้
อย่างไรก็ตามฉันได้อ่านหลาย ๆ ครั้งว่าพอร์ตต้นทางนั้นต้องไม่ซ้ำกันสำหรับที่อยู่โฮสต์ซึ่งโดยทั่วไปจะหมายความว่ามีขีด จำกัด สูงสุดที่การเชื่อมต่อ TCP ขาออกพร้อมกัน 65536 ส่วนใหญ่ มันเป็นเรื่องจริงเหรอ?
อัปเดต: นี่คือรหัส 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