//Pytanie: "Podaj i omów grupy portów w sieciach TCP/UDP w IP. Podaj możliwości ich programowania oraz własności z tego wynikające."//


W każdej chwili wiele procesów może korzystać z protokołu TCP, UDP. W celu rozróżnienia tych procesów w obu protokołach używa się 16-bitowych numerów portów. Gdy klient chce się skontaktować z serwerem musi go zidentyfikować. Zarówno dla protokołu TCP jak i UDP zdefiniowano grupę **portów ogólnie znanych (well-known port)** przeznaczonych do wykonywania ogólnie znanych usług. Np. w każdej implementacji TCP/IP  serwerowi FTP przypisano port 21. Serwerom TFTP przyporządkowano port 69 protokołu UDP.\\
Z drugiej strony klienci używają **portów efemerycznych (ephemeral port)**, czyli krótkotrwałych. Numery tych portów zazwyczaj są automatycznie wyznaczane klientom przez protokoły TCP i UDP. Klienci zazwyczaj nie muszą sie zajmować numerami portów efemerycznych. 
Wyznaczaniem numerów portów zajmuje się organizacja IANA (Internet Assigned Numbers Authority).\\

Każdy port należy do jednego z trzech zakresów:
    ***Porty ogólnie znane** – 0 - 1023. W miare możliwości ten sam numer portu jest przypisany do tej samej usługi w obu protokołach – TCP, UDP. Organizacja IANA sprawuje nad nimi kontrolę.
    ***Porty zarejestrowane** – 1024 – 49151. Organizacja IANA, nie sprawuje nad nimi kontroli, lecz rejestruje numery portów i sporządza wykazy przyporządkowania. Np. porty 6000 do 6063 przyporządkowane są do serwera X Window dla obu protokołów.
    ***Porty dynamiczne** albo **prywatne** – 49152 – 65335. Organizacja IANA nie mówi nic o tych portach, są to porty nazywane efemerycznymi.


W systemie UNIX istnieje pojęcie **portu zarezerwowanego**. Jest to każdy port mniejszy od 1024. Te porty mogą być przypisane gniazdom tylko przez proces nadzorczy (superuser). Wszystkie ogólnie znane porty sa zarezerwowanymi i serwer przypisujący numer takiego portu musi uzyskać przywilej nadzorcy.
Kilka procesów klientów wymaga, by numer portu zarezerwowanego był używany w komunikacji klient – serwer w celu ustalenia tożsamości klienta; popularne przykłady to //rlogin// oraz //rsh// . Te procesy wywołują funkcję rrsesvport, aby utworzyć gniazdo i przypisać do niego nieużywany port z zakresu 513 – 1024.

{{ porty.JPG }}