Czym tak naprawdę są porty i protokoły?

11

Słyszę, jak ludzie mówią o portach i protokołach (w odniesieniu do sieci komputerowych) i często podają im analogie (na przykład: „port jest podobny do portu wysyłkowego, wysyła i odbiera dane tak, jak port wysyłający wysyła i odbiera towary z innych portów ”) i tym podobne.

Rozumiem, co to wszystko oznacza, ale tylko na bardzo sztucznym poziomie. Zasadniczo wiem, co to jest port i rozumiem, jakie są protokoły, ale czym tak naprawdę są?

Czy te porty są obiektami fizycznymi? Czy są czymś wbudowanym w część mojego komputera? Ile jest portów? Czy mogę zwiększyć lub zmniejszyć liczbę portów? Czy to w ogóle coś fizycznego? Lub napisane w kodzie? Gdzie jest ten kod? System operacyjny? Czym tak naprawdę jest port?

Jakie są protokoły? Wyobrażam sobie, że to jakiś kod ... Czy potrafisz stworzyć własny protokół? Jak uzyskać określony port do uruchamiania określonego protokołu? W jakim języku tworzysz protokół? Jak zdefiniujesz lub wymyślisz nowy protokół?

Kok
źródło

Odpowiedzi:

9

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.

Paweł
źródło
Dziękuję Ci! To była odpowiedź, której szukałem, dzięki za pomoc!
Bob
3

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.

Cześć71
źródło
Rozumiem to wszystko. Więc w zasadzie port nie jest rzeczą fizyczną? To jest coś, co jest zaprogramowane? Gdzie port jest zdefiniowany na komputerze? A w przypadku protokołów, jak są one tworzone? Czy są zaprogramowane?
Bob
Nie, port nie jest fizyczny w tym kontekście (oczywiście port USB jest fizyczny, ale nie jest związany z tym tematem). Protokoły są definiowane przez RFC ( en.wikipedia.org/wiki/Request_for_Comments ) i implementowane w kodzie - programowane.
Paul
Czy słusznie byłoby powiedzieć, że TCP jest procesem systemowym, który rezerwuje pamięć do przechowywania danych przychodzących z IP (lub do przechowywania danych do odzyskania przez IP) i że ta pamięć jest podzielona na „porty”. I że inne aplikacje (procesy), takie jak HTTP, mogą powiadomić TCP, że chcą zarezerwować określone porty (tj. 80 i 443). Następnie zadaniem TCP jest 1. zezwolenie HTTP na dodanie danych wychodzących do tych adresów pamięci oraz 2. poinformowanie HTTP, kiedy dane przychodzące zostały dodane do tych adresów pamięci?
Zach Smith
Może Bob mylił porty protokołu z portami fizycznego przełącznika. Część portu protokołu została dobrze odebrana przez kilka, choć brakuje jakiegokolwiek źródła. Jeśli chodzi o porty fizyczne, są to wejściowe i wyjściowe miejsca, w których łączą się okablowanie, które umożliwiają przesyłanie danych w sieci. Może to obejmować obwody elektroniczne, odbiorniki światłowodowe, lasery i bufory. L. Peterson wydanie 4.
nassim
3

Chociaż pytanie to zostało już oznaczone jako odpowiedź, chciałem odpowiedzieć na niektóre dodatkowe pytania zadane w PO.

Czy te porty są obiektami fizycznymi?

Ż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ć.

Czy są czymś wbudowanym w część mojego komputera? Czy to w ogóle coś fizycznego? Lub napisane w kodzie? Gdzie jest ten kod? System operacyjny? Czym tak naprawdę jest port?

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.

Ile jest portów?

Numery portów są przypisywane na różne sposoby, w oparciu o trzy zakresy:

  1. 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)

  2. 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.)

  3. 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.

Czy mogę zwiększyć lub zmniejszyć liczbę 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.

Jakie są protokoły?

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).

Wyobrażam sobie, że to jakiś kod ... Czy potrafisz stworzyć własny protokół? W jakim języku tworzysz protokół?

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.

Jak uzyskać określony port do uruchamiania określonego protokołu?

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.

Jak zdefiniujesz lub wymyślisz nowy protokół?

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.

Richie086
źródło