В чем разница между сокетом Unix и сокетом TCP / IP?

Ответы:

191

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

Сокеты IP (особенно сокеты TCP / IP) - это механизм, позволяющий осуществлять связь между процессами по сети. В некоторых случаях вы можете использовать сокеты TCP / IP для связи с процессами, запущенными на одном компьютере (с помощью интерфейса обратной связи).

Доменные сокеты UNIX знают, что они выполняются в одной и той же системе, поэтому они могут избежать некоторых проверок и операций (например, маршрутизации); что делает их быстрее и легче, чем IP-сокеты. Поэтому, если вы планируете взаимодействовать с процессами на одном хосте, это лучший вариант, чем IP-сокеты.

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

PQD
источник
12
Возможно, добавьте, что сокеты домена UNIX подчиняются разрешениям файловой системы, а сокеты TCP - нет. В результате гораздо проще регулировать, какие пользователи имеют доступ к сокету домена UNIX, чем к сокету TCP.
Нильс Тёдтманн
@pQd, чувак, можешь ли ты назвать это Unix IPC вместо Unix Sockets?
Pacerier
4
@Pacerier Unix-сокеты - это просто один из способов достижения Unix IPC (совместно используемой межпроцессной памяти среди других), поэтому было бы неправильно называть unix-сокеты 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, даже если клиент и сервер находятся на одном компьютере.

Сокет домена unix (иногда сокращенный до сокета unix), с другой стороны, работает на одном компьютере. Прослушивающие сокеты живут в иерархии файловой системы, и доступ к ним может контролироваться разрешениями файловой системы.

Кроме того, процесс, принимающий соединение через сокет Unix, может определить идентификатор пользователя процесса, который подключается. Это может избежать необходимости в шаге аутентификации. Вместо того, чтобы генерировать пароль для вашего сервера базы данных и включать его копию в код вашего веб-приложения, вы можете просто сообщить серверу базы данных, что пользователь, выполняющий веб-приложение, имеет доступ к соответствующей учетной записи пользователя в базе данных.


TCP-сокеты тоже обрабатываются Unix?

Конечно

TCP-сокеты являются частью спецификации протокола TCP

Спецификации интернет-протокола имеют тенденцию касаться только того, что происходит в сети, спецификация TCP содержит определение Socket, но это определение не совпадает с тем, как термин используется в «API сокетов».

«API сокетов», как мы знаем, было введено BSD, но позже было скопировано повсеместно и включено как часть стандарта posix. Основные вещи для сокетов TCP и UDP, как правило, одинаковы для разных платформ, но более сложные вещи и вещи, взаимодействующие с другими частями ОС, различаются, например, в Unix-подобных системах сокет идентифицируется дескриптором файла и может быть прочитанным / записанным файловыми API, это не относится к Windows.

Некоторые расширения API сокетов были задокументированы в rfcs, но эти RFC являются только «информационными».

или любой протокол может использовать IP-сокеты?

Когда приложение явно создает сокет, используя функцию «сокет» (сокеты также создаются функцией accept), он передает три параметра: «домен», «тип» и «протокол». Между ними эти три параметра могут использоваться для выбора множества различных типов сокетов.

  • домен выбирает семейство используемых протоколов / адресов, например, AF_INET для ipv4, AF_INET6 для ipv6, AF_Unix для путей файловой системы unix и т. д.
  • Тип выбирает семантику связи, основными из которых являются датаграмма и поток, но есть и другие более специализированные типы.
  • протокол выбирает протокол для использования, если он установлен в 0, будет использоваться протокол по умолчанию для комбинации Домена и типа.
Питер Грин
источник
«Прослушивающие сокеты живут в иерархии файловой системы, и доступ к ним может контролироваться разрешениями файловой системы». Означает ли это, что два сервера, которые имеют доступ к одной и той же файловой системе, могут обмениваться данными через сокет?
user5359531
AIUI к сожалению нет. superuser.com/questions/352263/…
Питер Грин