Proste objaśnienie gniazd uniksowych


20

Mogę wyszukiwać i przeglądałem już wpis w Wikipedii oraz w niektórych innych miejscach, ale chociaż mam pewne doświadczenie w programowaniu, tak naprawdę nie rozumiem tego pojęcia. Czy możesz potraktować mnie jak 10-latka i podać jasne wyjaśnienie dotyczące komunikacji przez gniazdo?


Napisz kilka małych testowych aplikacji, które z nich korzystają. Nie potrzebujesz nawet dwóch maszyn, tylko dwie małe aplikacje do uruchomienia. Bingo
— Patrick Hughes,

Przewodnik Beej po programowaniu sieci wydaje się być bardzo popularnym tekstem wprowadzającym do gniazd systemu Unix, chociaż nie mogę powiedzieć, że mi się podoba.
— Nemanja Trifunovic

Już głosowałem odpowiedź @DanielPittman, gdybym musiał napisać, napisałbym tę samą odpowiedź; Ale jeśli chcesz więcej pomocy, chciałbym przedłużyć. Zmodyfikuj swoje pytanie, opowiedz o tym, co wiesz, a czego nie, a także daj mi znać, czy szukasz pomocy w użyciu, jak działają w środku, czy teoretycznej (projektowanie protokołu), czy próbujesz ocenić w jakimś celu?
— Dipan Mehta

Oto książka: Programowanie w sieci Unix . Każdy na ziemi, kto odpowiedziałby na to pytanie, nauczyłby się od tej matki. Przeczytaj tę książkę, twoje pytanie stanie się lepsze.
— Dipan Mehta

Masz na myśli gniazda BSD? Gniazda uniksowe działają tylko lokalnie.
— imel96

Odpowiedzi:


15

Dam ci przykład: powiedz, że chcesz komunikować się / rozmawiać z przyjacielem, który nie mieszka pod twoim adresem. Aby tak się stało, musisz ustanowić „kanał komunikacyjny”. Powiedz, że chcesz wykonać tę komunikację za pomocą telefonów. Wiesz, że w mieście jest sieć linii telefonicznych, która obejmuje każdy dom.

Teraz w twoim domu jest gniazdo telefoniczne i jedno w domu twoich przyjaciół. Aby komunikacja mogła się odbyć, ty i twój przyjaciel musicie połączyć się z siecią, podłączając telefon do gniazda na obu końcach komunikacji. Gniazda w programowaniu są koncepcyjnie takie same jak gniazda telefoniczne.

W programowaniu masz dwa procesy (uruchomione programy), które chcą się ze sobą komunikować. W tym celu muszą ustanowić połączenie komunikacyjne między sobą. Ponownie dostępna jest sieć, wystarczy podłączyć się do tej sieci za pomocą pewnego rodzaju gniazd. Gniazda Unix są jednym z takich gniazd, które zapewniają tę łączność / możliwość podłączenia do sieci. Tak więc, w każdym z dwóch programów, będziesz miał kawałek kodu, który wykonuje połączenie z siecią przez gniazda.

Reszta to szczegóły.


2
Głosowałbym za tym, gdybym miał wystarczającą reputację. Twój tekst nie wyjaśnia, jak działa gniazdo. Taki sam ogólny tekst jak w Wikipedii. Jak nasłuchuje gniazdo ? Jak gniazdo telefoniczne może nasłuchiwać połączenia?
— Zielony,

21

Gniazda uniksowe są gniazdem dwukierunkowym - podobnie jak gniazdo oparte na IP, które zapewne znasz i podobne do potoku, który prawdopodobnie znasz.

Mają mały zestaw interesujących właściwości:

  • Znajdują się one tylko w domenie „hosta lokalnego” - nie można uzyskać do nich dostępu przez sieć, tylko na komputerze lokalnym.
  • Możesz je tworzyć w trybie „stream”, w którym po prostu przekazują dane jak potok jako strumień bajtów.
  • Możesz je utworzyć w trybie „datagramu”, w którym zachowują granice między operacjami wysyłania. Umożliwia to zachowanie ramkowania bez budowania własnego protokołu ramkowania na szczycie strumienia bajtów.
  • Używają systemu plików lub w systemie Linux „abstrakcyjnej przestrzeni nazw” jako swojego „adresu”
  • W zależności od systemu operacyjnego możesz podszyć się pod drugi koniec, bezpiecznie zidentyfikować łączące się oprogramowanie lub przekazać uchwyty plików nad gniazdem.

Zasadniczo są one odpowiednikiem każdego innego gniazda - mają nieco bardziej interesujące właściwości niż rury, ale poza tym nie różnią się radykalnie. Zazwyczaj mają one większe opóźnienie IPC niż potok i często większe bufory - chociaż możesz je dostroić i zależy to od platformy.

Ostatnią interesującą właściwością do zapamiętania jest to, że używają systemu plików jako przestrzeni nazw - więc są jak nazwany potok, a nie anonimowy potok, w tym oprogramowaniu bez wcześniejszego związku. (Abstrakcyjne gniazda przestrzeni nazw są takie same, ale ścieżka „pliku” nie musi istnieć).

Nie ma nic głębszego - nie mają żadnej super tajnej ukrytej właściwości, która radykalnie różni się od typowej potoku lub połączenia TCP z hostem lokalnym.


3
Dzięki, ale wciąż uważam to za skomplikowane i pełne argotów.
— Elzo Valugi,

2
Nie obrażaj się na tę próbę odpowiedzi w jednym wierszu, aby sprawdzić, czy to lepiej pomaga: „Wiesz, jak działają gniazda TCP / IP i UDP / IP? Są takie same, tylko bez części IP”.
— Daniel Pittman,

Nie obrażam się, chcę tylko zrozumieć. Dzięki. Przestudiuję je bardziej szczegółowo.
— Elzo Valugi,

4
Zdefiniowanie terminu przy użyciu tego terminu (tj .: „Gniazda unixowe są gniazdem dwukierunkowym”) nie wyjaśnia niczego komuś, kto nie wie, od czego ma zacząć gniazdo.
— Bryan Oakley,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.