Następnie odpowiedź Hello71 może pomóc w wizualizacji portu, myśląc o strukturze adresu w pakiecie. Pakiet będący jednostką danych przekazywanych w sieci. TCP jest przykładem protokołu warstwy transportowej, który wykorzystuje porty i jest powszechnie używany przez IP.
Tak więc adres IP ma dwa komponenty adresowania - źródłowy adres IP i docelowy adres IP. TCP dodaje do tego przy użyciu portu źródłowego i docelowego. To porty umożliwiają maszynie odbierającej różnicowanie ruchu przeznaczonego dla tego samego adresu IP - tj. Jeśli masz serwer, który odbiera zarówno żądania sieciowe, jak i e-maile na jednym adresie IP, musisz określić, która aplikacja powinna odbierać dane - usługa e-mail lub usługa internetowa. Mogą więc wyglądać tak, jeśli pojedynczy użytkownik wykona żądanie sieciowe i żądanie e-mail na tym samym serwerze:
Source IP Source Port Dest IP Dest Port Service
10.1.1.10 23434 192.168.1.1 80 web
10.1.1.10 34343 192.168.1.1 25 incoming email
Usługa internetowa jest właścicielem portu 80, a usługa e-mail posiada port 25 - „nasłuchują” na swoich odpowiednich portach, co umożliwia trafienie ruchu we właściwe miejsce.
Port źródłowy jest „efemeryczny” - to znaczy, że jest tworzony w momencie wysyłania pakietu. Nadal jednak służy to pożytecznemu celowi. Umożliwia to obu końcom połączenia śledzenie osobnych rozmów. Zastanów się, czy nasz użytkownik wysłał dwa jednoczesne żądania internetowe:
Source IP Source Port Dest IP Dest Port Service
10.1.1.10 23232 192.168.1.1 80 web request 1
10.1.1.10 23234 192.168.1.1 80 web request 2
Dzięki temu serwis internetowy wie, że są to oddzielne żądania, ale również ruch powrotny z serwera WWW - stron internetowych - jest odsyłany z powrotem do odpowiednich portów źródłowych, co umożliwia przeglądarce sprawdzenie, na które żądanie serwer odpowiada.
Zauważ, że to wszystko odnosi się do numerów portów, z perspektywy TCP / IP, rzeczywiste dane przenoszone przez te porty mogą być dowolne. Nie obchodzi go to ani nie ma wiedzy o aplikacjach, więc gdybyś miał ruch internetowy na porcie 25 i e-mail na porcie 80, nie byłoby to mądrzejsze.
Zadaniem aplikacji wysyłającej i odbierającej jest upewnienie się, że dane mają odpowiednią strukturę, i tutaj przychodzą protokoły aplikacji. HTTP jest przykładem protokołu aplikacji używanego przez przeglądarki internetowe do komunikacji z serwerami WWW. Jest to dobrze zdefiniowany protokół, który zapewnia, że przeglądarka będzie wysyłać żądania do dowolnego serwera WWW, a serwer WWW zrozumie i zareaguje rozsądnie. Ale to, czego nie zawiera w swojej definicji, dotyczy tego, w jaki sposób pakiety docierają z punktu A do punktu B - to jest odpowiedzialność poprzednich warstw - warstwy transportu, Internetu i łączy.
Hm Sądzę, że najlepszym miejscem na początek byłoby przyjrzenie się pakietowi IP Suite, czyli modelowi TCP / IP. (Ignorowanie innych warstw modelu OSI dla uproszczenia.)
Zasadniczo jest to seria warstw:
Warstwa aplikacji - HTTP, FTP, POP, SSH itp.
Warstwa transportowa - TCP, UDP itp.
Warstwa internetowa - IP, ICMP itp.
Warstwa łącza - Ethernet itp.
Porty są w większości implementowane w warstwie transportowej (warstwa 4 - Tak, numeracja jest poprawna).
Większość stosów TCP i / lub UDP zaimplementowanych w systemach operacyjnych używa podstawowego systemu przypisywania portów do programów i po prostu wywoływania zdarzeń w tych programach, gdy pakiety przychodzą przez sieć. Jednak każde wdrożenie może teoretycznie działać; mogą istnieć nawet hipotetyczne alternatywne stosy rozważane w środowisku akademickim.
TCP został zdefiniowany jako posiadający łącznie 65535 portów, z których każdy program może robić, co tylko chce (chociaż wiele systemów operacyjnych ogranicza użycie portów poniżej 1024, co daje im specjalny status ad hoc). Chociaż istnieją pewne ograniczone listy, nie ma prawdziwego standardu określania, kto otrzymuje jaki port i który port uruchamia jaki program. Port jest więc mniej więcej przypadkową liczbą, o której różne implementacje programu decydują się zgodzić. Oczywiście projektanci takich programów starają się unikać portów, które wybrały już inne popularne programy.
Przyznaję, że nie jest w żaden sposób wymagany do korzystania z TCP. Niektóre protokoły działają na samej warstwie internetowej, a nawet na samej warstwie łącza, głównie w celu zwiększenia wydajności lub dlatego, że protokoły te zostały wynalezione jeszcze przed istnieniem TCP lub IP. Oczywiście, robiąc to, rezygnujesz z prostoty i obszernego sprawdzania błędów bibliotek sieciowych systemu operacyjnego.
Aby uzyskać więcej informacji, sprawdź strony Wikipedii na temat modelu OSI, TCP i IP.
źródło
Chociaż pytanie to zostało już oznaczone jako odpowiedź, chciałem odpowiedzieć na niektóre dodatkowe pytania zadane w PO.
Żadne porty nie są obiektami fizycznymi.
Numer portu to 16-bitowa liczba całkowita bez znaku, co oznacza, że zakres dostępnych portów wynosi od 1 do 65535 (numer portu 0 jest zarezerwowany i nie można go użyć). Proces wiąże swoje kanały wejściowe i wyjściowe za pośrednictwem gniazd internetowych, rodzaju deskryptora pliku, z protokołem transportowym, numerem portu i adresem IP. Ten proces jest nazywany wiązaniem i umożliwia wysyłanie i odbieranie danych przez sieć.
Oprogramowanie sieciowe systemu operacyjnego ma za zadanie przesyłanie wychodzących danych ze wszystkich portów aplikacji do sieci i przekazywanie przybywających pakietów sieciowych do procesu poprzez dopasowanie adresu IP i numeru portu pakietu.
Tylko jeden proces może połączyć się z określonym adresem IP i kombinacją portów przy użyciu tego samego protokołu transportowego. Częste awarie aplikacji, czasami nazywane konfliktami portów, występują, gdy wiele programów próbuje połączyć się z tymi samymi numerami portów na tym samym adresie IP przy użyciu tego samego protokołu.
Powyższy akapit jest kluczem do zrozumienia, dlaczego porty / protokoły są używane w sieci. Gdybyśmy nie mieli sposobu na określenie protokołu, który przesyła dane za pośrednictwem uzgodnionego numeru portu apon - nie byłbyś w stanie zrobić więcej niż jednej rzeczy na raz (sprawdź pocztę e-mail i korzystaj z Internetu), ponieważ twój komputer miałby nie ma możliwości rozróżnienia między danymi dla twojego klienta e-mail a danymi dla przeglądanej witryny.
Numery portów są przypisywane na różne sposoby, w oparciu o trzy zakresy:
Dobrze znane / Porty systemowe (0-1023) - ten zakres portów jest wykorzystywany przez procesy systemowe, które zapewniają powszechnie używane typy usług sieciowych (HTTP / 80, HTTPS / 443, Telnet / 21, SSH / 22)
Porty zarejestrowane / użytkownika (1024-49151) - zakres numerów portów od 1024 do 49151 to zarejestrowane porty. Są one przypisywane przez IANA do konkretnej usługi na wniosek podmiotu wnioskującego. (Webmin / 10000, HTTP Proxy / 8080, Remote Desktop Protocol / 3389 itp.)
Porty efemeryczne / dynamiczne / prywatne (49152-65535) - Zakres 49152–65535 zawiera porty dynamiczne lub prywatne, których nie można zarejestrować w IANA. Ten zakres jest używany do celów niestandardowych lub tymczasowych oraz do automatycznego przydzielania efemerycznych portów.
Jeśli chodzi o możliwość zwiększenia liczby dostępnych portów, nie można przypisać portu powyżej 65535 ze względu na matematykę, która umożliwia pracę w sieci (binarnie) - więc odpowiedź na to pytanie brzmi: nie, nie można zwiększyć całkowitej liczby dostępnych portów porty powyżej 65535.
W dziedzinie informatyki protokół komunikacyjny to system cyfrowych zasad wymiany komunikatów w obrębie komputerów lub między nimi. Gdy wiadomości są wymieniane przez sieć komputerową, system reguł nazywany jest protokołem sieciowym. Protokół jest w zasadzie uzgodnionym zestawem instrukcji / poleceń / wywołań, przez które oba urządzenia sieciowe mogą się komunikować. Pomyśl, czy nie uzgodniliśmy protokołów, a serwery WWW po prostu losowo wysyłały dane do przeglądarek, z którymi przeglądarka nie wiedziała, co zrobić? Na szczęście mamy HTTP i które każda utworzona przeglądarka internetowa ma wbudowane w oprogramowanie, dzięki czemu może komunikować się z dowolnym serwerem WWW, który również mówi tym samym językiem (HTTP).
Tak, możesz tworzyć własne protokoły. Protokoły są napisane w wielu różnych językach. Nie jestem programistą, ale jestem pewien, że tak długo, jak używany język ma biblioteki, które umożliwiają pisanie oprogramowania, które może komunikować się przez TCP / IP (istnieją inne zestawy protokołów, ale TCP / IP jest najbardziej powszechnie używane) możesz użyć tego języka do napisania protokołu. Język programowania „C” wydaje się być najczęściej używany do pisania protokołów. Wynika to z faktu, że wiele pierwszych protokołów sieciowych zostało opracowanych w systemie UNIX w latach 70. XX wieku, a C to język, w którym napisany jest sam UNIX.
Różni się to nieco między systemami operacyjnymi. Na przykład, aby zmienić numer portu Remote Desktop Protocol działa w systemie Windows, musisz edytować rejestr. W systemie Linux wiele usług sieciowych można skonfigurować bezpośrednio z pliku .conf dla określonej usługi sieciowej.
Zobacz https://journal.paul.querna.org/articles/2012/02/22/designing-network-protocols/ post na blogu autorstwa kogoś, kto niedawno opracował nowy protokół sieciowy i jakie rzeczy musiał zrobić po drodze.
źródło