Просте пояснення розеток Unix


20

Я можу шукати, і я вже подивився на запис у вікіпедії та в деяких інших місцях, але, хоча у мене є певний досвід програмування, я не дуже розумію це поняття. Чи можете ви ставитися до мене, як до 10-річного віку, і дати мені чітке пояснення щодо спілкування в сокетах?


Напишіть кілька невеликих тестових програм, використовуючи їх. Вам навіть не потрібні дві машини, лише дві маленькі програми для запуску. Бінго.
Патрік Х'юз

Посібник Beej з мережевого програмування здається дуже популярним вступним текстом до сокетів Unix, хоча я не можу сказати, що мені це подобається.
Неманья Трифунович

Я вже схвалив відповідь @DanielPittman, якби мені довелося написати, я написав би ту саму відповідь; Однак, якщо ви хочете отримати додаткову допомогу, я б продовжив. Будь ласка, відредагуйте своє запитання, поставте інформацію про те, що ви знаєте, а що ви не хочете, а також, дайте мені знати, чи шукаєте ви допомогу в користуванні, як вони працюють всередині, або теоретично (дизайн протоколу) чи ви намагаєтеся оцінювати з якоюсь метою?
Діпан Мехта

Ось книга: Мережеве програмування Unix . Кожен на землі, хто відповів би на це питання, дізнався б у цієї матері. Прочитавши цю книгу, саме ваше питання стане кращим.
Діпан Мехта

Ви маєте на увазі розетки BSD? Unix-розетки працюють лише локально.
imela96

Відповіді:


15

Дозвольте навести приклад: скажіть, що ви хочете спілкуватися / спілкуватися зі своїм другом, який живе не за вашою адресою. Щоб це сталося, вам потрібно встановити "канал зв'язку". Скажімо, ви хочете зробити це спілкування за допомогою телефонів. Ви знаєте, що в місті є мережа телефонних ліній, яка розширена до кожного будинку.

Зараз у вашому будинку є телефонна розетка, а в будинку друзів - одна. Щоб спілкування відбулося, ви та ваш друг повинні підключитися до мережі, підключивши телефон до розетки на обох кінцях зв'язку. Розетки в програмуванні концептуально такі ж, як і телефонні розетки.

У програмуванні у вас є два процеси (запущені програми), які хочуть спілкуватися один з одним. Для цього вони повинні встановити зв’язок між собою. Знову ж, доступна мережа, їм просто потрібно підключитися до цієї мережі, використовуючи якусь розетку. Unix-розетки - це один з таких розеток, який забезпечує це з'єднання / підключення до мережі. Отже, в кожній з двох програм у вас буде якийсь фрагмент коду, який виконує завдання підключення до мережі через сокети.

Решта - деталі.


2
Я б спротив цього, якби мав достатньо репутації. Ваш текст не пояснює, як працює сокет. Так само загальний текст, як у Вікіпедії. Як слухає розетку ? Як ваша телефонна розетка може прослуховувати з'єднання?
Зелений

21

Unix-розетки - це двонаправлений гніздо - як і IP-розетка, з яким ви, мабуть, знайомі, і схожий на трубу, з якою ви, напевно, знайомі.

Вони мають невеликий набір цікавих властивостей:

  • Вони знаходяться лише в домені "локального хоста" - ви не можете отримати доступ до них по мережі, лише на локальній машині.
  • Ви можете створити їх у режимі "потоку", де вони просто передають дані, як труба, як потік байтів.
  • Ви можете створити їх у режимі "дейтаграми", де вони зберігають межі між операціями надсилання. Це дозволяє зберегти обрамлення, не будуючи власний протокол кадрування поверх потоку байтів.
  • Вони використовують файлову систему або "Linux" абстрактний простір імен як свою "адресу"
  • Можливо, ви зможете себе представити іншим кінцем, надійно визначити програмне забезпечення, що підключається, або передати ручки файлів через сокет, залежно від вашої ОС.

По суті вони еквівалентні будь-якій іншій розетці - вони мають трохи цікавіші властивості, ніж труби, але не відрізняються кардинально від інших. Зазвичай вони мають більш високу затримку IPC, ніж у труби, і часто більші буфери - хоча ви можете це налаштувати, і це залежить від платформи.

Останнім цікавим властивістю пам’ятати є те, що вони використовують файлову систему в якості простору імен - тому вони нагадують трубу з назвою, а не анонімну трубку, в тому програмному забезпеченні, яке не має попередніх стосунків. (Абстрактні розетки простору імен однакові, але шлях до файлу не повинен існувати.)

Немає нічого глибшого, ніж це - у них немає ніякого надпотаємного прихованого властивості, що робить їх кардинально відмінними від типової труби або TCP-з'єднання з localhost.


3
Дякую, але я все ще вважаю це складним і сповненим арго.
Elzo Valugi

2
Будь ласка, не ображайтесь на цю спробу, відповівши в один рядок, щоб побачити, чи це краще допомагає: "Ви знаєте, як працюють TCP / IP і UDP / IP розетки? Це те саме, тільки без частини IP".
Даніель Пітман

Я не ображаюся, просто хочу зрозуміти. Спасибі. Я детальніше вивчу їх.
Elzo Valugi

4
Визначення терміна за допомогою цього терміна (тобто: "Unix-сокети - це двонаправлений гніздо") нічого не пояснює тому, хто не знає, з чого починається сокет.
Брайан Оуклі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.