Co to jest gniazdo?

Czy ktoś mógłby mi wyjaśnić, czym jest gniazdo? Widzę to w wielu akronimach w kontekście SSL itp.

Poza tym, dlaczego nazywa się to gniazdem? Czy to tylko dlatego, że taką nazwę wymyślili? A może było to pierwsze imię, które wymyślili?

Komentarze

  • W laikach ' terminach: gniazdo to telefon. To ' to rzecz, którą trzymasz w dłoni, która pozwala na rozmowę z innym telefonem. Analogia trochę się załamuje: większość rozmów telefonicznych odbywa się w trybie peer-to-peer. Połączenia przez gniazdo są typu klient-serwer. Klient (taki jak między innymi oprogramowanie stacji roboczej, takie jak przeglądarki) łączy się z serwerem (takim jak serwer WWW, serwer plików, serwer uwierzytelniania lub inny). Kolejny błąd w analogii: kiedy zamykasz połączenie z gniazdem, gniazdo jest niszczone i musisz utworzyć nowe gniazdo, zanim będziesz mógł ustanowić nowe połączenie.
  • It ' nie jest taki zły jak na analogię. Serwer to tylko call center i może mieć wiele setek aktywnych połączeń naraz.

Odpowiedź

Gniazdo jest tylko logicznym punktem końcowym komunikacji. Występują w warstwie transportowej. Możesz wysyłać i odbierać rzeczy przez gniazdo, możesz wiązać i słuchać gniazda. Gniazdo jest specyficzne dla protokołu, komputera i portu i jako takie jest adresowane w nagłówku pakietu.

Przewodniki Beej po Sieć Programowanie i Komunikacja między procesami mają dobre informacje na temat korzystania z gniazd, a nawet odpowiedz dokładnie na to pytanie .

Odpowiedź

Najprościej mówiąc, gniazdo to pseudo-plik reprezentujący połączenie sieciowe. Po utworzeniu gniazda (przy użyciu odpowiednich prymitywów i odpowiednich parametrów identyfikujących inny host), zapisy do gniazda są przekształcane w pakiety sieciowe, które są wysyłane, a dane otrzymane z sieci mogą być odczytywane z gniazda.

Pod jednym względem gniazda są bardzo podobne do potoków: dla programów, które ich używają, wyglądają jak pliki, ale nie powodują odczytu ani zapisu na dysku; raczej umożliwiają komunikację z innym programem (lokalnym w przypadku rur i po słabo zdalny w przypadku gniazd). Oferują również, jak wspomniałeś, komunikację dwukierunkową (podobnie jak para prawidłowo połączonych rur).

W końcu programy na jednym komputerze często komunikują się przy użyciu standardowych protokołów sieciowych, takich jak TCP ; byłoby marnotrawstwem przechodzenie całej drogi do sprzętu sieciowego (jeśli w ogóle!), obliczania sum kontrolnych itp., po prostu wracając do tego samego hosta: to jest miejsce, w którym pojawiają się gniazda domen uniksowych. To jest bardzo podobne do zwykłych gniazd , z wyjątkiem tego, że łączą procesy na tym samym hoście, a nie zdalne procesy i nie próbują w ogóle używać żadnych zasobów sieciowych. W ten sposób są medium komunikacji między procesami.

Jak wspomniała tripleee , w historii BSD potoki zostały wprowadzone wcześniej niż gniazda i zostały ponownie zaimplementowane przy użyciu gniazd, które już istniały. To samo odniesienie, The Design and Implementation of the FreeBSD Operating System , wspomina, że potoki zostały następnie przywrócone do implementacji innej niż gniazdo ze względu na wydajność: to z pewnością podkreśla fakt, że potoki mają podobieństwa.

