Принцип сокета домена Unix. Как это работает?

Я изучаю сокет домена Unix. Особенно о том, как это работает. Я много раз гуглил по многим ключевым словам, но все результаты касались API, системных вызовов, способов его использования, примеров... . Я также читал о Pipe и FIFO, потому что говорят, что сокет домена Unix совпадает с Pipe и FIFO, но я все еще хочу узнать больше о концепции/принципах сокета домена Unix. Как это работает? (Возможно, на уровне ядра, потому что Wiki говорит следующее: «Это позволяет двум процессам открывать один и тот же сокет для связи. Однако связь происходит полностью внутри ядра операционной системы».

Мне все еще интересно, почему документальные фильмы о домене Unix Socket меньше, чем Pipe или FIFO? Может быть, потому, что он родился так много лет назад?

Может ли кто-нибудь показать мне какие-либо идеи или какие книги / ссылки читать?

Заранее спасибо!


person leokaka    schedule 17.02.2013    source источник
comment
В качестве книги попробуйте Сетевое программирование Unix, том 1 У. Ричарда Стивенса. Третье издание является последним, но подержанная копия второго издания будет стоить намного дешевле и ее будет достаточно, если вы не можете найти ее в местной библиотеке.   -  person rob mayoff    schedule 18.02.2013
comment
Спасибо @robmayoff за ваши книги, я их читал. Но там говорится о UDS API :(. Мне нужна информация, может быть, о том, как данные отправляются или принимаются на уровне ядра. Что-то вроде здесь говорят о канале: tldp.org/LDP/lpg/node10.html#SECTION007210000000000000000 Спасибо!   -  person leokaka    schedule 21.02.2013
comment
TCP/IP Illustrated, Vol. 3: TCP для транзакций, HTTP, NNTP и доменные протоколы UNIX, также У. Ричард Стивенс.   -  person rob mayoff    schedule 21.02.2013
comment
@robmayoff :спасибо, я сейчас читаю эту книгу!   -  person leokaka    schedule 21.02.2013
comment
UDS на самом деле больше, чем FIFO, а не меньше.   -  person Omnifarious    schedule 05.12.2017


Ответы (1)


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

Сокеты Unix адресуются как файлы. Это позволяет использовать права доступа к файлам для управления доступом.

Сокеты Unix создаются вызовом socket sys (в то время как FIFO создается mkfifo). Если вам нужен клиентский сокет, вы вызываете connect, передавая ему адрес сокета сервера. Если вам нужен серверный сокет, вы можете привязать, чтобы назначить его адрес. В то время как для FIFO используется открытый вызов. Операция ввода-вывода выполняется чтением/записью.

Сокет Unix может различать своих клиентов, а FIFO - нет. Информация о пире предоставляется вызовом accept, он возвращает адрес пира.

Сокеты Unix являются двунаправленными. Это означает, что каждая сторона может выполнять как операции чтения, так и записи. В то время как FIFO являются однонаправленными: у него есть одноранговый узел записи и одноранговый узел чтения.

Сокеты Unix создают меньше накладных расходов, а связь происходит быстрее, чем с помощью IP-сокетов localhost. Пакеты не должны проходить через сетевой стек, как с сокетами localhost. А так как они существуют только локально, маршрутизации нет.

Если вам нужна дополнительная информация о том, как сокеты Unix работают на уровне ядра, посмотрите файл net/unix/af_unix.c в исходниках ядра Linux.

person Андрей Москвичёв    schedule 17.02.2013
comment
Если вас устраивает мой ответ, поставьте его как лучший ответ. Или добавляйте в комментарии, что еще нужно пояснить. - person Андрей Москвичёв; 17.02.2013
comment
Спасибо за информацию, но я уже читал об этой информации. :( не могли бы вы дать мне более подробную информацию о том, как он отправляет и получает данные? Использует ли он файловый ввод-вывод? Спасибо! - person leokaka; 18.02.2013
comment
Сокеты Unix используют тот же API, что и другие типы сокетов. Они создаются системным вызовом сокета, а затем вы можете подключиться к серверному сокету с помощью вызова подключения или привязать его (если вам нужен серверный сокет). Вызовы чтения/записи могут использоваться для выполнения ввода-вывода. - person Андрей Москвичёв; 18.02.2013
comment
Пожалуйста, посмотрите на эту ссылку tkhanson.net/cgit.cgi/ misc.git/plain/unixdomain/. Я думаю, это будет полезно. - person Андрей Москвичёв; 18.02.2013
comment
Спасибо за информацию, Андрей Москвичёв. Я согласен с вами в том, как использовать UDS через API сокетов. Но все же хочу знать, что именно делает ядро, когда вызывается функция отправки/получения. Это файлы, но как они могут соединяться, отправлять и получать данные друг с другом? Мне нужна информация о том, что происходит на уровне ядра. Кое-что о концепции UDS, как и Pipes в этой ссылке: tldp.org /LDP/lpg/node10.html#SECTION00721000000000000000 Спасибо! - person leokaka; 18.02.2013
comment
Есть идеи друзья? - person leokaka; 20.02.2013
comment
Спасибо @Андрей Москвичёв, попробую! - person leokaka; 21.02.2013
comment
Есть еще одно важное отличие. UDS — это конечная точка, на которую вы можете вызвать bind, а затем accept новые соединения. FIFO — это просто специальный файл, который ведет к небольшому буферу в памяти. Любой, кто пишет в него, пишет в тот же буфер, любой, кто читает, читает из того же буфера. Если вы используете connect и accept с UDS, каждое новое соединение получает свой собственный буфер. - person Omnifarious; 05.12.2017
comment
Ваш текст не отвечает на вопрос Как это работает Вы просто копируете/вставляете общие факты о сокетах из Интернета. Вы не объясняете, как они работают, как сокет может прослушивать. - person Green; 10.04.2018