Socket

Socket jest znane jako typ oprogramowania, które działa jako punkt końcowy, który działa w ustanowieniu dwukierunkowego połączenia sieciowego pomiędzy końcem serwera a programem odbiorczym klienta.[1] Jest on również często określany jako jeden punkt końcowy w dwukierunkowym kanale komunikacyjnym. Gniazda te są wykonywane i mobilizowane wraz z zestawem zapytań programistycznych identyfikowanych jako wywołania funkcji, które technicznie określane są jako interfejs programowania aplikacji (API). Gniazdo jest w stanie uprościć sposób funkcjonowania programu, ponieważ programiści muszą się teraz martwić tylko o manipulowanie funkcjami gniazdka, co pozwala im polegać na systemie operacyjnym w celu prawidłowego przesyłania komunikatów przez sieć.[2]

Funkcjonalność

Zazwyczaj gniazdo stosuje się do specyficznego przepływu zdarzeń, aby działało. W przypadku modelu klient-serwer, gniazdo na serwerze czeka na żądanie klienta. W tym celu serwer musi przede wszystkim ustalić adres, który klienci mogą wykorzystać do znalezienia i połączenia z serwerem. Gdy połączenie zostanie pomyślnie nawiązane, serwer będzie czekał, aż klienci zażądają usługi. Wymiana danych klient-serwer będzie miała miejsce, jeśli klient połączy się z serwerem poprzez gniazdo. Serwer odpowie na prośbę klienta i wyśle odpowiedź.[3]

W większości przypadków adresy URL i ich połączenia są wykorzystywane w celu uzyskania dostępu do Internetu. Programy wymagają prostego połączenia komunikacyjnego pomiędzy klientem programu a serwerem. Rola ta jest powiązana z gniazdem, które pomoże związać klienta programu i końce serwera. Jeśli klient nawiąże komunikację z serwerem, niezawodne połączenie z serwerem i klientem zostanie zrealizowane poprzez kanał komunikacyjny TCP. Dzięki temu rodzajowi komunikacji, zarówno klient jak i serwer mogą odczytywać lub zapisywać na gniazdach, które są powiązane z określonym kanałem komunikacyjnym.[^04]

Rodzaje gniazdek

Poniżej przedstawiono różne typy gniazd:

Gniazda Datagramu

Jest to typ gniazda sieciowego, które zapewnia punkt bezstykowy do wysyłania i odbierania pakietów danych. Każdy pakiet wysyłany z gniazda datagramu jest indywidualnie kierowany i dostarczany. Może być również używany do wysyłania i odbierania wiadomości telewizyjnych.

Surowe gniazda

Gniazdo to umożliwia dostęp do podstawowego dostawcy usług transportowych. Są one w stanie zapewnić użytkownikom dostęp do podstawowych protokołów komunikacyjnych, które obsługują abstrakcje gniazdek. Zazwyczaj są one zorientowane na datagramy, mimo że ich dokładna charakterystyka zależy od interfejsu dostarczonego przez protokół. Nie są one przeznaczone do użytku ogólnego, ale zostały dostarczone głównie dla tych, którzy są zainteresowani rozwojem nowych protokołów komunikacyjnych lub wykorzystaniem do uzyskania dostępu do pewnych kryptograficznych udogodnień protokołów, które już istnieją.

Sequenced Packet Sockets (Gniazda sekwencyjne)

Jest to podobne do gniazda strumienia, jednak z wyjątkiem tego, że zachowane są granice zapisu. Ten typ gniazda pozwala użytkownikom na manipulowanie sekwencyjnym protokołem pakietowym (SPP) lub internetowym protokołem datagramowym (IDP) w nagłówkach pakietów, a nawet grup pakietów. Gniazdo to umożliwia również odbiór nagłówków dla przychodzących pakietów.

Gniazda strumieniowe

