Яка різниця між сокетом Unix і сокетом TCP / IP?


Відповіді:


191

Сокет UNIX являє собою механізм взаємодії між процесами , який дозволяє здійснювати обмін даними між двонапрямлених процесів , що працюють на одній і тій же машині.

IP-розетки (особливо TCP / IP-розетки) - це механізм, що дозволяє спілкуватися між процесами по мережі. У деяких випадках ви можете використовувати розетки TCP / IP для розмови з процесами, що працюють на одному комп’ютері (за допомогою інтерфейсу зворотного зв'язку).

Розетки домену UNIX знають, що вони виконуються в одній і тій же системі, тому вони можуть уникнути деяких перевірок і операцій (наприклад, маршрутизації); що робить їх швидшими та легшими, ніж IP-розетки. Тож якщо ви плануєте спілкуватися з процесами на одному хості, це кращий варіант, ніж IP-розетки.

Редагувати: Відповідно до коментаря Нілда Тедмана : Розетки домену UNIX підлягають дозволу файлової системи, тоді як TCP-розетки можна керувати лише на рівні фільтра пакетів.


12
Можливо, додамо, що сокети домену UNIX є дозволами файлової системи, тоді як TCP-сокети - ні. Як результат, набагато простіше регулювати, які користувачі мають доступ до сокета домену UNIX, ніж це для сокета TCP.
— Нільс Тодтманн

@pQd, Чувак, ти можеш назвати це Unix IPC замість Unix Sockets?
— Pacerier

4
@Pacerier Unix розетки - це просто один із способів досягнення unix IPC (спільна міжпроцесорна пам’ять серед інших), тому було б неправильно називати unix sockets unix IPC.
— fyquah95

TCP-розетки теж обробляє Unix? TCP-розетки є частиною специфікації протоколу TCP чи будь-який протокол може використовувати IP-сокети?
— Федеріко

@Federico Я опублікував відповідь, яка намагається відповісти на ваш запит, якщо вам потрібна більша глибина, будь ласка, опублікуйте нове запитання.
— Пітер Грін

28

Ви можете перелічити локальні сокети Unix для власної машини за допомогою наступної команди:

netstat -a -p --unix

Веселіться!


9
Unix-сокети не існують у Windows. netstatпроте працює на Windows.
— Марк Томлін

4
@apache, аналогічна річ у Windows називається "Названі труби".
— експерт

5
Іменовані труби також присутні в Linux.
— Сахіл Сінгх

9
@expert, названі труби в Windows дорівнює ім'ям труб в Unix. IPC-розетки в Unix не мають еквівалентності в Windows
— Pacerier

2
У Windows 10 є підтримка сокетів Unix. Існують деякі обмеження, але вони доступні: blogs.msdn.microsoft.com/commandline/2017/12/19/…
— Тайсон

12

Яка різниця між сокетом Unix і сокетом TCP / IP?

TCP / IP-розетка використовується для зв'язку через мережі TCP / IP. Підключений сокет TCP ідентифікується за допомогою комбінації локального IP, локального порту, віддаленого IP та віддаленого порту. Прослуховуючий сокет TCP ідентифікується за допомогою локального порту та, можливо, локального IP. AIUI, щонайменше, у Linux-сокетах TCP / IP завжди призводить до генерації та декодування пакетів TCP / IP, навіть якщо клієнт і сервер знаходяться на одній машині.

Socket домену unix (іноді скорочується до unix socket), з іншого боку, працює на одній машині. Прослуховування сокетів живе в ієрархії файлової системи, а доступ до них можна керувати дозволами файлової системи.

Крім того, процес, що приймає з'єднання в сокет Unix, може визначати ідентифікатор користувача процесу, який підключається. Це дозволяє уникнути необхідності кроку аутентифікації. Замість того, щоб генерувати пароль для вашого сервера баз даних і включати його копію в код вашого веб-сайту, ви можете просто сказати серверу бази даних, що користувач, який працює з веб-сервером, має доступ до відповідного облікового запису користувача в базі даних.


TCP-розетки теж обробляє Unix?

Звичайно

TCP-розетки є частиною специфікації протоколу TCP

Специфікації Інтернет-протоколу стосуються лише того, що відбувається на дроті, специфікація TCP містить визначення Socket, але це визначення не є таким, як термін використовується API "sockets".

"Sockets API", як ми знаємо, він був введений BSD, але згодом був скопійований повсюдно і включений як частина стандарту posix. Основний матеріал для TCP і UDP сокетів, як правило, однаковий на різних платформах, але більш досконалі речі та речі, які взаємодіють з іншими частинами ОС, різняться, наприклад, в unix-подібних системах розетка визначається за допомогою файлової ручки і може Читати / записувати файли API, це не так у Windows.

Деякі розширення API сокетів були задокументовані у форматі rfcs, але ці RFC є лише "інформаційними".

чи будь-який протокол може використовувати IP-розетки?

Коли програма явно створює сокет за допомогою функції "socket" (сокети також створюються функцією accept), він передає три параметри, "домен", "тип" і "протокол". Між ними ці три параметри можна використовувати для вибору багатьох різних типів розетки.

  • Домен вибирає сімейство використовуваних протоколів / адрес, наприклад AF_INET для ipv4, AF_INET6 для ipv6, AF_Unix для шляхів файлової системи unix тощо.
  • тип вибирає семантику зв'язку, основними з них є дейтаграма та потік, але є й інші більш спеціалізовані типи.
  • Протокол вибирає протокол для використання, якщо для нього встановлено 0, буде використано протокол за замовчуванням для комбінації Домена та типу.

"Прослуховування сокетів живе в ієрархії файлової системи, і доступ до них можна контролювати за допомогою дозволів файлової системи." Чи означає це, що два сервери, які мають доступ до однієї файлової системи, можуть мати змогу спілкуватися через сокет?
— користувач5359531

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.