Wprowadzenie: Adres IP i Numer Portu
Dostarczenie danych do procesu wymaga wskazania hosta oraz punktu końcowego usługi. Adres IP identyfikuje hosta w sieci, a numer portu wskazuje usługę lub gniazdo na tym hoście. Bez numeru portu system operacyjny nie wiedziałby, któremu z wielu procesów sieciowych przekazać odebrane dane.
W sieciach komputerowych Warstwa Sieciowa, używając , dostarcza pakiety do właściwego hosta na podstawie adresu IP. Po odebraniu pakietu system operacyjny musi wybrać proces docelowy. Komputer może jednocześnie uruchamiać przeglądarkę, klienta poczty, usługę strumieniowania muzyki, grę i inne aplikacje, dlatego sam adres IP nie wystarcza do demultipleksacji.
Ten problem Warstwa Transportowa, w szczególności TCP lub UDP, rozwiązuje za pomocą numerów portów. Numer portu jest 16-bitowym identyfikatorem logicznego punktu końcowego, na który system kieruje dane dla konkretnej usługi lub procesu.
Czym Dokładnie Jest Numer Portu?
Numer portu to 16-bitowa liczba całkowita bez znaku, więc przyjmuje wartości od 0 do 65 535 . Służy jako logiczny, numerowany punkt końcowy komunikacji zarządzany przez system operacyjny.
Kiedy aplikacja chce wysyłać lub odbierać dane przez sieć, prosi system operacyjny o przydzielenie portu. System operacyjny tworzy wówczas punkt końcowy komunikacji zwany , który w typowym ujęciu łączy adres IP, protokół transportowy i numer portu. Na przykład, jeśli komputer o adresie IP ma serwer WWW działający na porcie 80, punkt końcowy można zapisać jako . Dla połączenia TCP para takich punktów razem z protokołem identyfikuje dane połączenie.
Ta kombinacja pozwala na precyzyjne dostarczanie danych. Nagłówki TCP i UDP zawierają dwa numery portów:
- Port Źródłowy: Numer portu aplikacji na maszynie wysyłającej.
- Port Docelowy: Numer portu aplikacji na maszynie odbierającej.
Para portów, rozpatrywana razem z adresami IP i protokołem transportowym, pozwala rozróżniać sesje. Jeden komputer może zatem obsługiwać tysiące równoczesnych konwersacji sieciowych.
Numer portu należy do przestrzeni konkretnego protokołu transportowego, dlatego ta sama wartość może mieć osobne znaczenie dla TCP i UDP. Lokalna konfiguracja może też wskazać inną usługę niż domyślne skojarzenie z rejestru.
Kluczowa Funkcja: Demultipleksacja
Głównym zadaniem numerów portów jest umożliwienie procesu zwanego demultipleksacją. Multipleksacja łączy dane wielu aplikacji w ruch obsługiwany przez wspólny interfejs sieciowy. Demultipleksacja rozdziela odebrane dane według informacji z nagłówka transportowego i kieruje je do właściwych gniazd.
Przy wysyłaniu wiele aplikacji korzysta z jednego interfejsu sieciowego, a warstwa transportowa dołącza do danych port źródłowy i docelowy. Przy odbiorze system odczytuje port docelowy i wybiera gniazdo, do którego przekaże dane.
Karta sieciowa odbiera pakiety z interfejsu, a warstwa transportowa systemu operacyjnego sprawdza docelowy numer portu w nagłówku każdego pakietu. Na tej podstawie wybiera właściwe gniazdo aplikacji i przekazuje mu dane. Wiele aplikacji może współdzielić interfejs sieciowy bez mieszania strumieni.
Kategorie Numerów Portów
Zakres 65 536 wartości portów jest podzielony według zasad rejestru IANA. prowadzi rejestr przydziałów dla trzech kategorii. Kategorie porządkują nazwy usług i domyślne numery używane przez protokoły TCP oraz UDP.
Porty Systemowe
0 - 1023
Zakres zarządzany przez IANA, w którym przydziela się numery usługom systemowym i powszechnie używanym protokołom. Numer jest konwencją usługi, nie gwarancją działania konkretnego procesu.
Porty Użytkownika
1024 - 49151
Zakres, w którym IANA może przydzielać numery konkretnym usługom. Część wartości pozostaje nieprzydzielona, a system operacyjny nie wymusza rejestracji.
Porty Dynamiczne / Prywatne
49152 - 65535
Zakres nieprzydzielany przez IANA, przeznaczony do użytku prywatnego i tymczasowego. Często służy jako źródło połączeń klienckich.
Porty Systemowe (Dobrze Znane)
IANA zarządza przydziałami w zakresie od 0 do 1023 dla usług systemowych i dobrze znanych protokołów. Przeglądarka zwykle wybiera port 80 dla HTTP lub 443 dla HTTPS zgodnie z konwencją usługi. Zgodny klient może zatem połączyć się z serwerem bez wcześniejszego uzgadniania numeru, choć sam numer nie gwarantuje, że dana usługa rzeczywiście działa.
W wielu systemach operacyjnych, takich jak Linux czy macOS, aplikacja potrzebuje specjalnych uprawnień administracyjnych, na przykład uruchomienia przez użytkownika root, aby nasłuchiwać na portach poniżej 1024. Jest to lokalna reguła systemu, która ogranicza możliwość podszywania się programów pod usługi systemowe.
Przykłady Portów Dobrze Znanych:
- 20 i 21 (FTP): File Transfer Protocol, do przesyłania plików.
- 22 (SSH): Secure Shell, do bezpiecznego zdalnego dostępu do wiersza poleceń.
- 25 (SMTP): Simple Mail Transfer Protocol, do wysyłania e-maili.
- 53 (DNS): Domain Name System, do tłumaczenia nazw domen na adresy IP.
- 80 (HTTP): Hypertext Transfer Protocol, fundament World Wide Web.
- 443 (HTTPS): HTTP zabezpieczony protokołem TLS.
Porty Użytkownika (Zarejestrowane)
Zakres od 1024 do 49151 obejmuje usługi użytkownika, którym może być potrzebny stały, rozpoznawalny numer portu. Projektanci mogą wystąpić do IANA o przydział numeru dla konkretnej usługi, lecz część wartości pozostaje nieprzydzielona. Rejestr IANA porządkuje nazwy i domyślne przydziały, a system operacyjny nie wymusza zgodności lokalnych programów z rejestrem.
Przydział IANA opisuje domyślną usługę, natomiast aplikacja może używać innego wolnego portu po lokalnej konfiguracji. Klient musi wtedy znać ten numer z konfiguracji lub z dokumentacji danej usługi.
Przykłady Portów Zarejestrowanych:
- 1433 (MS SQL Server): Dla serwera baz danych Microsoftu.
- 3306 (MySQL): Dla popularnego serwera baz danych open source.
- 3389 (RDP): Remote Desktop Protocol, do graficznego zdalnego sterowania maszynami z systemem Windows.
- 5432 (PostgreSQL): Dla innego ważnego serwera baz danych open source.
- 8080 (HTTP Alternate): Często używany jako alternatywny port dla serwerów WWW podczas rozwoju lub gdy port 80 jest niedostępny.
Szczegółowo: Porty Dynamiczne, Prywatne lub Efemeryczne
Zakres od 49152 do 65535 nie jest przydzielany przez IANA i służy do użytku dynamicznego, prywatnego lub tymczasowego. Wartości te są znane jako porty efemeryczne i często pełnią funkcję portów źródłowych po stronie klienta.
Gdy przeglądarka odwiedza stronę, działa jako klient, a serwer WWW zwykle nasłuchuje na porcie dobrze znanym, na przykład 443. System operacyjny przydziela przeglądarce port dla lokalnego końca połączenia, wybierając nieużywaną wartość z lokalnej puli portów tymczasowych. Nazywa się to alokacją efemeryczną.
Port pozostaje związany z połączeniem przez czas ustalony przez system. Nowa karta może użyć istniejącego połączenia HTTP/2 lub HTTP/3 albo otrzymać nowy port, jeśli potrzebne jest osobne połączenie. Mechanizm ten pozwala jednej maszynie utrzymywać setki połączeń wychodzących. Serwer rozróżnia je na podstawie adresów IP, portów i protokołu transportowego.
Porty w Praktyce: Przykład
Poniższy przebieg pokazuje, jak adresy IP i porty uczestniczą w prostym żądaniu sieciowym.
W przypadku HTTP/3 zamiast pakietu SYN występuje połączenie QUIC nad UDP, często również z portem docelowym 443. Szczegóły ustanawiania sesji zależą wtedy od transportu używanego przez klienta i serwer.
Scenariusz: Użytkownik na domowym komputerze chce odwiedzić bezpieczną stronę internetową https://www.onet.pl.
- Inicjacja: Użytkownik wpisuje adres w przeglądarce i naciska Enter. Przeglądarka, działając jako aplikacja kliencka, wie, że HTTPS odpowiada dobrze znanemu portowi 443.
- Zapytanie DNS: Przeglądarka prosi system operacyjny o znalezienie adresu IP dla
www.onet.pl. System operacyjny wysyła zapytanie DNS, zwykle przez UDP do serwera na porcie 53, lecz DNS może korzystać także z TCP. Otrzymuje adres IP, na przykład . - Alokacja Portu Efemerycznego: Przeglądarka musi teraz nawiązać połączenie. System operacyjny przydziela wolny port z zakresu dynamicznego, aby przeglądarka mogła go użyć jako portu źródłowego. Powiedzmy, że wybiera port .
- Tworzenie Pakietu: Jeśli połączenie HTTPS korzysta z TCP, maszyna klienta tworzy pierwszy pakiet TCP, czyli SYN rozpoczynający połączenie. Nagłówek pakietu będzie zawierał:
- Źródłowy Adres IP: Publiczny adres IP użytkownika.
- Port Źródłowy: (port efemeryczny).
- Docelowy Adres IP: (adres serwera).
- Port Docelowy: (dobrze znany port HTTPS).
- Demultipleksacja po Stronie Serwera: Pakiet podróżuje przez internet i dociera do serwera onet.pl. System operacyjny serwera patrzy na port docelowy () i dostarcza pakiet do aplikacji serwera WWW, która aktywnie nasłuchuje na nowe połączenia na tym porcie.
- Odpowiedź: Serwer WWW akceptuje połączenie i wysyła pakiet odpowiedzi (SYN/ACK). Nagłówek tego pakietu odpowiedzi będzie miał zamienione informacje źródłowe i docelowe:
- Źródłowy Adres IP: .
- Port Źródłowy: .
- Docelowy Adres IP: Publiczny adres IP użytkownika.
- Port Docelowy: .
- Demultipleksacja po Stronie Klienta: Pakiet odpowiedzi dociera z powrotem do komputera użytkownika. System operacyjny patrzy na port docelowy () i wie, że ten pakiet jest częścią konwersacji zainicjowanej przez przeglądarkę. Dostarcza dane bezpośrednio do właściwego procesu przeglądarki, która może zacząć renderować stronę internetową.