Ten typ gniazdka polega na transmisji danych w oparciu o protokół TCP. Jeśli dostarczenie danych jest niemożliwe, nadawca otrzyma wskaźnik, że połączenie zakończyło się błędem. Zapisy danych nie mają żadnych granic.[4] Gniazdo to zapewnia zorientowany na połączenie, sekwencjonowany i unikalny przepływ danych bez granic zapisu, z dobrze zdefiniowanymi mechanizmami tworzenia i/lub niszczenia połączeń oraz wykrywania błędów. Przesyła wiarygodne dane, w kolejności i bez możliwości pozapasmowych. Przyjmuje się, że procesy komunikują się tylko między gniazdami tego samego typu, ale nie ma ograniczeń, które uniemożliwiają komunikację między tymi gniazdami różnych typów.

Aktywne gniazdo

Jest to połączenie gniazdo ze zdalnie aktywnymi gniazdami poprzez otwarte połączenie danych. Jeśli to połączenie zostanie zamknięte, aktywne gniazda w każdym punkcie również zostaną zniszczone. Jest on używany przez klientów, którzy chcieliby inicjować żądania połączenia w celu nawiązania połączenia. Jednak to aktywne gniazdo może być również przekształcone w gniazdo pasywne poprzez powiązanie nazwy do gniazda z bind-macro oraz poprzez wskazanie gotowości do przyjmowania połączeń z listen-macro.

Gniazdo pasywne

Gniazdo to nie jest podłączone, ale zamiast tego czeka na połączenie przychodzące, które spowoduje powstanie nowego aktywnego gniazda. Jest to wykorzystywane przez serwery w celu akceptacji żądań połączenia z connect-macro. To pasywne gniazdo nie może być używane do inicjowania żądań połączenia. Koncepcje gniazd aktywnych i pasywnych dla gniazd strumieniowych nie mają zastosowania do innych typów gniazd, takich jak gniazdo datagram.[5]

Porty i gniazda

Gniazdo jest interfejsem do wysyłania i odbierania danych na konkretnym porcie, podczas gdy port jest wartością numeryczną przypisaną do konkretnego procesu lub aplikacji w urządzeniu.[6] Nawet jeśli istnieje bliski związek między gniazdem a portem, gniazdo nie jest w rzeczywistości portem. Każdy port może mieć jedno pasywne gniazdo oczekujące na połączenia przychodzące oraz kilka aktywnych gniazd, każde z nich odpowiednio do połączenia otwartego w porcie.[1:1] W dzisiejszych czasach gniazdo ułatwia i usprawnia komunikację. Pozwala to na stworzenie połączenia pomiędzy dwoma różnymi procesami na tych samych lub różnych maszynach. Mówiąc wprost, jest to sposób na rozmowę z innym komputerem.

Historia

Używanie terminu "Socket" rozpoczęło się w 1971 roku, kiedy to został on użyty podczas opracowywania ARPANET. Większość wdrożonych dzisiaj gniazd opiera się na gniazdach Berkerley, które zostały opracowane w 1983 roku. Gniazda używane do nawiązania połączenia internetowego są jednak wzorowane na modelach Winsocka z 1991 roku. Gniazda Berkerley znane są również jako gniazda BSD. W 1989 roku Berkerley wydał wersje swojego systemu operacyjnego i ich bibliotekę sieciową jako wolne od ograniczeń licencyjnych. Inne wczesne wdrożenia zostały napisane dla TOPS-20, MVS, VM i IBM-DOS.


  1. https://www.techopedia.com/definition/16208/socket ↩︎ ↩︎

  2. https://www.webopedia.com/TERM/S/socket.html ↩︎

  3. https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/rzab6/howdosockets.htm ↩︎

  4. https://www.tutorialspoint.com/unix_sockets/what_is_socket.htm ↩︎

  5. https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.hala001/astream.htm ↩︎

  6. http://pediaa.com/difference-between-socket-and-port/ ↩︎