Jaka jest różnica między gniazdem Unix a gniazdem TCP / IP?

Odpowiedzi:

191

Gniazdo UNIX jest mechanizm komunikacji między procesami, które umożliwia dwukierunkową wymianę danych pomiędzy procesami uruchomionych na tej samej maszynie.

Gniazda IP (szczególnie gniazda TCP / IP) są mechanizmem umożliwiającym komunikację między procesami w sieci. W niektórych przypadkach możesz używać gniazd TCP / IP do komunikowania się z procesami uruchomionymi na tym samym komputerze (za pomocą interfejsu sprzężenia zwrotnego).

Gniazda domenowe UNIX wiedzą, że wykonują się w tym samym systemie, więc mogą uniknąć niektórych kontroli i operacji (takich jak routing); dzięki czemu są szybsze i lżejsze niż gniazda IP. Jeśli więc planujesz komunikować się z procesami na tym samym hoście, jest to lepsza opcja niż gniazda IP.

Edycja: Zgodnie z komentarzem Nilsa Toedtmanna : Gniazda domeny UNIX podlegają uprawnieniom systemu plików, zaś gniazdami TCP można sterować tylko na poziomie filtru pakietów.

pQd
źródło
12
Może dodać, że gniazda domeny UNIX podlegają uprawnieniom systemu plików, a gniazda TCP nie. W rezultacie znacznie łatwiej jest regulować, którzy użytkownicy mają dostęp do gniazda domeny UNIX niż do gniazda TCP.
Nils Toedtmann
@pQd, koleś, możesz nazwać to Unix IPC zamiast Unix Sockets?
Pacerier
4
@Pacerier Unix sockets to po prostu jeden ze sposobów na osiągnięcie uniksowego IPC (współużytkowanej pamięci międzyprocesowej), więc nie byłoby poprawne nazywanie uniksowych gniazd unix IPC.
fyquah95
Gniazdami TCP obsługuje także Unix? Gniazda TCP są częścią specyfikacji protokołu TCP czy jakiś protokół może używać gniazd IP?
Federico
@Federico Wysłałem odpowiedź, która próbuje odpowiedzieć na twoje zapytanie, jeśli potrzebujesz więcej szczegółów, opublikuj nowe pytanie.
Peter Green,
28

Możesz wyświetlić listę własnych lokalnych gniazd unixowych komputera za pomocą następującego polecenia:

netstat -a -p --unix

Baw się dobrze!

The Unix Janitor
źródło
9
Gniazda uniksowe nie istnieją w systemie Windows. netstatdziała jednak w systemie Windows.
Mark Tomlin
4
@apache, podobna rzecz w systemie Windows o nazwie „Nazwane potoki”.
ekspert
5
Nazwane potoki są również obecne w systemie Linux.
Sahil Singh
9
@expert, nazwane potoki w systemie Windows są równe nazwanym potokom w systemie Unix. Gniazda IPC w Uniksie nie mają odpowiedników w systemie Windows
Pacerier
2
Windows 10 obsługuje gniazda Unix. Istnieją pewne ograniczenia, ale jest on dostępny: blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson
12

Jaka jest różnica między gniazdem Unix a gniazdem TCP / IP?

Gniazdo TCP / IP służy do komunikacji między sieciami TCP / IP. Podłączone gniazdo TCP jest identyfikowane przez połączenie lokalnego adresu IP, portu lokalnego, zdalnego adresu IP i portu zdalnego. Nasłuchujące gniazdo TCP jest identyfikowane przez port lokalny i ewentualnie lokalny adres IP. AIUI przynajmniej na gniazdach TCP / IP systemu Linux zawsze powoduje generowanie i dekodowanie pakietów TCP / IP, nawet jeśli klient i serwer znajdują się na tej samej maszynie.

Z drugiej strony gniazdo domeny unix (czasami skracane do gniazda unix) działa na jednej maszynie. Gniazda nasłuchowe znajdują się w hierarchii systemu plików, a dostęp do nich można kontrolować za pomocą uprawnień systemu plików.

Ponadto proces akceptujący połączenie w gnieździe uniksowym może określić identyfikator użytkownika łączącego się procesu. Dzięki temu można uniknąć konieczności uwierzytelnienia. Zamiast generować hasło do serwera bazy danych i umieszczać jego kopię w kodzie aplikacji internetowej, możesz po prostu powiedzieć serwerowi bazy danych, że użytkownik uruchamiający aplikację internetową ma dostęp do odpowiedniego konta użytkownika w bazie danych.


Gniazdami TCP obsługuje także Unix?

Oczywiście

Gniazda TCP są częścią specyfikacji protokołu TCP

Specyfikacje protokołu internetowego zwykle dotyczą tylko tego, co dzieje się na kablu, specyfikacja TCP zawiera definicję Socket, ale ta definicja nie jest taka sama, jak sposób, w jaki termin jest używany przez „API gniazd”.

„Interfejs API gniazd”, jaki znamy, został wprowadzony przez BSD, ale później został skopiowany w dowolnym miejscu i jest zawarty jako część standardu POSIX. Podstawowe rzeczy dla gniazd TCP i UDP wydają się być takie same na różnych platformach, ale bardziej zaawansowane rzeczy i rzeczy, które współdziałają z innymi częściami systemu operacyjnego są różne, na przykład w systemach uniksowych gniazdo jest identyfikowane przez uchwyt pliku i może odczytywane / zapisywane przez interfejsy API plików, nie dotyczy to Windows.

Niektóre rozszerzenia API gniazd zostały udokumentowane w rfcs, ale te RFC mają jedynie charakter informacyjny.

czy jakikolwiek protokół może korzystać z gniazd IP?

Gdy aplikacja jawnie tworzy gniazdo za pomocą funkcji „gniazdo” (gniazda są również tworzone przez funkcję accept), przekazuje trzy parametry: „domena”, „typ” i „protokół”. Pomiędzy nimi te trzy parametry można wykorzystać do wyboru wielu różnych typów gniazd.

  • domena wybiera rodzinę używanych protokołów / adresów, np. AF_INET dla ipv4, AF_INET6 dla ipv6, AF_Unix dla ścieżek systemu plików unix itp.
  • type wybiera semantykę komunikacji, przy czym głównymi są datagram i strumień, ale są też inne bardziej wyspecjalizowane typy.
  • protokół wybiera protokół, który ma być używany, jeśli jest ustawiony na 0, zostanie użyty domyślny protokół dla kombinacji Domeny i typu.
Peter Green
źródło
„Gniazda nasłuchowe znajdują się w hierarchii systemu plików, a dostęp do nich można kontrolować za pomocą uprawnień systemu plików”. Czy to oznacza, że ​​dwa serwery, które mają dostęp do tego samego systemu plików, mogą komunikować się przez gniazdo?
user5359531
AIUI niestety nie. superuser.com/questions/352263/…
Peter Green