Podczas konfigurowania połączenia TCP 4 krotki (źródłowy adres IP, źródłowy port, docelowy adres IP, docelowy port) muszą być unikalne - ma to na celu zapewnienie, że pakiety są dostarczane we właściwe miejsce.
Istnieje dalsze ograniczenie po stronie serwera, że tylko jeden program serwera może połączyć się z numerem portu przychodzącego (zakładając jeden adres IP; serwery z wieloma kartami sieciowymi mają inne uprawnienia, ale nie musimy ich tutaj omawiać).
Tak więc po stronie serwera:
- utwórz gniazdo.
- połącz to gniazdo z portem.
- słuchaj na tym porcie.
- akceptuje połączenia na tym porcie. i może przychodzić wiele połączeń (jedno na klienta).
Po stronie klienta jest to zwykle trochę prostsze:
- utwórz gniazdo.
- otwórz połączenie. Gdy klient otwiera połączenie, określa adres IP i port serwera . To może określić swój port źródłowy, ale zwykle używa zerowe wyniki, które w systemie automatycznie przypisując mu wolny port.
Nie ma wymogu, aby docelowy adres IP / port był niepowtarzalny, ponieważ w danym momencie tylko jedna osoba mogłaby korzystać z Google, a to całkiem nieźle zniszczyłoby jej model biznesowy.
Oznacza to, że możesz nawet robić tak cudowne rzeczy, jak wielosesyjne FTP, ponieważ konfigurujesz wiele sesji, w których jedyną różnicą jest port źródłowy, umożliwiając równoległe pobieranie fragmentów. Torrenty różnią się nieco, ponieważ miejsce docelowe każdej sesji jest zwykle inne.
I po tym wszystkim (przepraszam), odpowiedź na twoje konkretne pytanie jest taka, że nie musisz określać wolnego portu. Jeśli łączysz się z serwerem za pomocą połączenia, które nie określa portu źródłowego, prawie na pewno będzie używać zera pod osłonami, a system da ci nieużywany.