Під час налаштування TCP-з'єднання 4-кортеж (source-ip, source-port, dest-ip, dest-port) повинен бути унікальним - це гарантує доставку пакетів у потрібне місце.
На стороні сервера існує ще одне обмеження, що лише одна серверна програма може прив’язуватися до вхідного номера порту (припустимо, одна IP-адреса; багато-NIC-сервери мають інші повноваження, але нам тут не потрібно обговорювати їх).
Отже, на кінці сервера ви:
- створити розетку.
- прив’яжіть цю розетку до порту.
- слухайте на тому порту.
- прийняти з'єднання на цьому порту. і може бути кілька підключень (по одному на клієнта).
На клієнтському кінці, як правило, трохи простіше:
- створити розетку.
- відкрити з'єднання. Коли клієнт відкриває з'єднання, він вказує ip-адресу та порт сервера . Він може вказати свій вихідний порт, але зазвичай використовує нуль, що призводить до того, що система автоматично присвоює йому вільний порт.
Там немає НЕ потрібно, щоб призначення IP / порт бути унікальним , оскільки це призвело б тільки одна людина , в той час , будучи в змозі використати Google, і це буде дуже добре зруйнувати їхній бізнес - модель.
Це означає, що ви навіть можете робити такі дивовижні речі, як багатосесійний FTP, оскільки ви встановлюєте кілька сеансів, де єдиною різницею є ваш вихідний порт, що дозволяє завантажувати фрагменти паралельно. Торренти трохи відрізняються тим, що призначення кожного сеансу зазвичай відрізняється.
І, нарешті, цей вафлінг (вибачте), відповідь на ваше конкретне питання полягає в тому, що вам не потрібно вказувати вільний порт. Якщо ви підключаєтесь до сервера за допомогою дзвінка, який не визначає ваш вихідний порт, він майже напевно використовує нуль під кришками, і система видасть вам невикористаний.