Простое объяснение сокетов Unix

20

Я могу искать, и я уже просмотрел статью в Википедии и в некоторых других местах, но, хотя у меня есть некоторый опыт программирования, я не совсем понимаю эту концепцию. Можете ли вы относиться ко мне, как к 10-летнему ребенку, и дать мне четкое объяснение в отношении сокетов

Эльзо Валуги
источник
Напишите несколько небольших тестовых приложений, используя их. Вам даже не нужны две машины, просто два небольших приложения для запуска. Бинго.
Патрик Хьюз
Руководство Beej по сетевому программированию кажется очень популярным вводным текстом для сокетов Unix, хотя я не могу сказать, что мне это нравится.
Неманя Трифунович
Я уже проголосовал за ответ @DanielPittman, если бы мне пришлось писать, я написал бы тот же ответ; Тем не менее, если вы хотите больше помощи, я бы расширил. Пожалуйста, отредактируйте свой вопрос, объясните, что вы знаете, а что нет, а также дайте мне знать, смотрите ли вы на помощь в том, как использовать, как они работают внутри, или на теоретическую (дизайн протокола), или вы пытаетесь оценить для какой-то цели?
Дипан Мехта
Вот книга: Сетевое программирование Unix . Любой человек на земле, который ответит на этот вопрос, должен учиться у этой матери. Прочитайте эту книгу, ваш вопрос сам станет лучше.
Дипан Мехта
Ты имеешь ввиду BSD розетки? Unix-сокеты работают только локально.
imel96

Ответы:

15

Позвольте привести пример: скажем, вы хотите общаться / общаться в чате со своим другом, который живет не по вашему адресу. Чтобы это произошло, вы должны установить «канал связи». Скажем, вы хотите сделать это общение с помощью телефонов. Вы знаете, что в городе есть сеть телефонных линий, которая распространяется на каждый дом.

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

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

Остальные детали.

Назар Мерза
источник
2
Я бы понизил это, если бы у меня было достаточно репутации. Ваш текст не объясняет, как работает сокет. Точно такой же общий текст, как в Википедии. Как слушает сокет ? Как ваша телефонная розетка может прослушивать соединение?
Зеленый,
21

Unix-сокеты являются двунаправленными сокетами - точно так же, как сокеты на основе IP, с которыми вы, вероятно, знакомы, и отчасти похожи на каналы, с которыми вы, вероятно, знакомы.

У них есть небольшой набор интересных свойств:

  • Они находятся только в области «локального хоста» - вы не можете получить к ним доступ по сети, только на локальном компьютере.
  • Вы можете создать их в режиме «поток», где они просто передают данные, как канал, как поток байтов.
  • Вы можете создавать их в режиме «датаграммы», где они сохраняют границы между операциями отправки. Это позволяет вам сохранять кадрирование, не создавая собственный протокол кадрирования поверх потока байтов.
  • В качестве «адреса» они используют файловую систему или в Linux «абстрактное пространство имен».
  • Вы можете выдать себя за другой конец, надежно идентифицировать подключаемое программное обеспечение или передать файловые дескрипторы через сокет, в зависимости от вашей ОС.

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

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

Нет ничего более глубокого, чем это - у них нет сверхсекретного скрытого свойства, которое радикально отличает их от обычного канала или TCP-соединения с localhost.

Даниэль Питтман
источник
3
Спасибо, но я все еще нахожу это сложным и полным арго.
Эльзо Валуги
2
Пожалуйста, не обижайтесь на эту попытку в однострочном ответе, чтобы понять, поможет ли это лучше: «Вы знаете, как работают сокеты TCP / IP и UDP / IP? Это то же самое, только без IP-части».
Даниэль Питтман
Я не обижаюсь, я просто хочу понять. Благодарю. Я изучу их подробнее.
Эльзо Валуги
4
Определение термина с использованием этого термина (то есть: «сокеты Unix являются двунаправленными сокетами») ничего не объясняет тому, кто не знает, что такое сокет для начала.
Брайан Оукли