Чому SCTP не дуже використовується / не відомо


190

Нещодавно я перевірив книгу Річардс Стівенс "Мережеве програмування UNIX, т. 1" , і я виявив, що крім TCP та UDP: SCTP є третій стандарт транспортного рівня .

Підсумок: SCTP - це протокол рівня транспорту, керований повідомленнями як UDP, але надійний, як TCP. Ось короткий вступ від IBM DeveloperWorks .

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

Чому SCTP настільки невідомий? Чому він не сильно використовується?


4
+1 про це ніколи не чув - дякую.
Роберт Венеблз

1
Усі бажають порівнювати SCTP з ZeroMQ (окрім того, що один є протоколом, а інший - бібліотекою - розгляньте їх як інструмент для вирішення проблем).
Еміль Іванов

Мені просто цікаво: що не так / що відрізняється 01.03.2013? Чому стільки голосів за цей день?
dmeister

8
@dmeister: Тому що я поставив тебе на Reddit . Привітання з Дармштадта.
Янус Троельсен

32
Не пишіть 1.03.2013. Будь-який із "1 березня 2013 року", "1 березня 2013 року", "1 березня 2013 року" .. є кращим. Просто не пишіть місяць і день місяця таким чином, що можна неправильно трактувати.
Зекк

Відповіді:


94

Дійсно, SCTP використовується здебільшого у телекомунікаційній галузі. Традиційно в комутаторах телекомунікацій використовується SS7 ( Система сигналізації №7 ) для з'єднання різних об'єктів у телекомунікаційній мережі. Наприклад - база даних абонентів провайдера зв'язку (HLR), з комутатором (MSC), абонент теж підключений (MSC).

Зона телекомунікацій рухається до більш високих швидкостей і досяжних умов. Однією з таких змін є заміна протоколу SS7 на якийсь більш елегантний, швидкий і гнучкий протокол на основі IP.

Область телекомунікацій дуже консервативна. Мережа SS7 тут використовується десятиліттями. Це дуже надійна і закрита мережа. Це означає, що звичайний користувач не має до нього доступу.

Мережа IP, навпаки, відкрита і не є надійною, і телекомунікаційні послуги не будуть перетворюватися на неї, якщо вона не витримає принаймні навантаження, на яке справляється SS7. Саме тому було розроблено SCTP. Він намагається:

  • імітувати всі переваги мережі SS7, накопичені протягом десятиліть.
  • створити протокол, орієнтований на з'єднання, краще, ніж TCP, у швидкості, безпеці та надмірності

Останні випуски Linux вже мають підтримку SCTP.


конкретно, слід ознайомитись із результатами робочої групи IETF "SIGTRAN", яка написала відображення між SS7 та SCTP.
Альнітак

22
Можливо, головна причина, по якій SCTP не використовується в загальнодоступному Інтернеті, полягає в тому, що житлові IPv4 / NAT-шлюзи повинні бути обізнані з SCTP, щоб підтримувати об'єднання мультиплексування між декількома одночасно приватними кінцевими точками та зовнішніми хостами. Шукайте, як SCTP стане кориснішим, коли перехід IPv6 починає набирати більше пари.
Джеймс Вудріат

@jameswoodyatt є бібліотечні реалізації SCTP через UDP. Це вирішує деякі проблеми з маршрутизаторами для споживачів.
user7610

1
Це зовсім не відповідає на питання. Відповідь Джеймса містить більше інформації, ніж насправді відповідь.
Кен Шарп

@jameswoodyatt Маршрутизатори для споживачів, які я спіткав з усіма, мають підтримку, навіть деякі досить старі. Проблема полягає в тому, що він не відкривається через звичайний інтерфейс користувача, тому вам доведеться зробити деякі жахливі речі в системі, щоб потрапити там, де ви можете налаштувати його. Щось недогляд на мою думку.
Перкінс

70

Зараз ми розгортаємо SCTP в декількох додатках і зіткнулися зі значною проблемою з підтримкою SCTP у різних домашніх маршрутизаторах. Вони просто не працюють з SCTP правильно. Я вважаю, що це насамперед проблема продуктивності (специфікація протоколу SCTP вимагає перерахунку контрольних сум для всіх пакетів, а не лише для заголовків).

Як і багато інших багатообіцяючих протоколів, SCTP на жаль мертвий у воді, поки D-link і Netgear не виправлять свої розбиті NAT коробки.


7
Нічого собі, я не знав цього бар'єру для входу. Ви абсолютно праві - див. Tools.ietf.org/html/draft-ietf-behave-sctpnat-05 щодо запропонованого способу цього. Це 3-й набір Інтернет-чернеток на ту ж тему ...
Bwooce

