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?

Elzo Valugi
źródło
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.

Nazar Merza
źródło
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.

Daniel Pittman
źródło
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,