Яка різниця між сокетом 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.