Ви звучаєте досить песимістично - як мінімум для домашніх маршрутизаторів. Якщо припустити, що маршрутизатори, що використовуються в професійних виробничих середовищах, підтримують його, SCTP все ще виглядає дуже корисною. Є багато випадків використання, коли мережеві топології не залишають приміщення центру даних, і в цьому випадку SCTP повинен бути ідеальним.
Євген Бересовський

4
@EugeneBeresovksy: Пройшло кілька років, як я опублікував цю відповідь. Моє враження, що з того часу SCTP не зробив значного прогресу. Він все ще використовується в кількох спеціалізованих програмах в контрольованих умовах, але рідко зустрічається в дикій природі. У Windows та Mac OS X все ще не вистачає підтримки SCTP поза коробкою. Відсутність знайомства та крихкість протоколу, порушеного більшістю брандмауерів та скриньки NAT, змушують людей використовувати його неохоче.
pehrs

@pehrs Я хотів би використовувати його в центрі обробки даних, так що не задіяні NAT і брандмауери, за винятком вбудованих ОС. У середовищі сервера Linux, я сподіваюся, що це просто працює. Але навіть за допомогою Windows існують бібліотеки SCTP - і я вважаю, що не потрібно повозитися з ОС.
Євген Бересовський

SCTP зазвичай не вмикається в Linux через відсутність його прийняття, але навіть у моїй старій системі Ubuntu Precis він доступний як завантажуваний модуль. Надання програми, яка бажає використовувати SCTP, але повернеться до TCP (наприклад), є проблемою, подібною до подвійного складання, але більш болючою.
Кен Шарп

55

SCTP вимагає більшого дизайну в програмі, щоб найкраще використовувати його. Варіантів більше, ніж у TCP, API-подібний Sockets з'явився пізніше, і він молодий. Однак я думаю, що більшість людей, які потребують часу, щоб зрозуміти це (і які знають недоліки TCP) цінують це - це добре розроблений протокол, який базується на наших 30-річних знаннях TCP та UDP.

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

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

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

Моє особисте резюме SCTP полягає в тому, що він не робить нічого, чого не вдалося б зробити іншим способом (в TCP або UDP) за допомогою суттєвої підтримки додатків. Що вона надає - це можливість не потрібно самостійно реалізовувати цей код.

FYI, SCTP призначений для підтримки діаметра (див. RADIUS наступного покоління). див. RFC 3588

   Клієнти діаметру ОБОВ'ЯЗКОВО підтримують TCP або SCTP, а агенти та
   Сервери ОБОВ'ЯЗКОВО підтримують обоє. Майбутні версії цієї специфікації МОЖУТЬ
   мандат клієнтів підтримувати SCTP.

43

SCTP не дуже відомий і не використовується / розгортається багато, тому що:

  • Широке поширення: недостатньо інтегрований у стеки TCP / IP (у 2013 році: все ще відсутній у останньому для останніх Mac OSX та Windows)
  • Бібліотеки: небагато прив’язок високого рівня у простому користуванні мовами (відмова: я підтримую pysctp , підтримка SCTP-простого стека для Python)
  • NAT: Не переходить NAT дуже добре / зовсім (менше 1% інтернет-маршрутизаторів для дому та підприємств роблять NAT на SCTP).
  • Популярність: Жоден загальнодоступний додаток не використовує його
  • Парадигма програмування: вона трохи змінилася: це все ще сокет, але ви можете підключити безліч хостів до багатьох хостів (мультихомінг), дейтаграма впорядкована і надійна, ер ...
  • Складність: стек SCTP є складним для реалізації (через вище)
  • Конкуренція: Multipath TCP приходить і повинен відповідати потребам / можливостям мультихомінгу, щоб люди утримувалися від впровадження SCTP, якщо це можливо, чекаючи MTCP
  • Ніша: Потрібні заповнення SCTP дуже своєрідні (впорядковані надійні дейтаграми, багатопотокова передача) і не потребують у багатьох програмах
  • Безпека: SCTP ухиляється від контролю безпеки (деякі брандмауері, більшість IDS, всі DLP, не відображаються на netstat, за винятком CentOS / Redhat / Fedora ...)
  • Аудиторна здатність: Щось на зразок 3 компаній у світі регулярно проводять аудит безпеки SCTP (Відмова: Я працюю в одній з них)
  • Крива навчання: Не так багато інструментів для гри з SCTP (перевірте відмінний інтерфейс ssctp, який добре поєднується з netcat або використовуйте socat)
  • Під кришкою: використовується в основному в телекомунікаційних системах, і кожного разу, коли ви надсилаєте SMS, почніть переглядати мережу по мобільному телефону або здійснювати телефонні дзвінки, ви часто запускаєте повідомлення, що надходять через SCTP (SIGTRAN / SS7 з GSM / UMTS, Діаметр з LTE / IMS / RCS, S1AP / X2AP з LTE), тому ви насправді багато використовуєте, але про це ніколи не знаєте ;-)