Komentarze

  • Może też wspomnieć, że potoki są starsze niż gniazda, ale gdy interfejs gniazda został dodany do Uniksa, miał sens o ponownie zaimplementuj potoki przy użyciu lokalnych gniazd.
  • @tripleee: To ' to świetny punkt historyczny. Chcesz podać odniesienie?
  • Pojawia się szybkie wyszukiwanie google na stronie 40 w Projekt i implementacja systemu operacyjnego FreeBSD ; tekst wspomina o tej zmianie w 4.2BSD, ale także wyjaśnia, że ' nie jest już tak zrobione ze względu na wydajność.
  • Świetnie, ' dodam to do mojej odpowiedzi.
  • Najlepsza odpowiedź techno ze wszystkich

Odpowiedź

Co to jest?

Gniazdo lub „gniazdo” może oznaczać kilka rzeczy:

Po pierwsze, jest to myśl model i interfejs programowania aplikacji (API) . Oznacza to, że masz zestaw reguł, których musisz przestrzegać, i zestaw funkcji, których możesz użyć do pisania programów, które coś robią, zgodnie z precyzyjnie określoną umową. W tym konkretnym przypadku coś oznacza wymianę danych z innym programem.

API gniazd szeroko abstrakcyjnie opisuje szczegóły „komunikacji” w ogóle. Zawiera informacje o tym, z kim i w jaki sposób rozmawiasz, w jednym (prawie) spójnym i identycznym formularzu do usuwania plików cookie.
Możesz tworzyć gniazda w różnych „domenach” (takich jak np.„gniazdo unixowe” lub „gniazdo internetowe”) i różnych typów komunikacji (np. gniazdo „datagram” lub gniazdo „strumień”) i rozmawiają z różnymi odbiorcami, a wszystko działa dokładnie tak samo (no cóż, 99%, istnieją oczywiście drobne różnice, które będziesz musiał uwzględnić).

Nie musisz wiedzieć (i nie chcesz nawet wiedzieć!), czy rozmawiasz z innym programem na tym samym komputerze, czy na innym komputerze lub czy między tymi komputerami jest sieć IPv4 lub IPv6, albo może jakiś inny protokół, o którym nigdy nie słyszałeś.

socket to także nazwa funkcji bibliotecznej (lub wywołania systemowego), która tworzy „gniazdo „, czyli specjalny rodzaj pliku (wszystko w systemie Unix to plik).

Jak to się ma do …

gniazda należą do tej samej kategorii co potoki i nazwij potoki

Potok oznacza o ne way komunikacja między czytelnikiem a pisarzem (oba są programami) na tym samym komputerze. Symuluje strumień danych (tak jak np. TCP).
Oznacza to, że z punktu widzenia potoku nie istnieją żadne pojedyncze „wiadomości” ani „bloki danych”. Możesz skopiować dowolną ilość danych na „jednym końcu”, a ktoś inny może odczytać dowolną ilość danych (niekoniecznie tę samą i niekoniecznie za jednym razem) na „drugim końcu” w tej samej kolejności bajtów, w jakiej je wprowadziłeś .

nazwany potok to po prostu potok będący właścicielem nazwy w systemie plików . Oznacza to, że jest to coś, co wygląda i zachowuje się jak plik, pojawia się w liście katalogów i możesz go otworzyć, zapisać do niego itp. Itd. Zauważ, że możesz także tworzyć specjalne pliki gniazd (to byłyby nazwane gniazdo).

Z drugiej strony gniazdo jest środkiem dwukierunkowym (” dupleks ”), co oznacza, że możesz zapisywać i czytać z tego samego gniazda i nie potrzebujesz dwóch oddzielnych gniazd do komunikacji dwukierunkowej.
Ponadto gniazdo może działać jako strumień (identycznie jak potok ), lub może wysyłać dyskretne, zawodne wiadomości lub może wysyłać dyskretne, uporządkowane wiadomości (pierwsze dwie działają na dowolnej domenie, ostatnia tylko w „domenie unix”). Może wysyłać wiadomości (lub symulować strumień) do kogoś na zupełnie innym komputerze. Gniazdo może nawet w pewnych warunkach realizować formę komunikacji jeden-do-wielu (multiemisja).

