LINUX.ORG.RU

В чём разница между «Network Socket» и «UNIX domain socket»?

 


0

1

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

У слова «сокет» как минимум два семантических значения:
1) это имя API (интерфейса, программного, то есть набора функций), пишет нам Сокет_(программный_интерфейс).
Стандарт POSIX.1 описывает программный интерфейс сокетов.
2) «абстрактный объект, представляющий конечную точку соединения», но когда соединение устанавливается или установлено, объекты-то вполне себе не абстратные, где-то находятся, к ним создаются хэндлы (наверное).

В ядре два комплекта сисколлов или один, а разница в параметрах фунции создания сокета?
Когда надо описать сокет буквами, то где описан синтаксис, при помощи которого это делается для каждого из двух видов сокетов?

«любое чтение или запись через его файловый дескриптор будут передавать данные между ним и сервером.»

Что общего между дескрипторами сокетов и файловым дескриптором, как из первого получить второе?

Практический вопрос - если указать имя локального сокета в переменной $DISPLAY, то будет работать клиентский софт или нет?

Мне кажется, что было бы хорошей практикой с точки зрения безопасности держать поменьше открытых портов на компьютере, и удивляет, что соединение через UNIX Socket не является видом соединения по-умолчанию.

★★★★

Последнее исправление: Shushundr (всего исправлений: 1)

В ядре два комплекта сисколлов или один, а разница в параметрах фунции создания сокета?

Что общего между дескрипторами сокетов и файловым дескриптором

В UNIX-подобных системах дескрипторы сокетов являются просто одной из разновидностей файловых дескрипторов (fd), при этом большинство сисколлов единообразно работает с любыми видами fd независимо от их происхождения.

когда соединение устанавливается или установлено, объекты-то вполне себе не абстратные, где-то находятся, к ним создаются хэндлы (наверное)

Совершенно верно, обекты создаются в ядре, а их юзерспейсными хэндлами являются fd.

Когда надо описать сокет буквами, то где описан синтаксис, при помощи которого это делается для каждого из двух видов сокетов?

man 2 socket

Практический вопрос - если указать имя локального сокета в переменной $DISPLAY, то будет работать клиентский софт или нет?

Там все сокеты по-умолчанию локальные, если не указано имя хоста

удивляет, что соединение через UNIX Socket не является видом соединения по-умолчанию

Где?

annulen ★★★★★
()

Сокет (любой) это абстрактный интерфейс со стандартным базовым набором системных вызовов (bind/send/recv/shutdown/ioctl/etc), но в зависимости от типа сокета набор операций может быть расширен - как правило за счёт расширенных ioctl с разными параметрами. Ну и надо разделять системный вызов и его функцию, ибо тот же ioctl это один системный вызов в котором много функций

no-dashi-v2 ★★★
()
Последнее исправление: no-dashi-v2 (всего исправлений: 1)

Сокет - это тип файла в UNIX.

bigbit ★★★★★
()

В чём разница между «Network Socket» и «UNIX domain socket»?

разница в том что на обычный сокет могут подключиться все, а unix socket это объект файловой системы, и на него действует discretionary access control. основное предназначение - межпроцессное взаимодействие.

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 1)
Ответ на: комментарий от anonymous2

Я хочу заставить unix socket работать через границу lxc-контейнера.

Обычный сокет так не сможет, потому что в контейнере и на HOST машине разные сетевые адреса. То есть, я хочу, чтобы с контейнера можно было подключиться к хосту, но нельзя было подключиться к хосту из локальной сети.

Сделать общий файл я могу. Сможет ли Xorg-server им воспользоваться?

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 5)
Ответ на: комментарий от anonymous2

Мне обещали, что через UNIX-сокеты будет работать быстрее, потому что не нужно создавать заголовки пакетов, и таким образом передаётся меньше данных. Я понимаю, что это незаметно, но философия gentoo это «пару процентов тут, пару процентов там»…

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

unix конечно быстрее сокетов на localhost которые быстрее сокетов на ethernet

anonymous2 ★★★★★
()
Ответ на: комментарий от Shushundr

Надо сделать bind mount сокета в mount namespace контейнера.

iliyap ★★★★★
()
Ответ на: комментарий от Shushundr

Разница даже не пара процентов, а 0.0002%. Ни в каком реальном приложении ни на каком железе эту разницу нельзя будет заметить.

emorozov
()

Зачем нужен «Socket owner» и что будет, если его не установить? А если установить, то на что это повлияет? Если socket owner - это группа процессов, то сигнал SIGURG рассылается всем? Или никому?

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.