14
Re: "Ніша / не потрібна багато додатків". Від цього виграють веб-браузери, див. HTTP2 та його спроби впровадити, крім TCP, частину того, що SCTP дарує безкоштовно. Більшість методів оптимізації HTTP (спрайтування, заточування, вбудовування, конкатенація) були б зроблені (майже повністю - марнотратні заголовки HTTP1 залишаються невирішеними) надмірними SCTP. те саме стосується програм, у яких є пул з'єднань, щоб дозволити паралельний доступ до БД або будь-якої іншої служби. Іншими словами: для деяких функцій SCTP велика потреба у багатьох додатках.
Євген Бересовський

4
"Жодне загальнодоступне додаток не використовує це": Неправда більше, оскільки SCTP використовується WebRTC. "Безпека: SCTP ухиляється від контролю безпеки" - це більше проблема контролю "безпеки". Якщо це не дозволить уникнути цих перевірок, тоді було б чудовим протоколом зловмисного програмного забезпечення залишатися під радаром.
Мацей П'єхотка

14

р1. SCTP, відображений безпосередньо через IPv4, вимагає підтримки в NAT-шлюзах, які ніколи не були широко розгорнуті ніде, і без цього типовий шлюз NAT дозволятиме одночасно використовувати один приватний хост на публічну адресу.

р2. SCTP, зіставлений через UDP / IPv4, дозволяє отримувати більше приватних хостів на публічну адресу, але відображення UDP у шлюзах IPv4 / NAT, як відомо, складне у встановленні та підтримці, завдяки тому, що UDP є транспортом без зв'язку без явного стану для відстеження NAT. .

p3. SCTP, відображений безпосередньо через IPv6, вимагає ... ну ... IPv6. Ви намагалися розгорнути IPv6? Якщо так, чи намагалися ви придбати брандмауер IPv6? Чи підтримує він SCTP? Як щодо балансира навантаження? SSL-прискорювач?

p4. Нарешті, багато Інтернету в значній мірі обмежені тим, що може вміститися через порт TCP 80 і порт 443, тому SCTP будь-якого аромату там, як правило, втрачає. Отже, ви бачите такі зусилля робоча група MPTCP в IETF.


"Ви намагалися придбати брандмауер IPv6? Він підтримує SCTP" - звичайний вільно розповсюджується iptables підтримує їх просто чудово . Я не є мережевим хлопцем, тому не можу сказати для решти.
Привіт-Ангел

12

Багато хто з нас скоро використовуватиме SCTP, оскільки його використовують канали даних WebRTC для створення надійного рівня TCP поверх UDP - SCTP через DTLS через UDP: https://tools.ietf.org/html/draft-ietf -rtcweb-data-channel-13 # section-6


Забув згадати, що основним напрямком WebRTC є поєднання потоків відео та аудіо. Він не призначений для використання в якості ретрансляції повідомлень. Послуги turn / ice / оглушення - ще одна частина технології, на якій WebRTC працює. Але це технології, якими користується WebRTC. Ці технології не є WebRTC.
TamusJRoyce

6

Читаючи сторінку Вікіпедії SCTP, я б сказав, що головна причина полягає в тому, що SCTP - це дуже молодий протокол (запропонований у 2000 році), який наразі не підтримується основними ОС ( Windows , OS X , Linux ).

Якщо "дуже молодий" здається вам невідповідним, подумайте про IPV6 : "У грудні 2008 року, незважаючи на відзначення своєї 10-ї річниці як протокол стандартів відстеження, IPv6 був лише у зародковому стані з точки зору загального поширення у всьому світі".


3
Відповідно до статті Wikipedia, до якої ви посилаєтесь, SCTP реалізований у Linux, Solaris, FreeBSD, HP-UX та інших.
drrlvn

Пов'язана стаття тепер також говорить, що вона працює на OS X і Windows.
dmeister


2

Це може бути невідомо, але воно не використовується. Зовсім недавно в IETF був опублікований проект про використання SCTP як протоколу транспортного шару для HTTP .


2
Коли ви сказали "не використовується", я подумав про фактичне використання протоколу. Але тоді ви навели лише приклад проекту документа , який потенційно може призвести до реального використання в майбутньому.
Кіссакі

2

Посилаючись на всі коментарі щодо того, що комерційні маршрутизатори порушені або їм не вистачає підтримки SCTP, проблема полягає в тому, що SCTP з NAT досі перебуває у формі проекту з IETF. Тому для них не існує специфікації RFC.

https://tools.ietf.org/html/draft-ietf-behave-sctpnat-09


-1

Sctp народжується надто пізно, і для багатьох ситуацій TCP достатньо.

Крім того, як я знаю, більша частина його використання є на телекомунікаційній зоні.

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