Mając to na uwadze, jasne jest, że gniazda robią coś znacznie bardziej skomplikowanego i ogólnie mają więcej narzutów niż potoki (które w zasadzie nie są niczym więcej niż prostym memcpy do iz bufora!), ale jeśli utworzysz lokalne gniazda (tj. na tym samym komputerze) system operacyjny zazwyczaj stosuje mocno zoptymalizowaną szybką ścieżkę, więc nie ma dużej różnicy.

komunikacja między procesami czasami wspominane w odniesieniu do sieci

Tak, gniazda są jednym z możliwych sposobów komunikacji między procesami (pamięć współdzielona i potoki są przykładami alternatyw). Wszystkie jednocześnie są używane do „tworzenia sieci”, jak wyjaśniono powyżej.

Odpowiedź

Gniazdo a abstrakcja . Zapewnia interfejs dla aplikacji do wykorzystywania zasobów systemowych (w tym przypadku połączenia sieciowego) w sposób, który umożliwia systemowi operacyjnemu pośredniczenie i organizowanie wykorzystania ograniczonego zasobu przez dowolną liczbę aplikacji.

Jeśli dane przesyłane przez gniazdo można by traktować jako koperty pocztowe, to gniazdo byłoby skrzynką pocztową. Dołączasz skrzynkę pocztową (gniazdo) do swojego domu (programu) i umieszczasz w niej swoją pocztę wychodzącą (dane). W zaplanowanym czasie przychodzi listonosz (system operacyjny) i odbiera pocztę wychodzącą, a następnie wysyła pocztę przychodzącą do tej samej skrzynki pocztowej. Twoja poczta wychodząca jest przekazywana w Twoim imieniu do odbiorcy za pośrednictwem ciężarówki listonosza (połączenie sieciowe) wraz z pocztą wszystkich sąsiadów. Dzięki temu możesz korespondować z ludźmi znajdującymi się daleko, bez konieczności ponoszenia kosztów, czasu, trudności itp. Związanych z samodzielnym dostarczeniem listu.

Jeśli chodzi o to, dlaczego nazywają się oni „gniazdami”, myśl, że wynalazcy mogą nazywać to, jak chcą, prawdopodobnie odgrywa tam dużą rolę. Chociaż, moim zdaniem, nie jest to złe imię 🙂

Odpowiedź

W przypadku udp lub tcp over IP

Adres gniazda to połączenie adresu IP i numeru portu.

Adres IP to adres maszyna w internecie np unix.stackexchange.com has address 198.252.206.140

Jednak każdy komputer musi być w stanie zapewnić więcej niż jedną usługę, więc większość komputerów udostępnia http (strony internetowe) na porcie 80 i ssh na porcie 22 itd.

Więc unix.stackexchange.com:80 port 80 of unix.stackexchange.com (gniazdo) jest punktem dostępu do tej witryny internetowej.

Istnieją jednak inne typy gniazd, patrz komentarze poniżej.

Komentarze

  • tcp / ip to tylko jeden rodzaj gniazdo elektryczne. Są inne, które nie mają nic wspólnego z tcp / ip.
  • ile jest różnych rodzajów gniazd?
  • @AbdulAlHazred, znam cztery popularne typy używane w sieciach IP, to samo z ip6, dwa z unixem i dwa z IPX. Nie patrzyłem na ax25, atm czy appletalk. Istnieją inne protokoły obsługiwane w systemie Linux i są protokoły, których system Linux nie obsługuje. W większości przypadków każdy protokół ma gniazda strumieniowe (tcp) i datagramowe (udp). Surowe gniazda są również powszechne, a imcp może również mieć interfejs gniazda.
  • Rzecz w tym, że ta odpowiedź jest niekompletna, ponieważ obejmuje tylko jeden typ gniazda, i wprowadza w błąd, ponieważ reprezentuje gniazda w ogólności jako gdyby zawsze były gniazdami sieciowymi, a konkretnie gniazdami IP (AF_INET).

Odpowiedź

Myślę, że pytałeś o tworzenie sieci. Dlatego usługi TCP używają gniazd jako punktu komunikacji i składają się z adresu IP, protokołu i numeru portu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *