протокол SCTP

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

протокол SCTP

Непрочитанное сообщение Olej » 26 июн 2017, 11:13

Протокол SCTP был добавлен достаточно поздно (2000г.) как 3-й протокол транспортного уровня TCP/IP (в дополнение к UDP и TCP).
Считается, что он объединяет возможности UDP и TCP и одновременно устраняет (некоторые) их недостатки.
(более-менее внятное объяснение см. по ссылке выше)
Изображение
Меня интересовала программная реализация SCTP ... и, естественно, в Linux.
Но найти внятных обсуждений, а тем более примеры кода, как оказалось, не так просто... :-(
Описание и некоторые примеры см. Надежная передача данных по протоколу SCTP (2008г.) ... но это, в таком виде, не работает (неизвестно в какой ОС это делалось).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: протокол SCTP

Непрочитанное сообщение Olej » 26 июн 2017, 11:18

Olej писал(а):не работает
Поехали... ;-)
Т.е. не компилируется даже:

Код: Выделить всё

[olej@dell SCTP]$ make
cc     ss.c   -o ss
ss.c: В функции «main»:
ss.c:52:11: предупреждение: неявная декларация функции «sctp_sendmsg» [-Wimplicit-function-declaration]
     ret = sctp_sendmsg( connSock,
           ^
...

Код: Выделить всё

[olej@dell linux]$ dnf list '*sctp*'
Последняя проверка окончания срока действия метаданных: 0:00:11 назад, Mon Jun 26 09:57:41 2017.
Установленные пакеты
lksctp-tools.x86_64                                               1.0.16-4.fc23                                         @System
Доступные пакеты
lksctp-tools.i686                                                 1.0.16-4.fc23                                         fedora
lksctp-tools-devel.i686                                           1.0.16-4.fc23                                         fedora
lksctp-tools-devel.x86_64                                         1.0.16-4.fc23                                         fedora
lksctp-tools-doc.x86_64                                           1.0.16-4.fc23                                         fedora
python-pysctp.x86_64                                              0.6-5.fc23                                            fedora

Код: Выделить всё

[olej@dell linux]$ sudo dnf install lksctp-tools*
...
Выполнение транзакции
  Установка    : lksctp-tools-devel-1.0.16-4.fc23.x86_64                                                                   1/2
  Установка    : lksctp-tools-doc-1.0.16-4.fc23.x86_64                                                                     2/2
  Проверка     : lksctp-tools-doc-1.0.16-4.fc23.x86_64                                                                     1/2
  Проверка     : lksctp-tools-devel-1.0.16-4.fc23.x86_64                                                                   2/2

Установлено:
  lksctp-tools-devel.x86_64 1.0.16-4.fc23                         lksctp-tools-doc.x86_64 1.0.16-4.fc23

Выполнено!
Теперь не линкуется:

Код: Выделить всё

[olej@dell SCTP]$ make
cc     ss.c   -o ss
/tmp/cc6oAoBJ.o: In function `main':
ss.c:(.text+0x106): undefined reference to `sctp_sendmsg'
ss.c:(.text+0x17b): undefined reference to `sctp_sendmsg'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
<встроенное>: ошибка выполнения рецепта для цели «ss»
make: *** [ss] Ошибка 1
Это ничего не даёт:

Код: Выделить всё

[olej@dell netinet]$ pkg-config --list-all | grep sctp
Зато даёт:

Код: Выделить всё

[olej@dell lib64]$ ls *sctp*.*
libsctp.so  libsctp.so.1  libsctp.so.1.0.16

[olej@dell lib64]$ pwd
/lib64

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: протокол SCTP

Непрочитанное сообщение Olej » 26 июн 2017, 11:20

Olej писал(а): Зато даёт:

Код: Выделить всё

[olej@dell SCTP]$ make 
cc -Wall -l sctp ss.c -o ss 
cc -Wall -l sctp sc.c -o sc 

Код: Выделить всё

[olej@dell SCTP]$ cat Makefile
CC += -Wall
LDOPT += -l sctp

TASK = ss sc
all: $(TASK)

%: %.c
    $(CC) $(LDOPT) $< -o $@

clean:
    rm -f $(TASK) *.o
Вложения
common.h
(339 байт) 73 скачивания
ss.c
(1.89 КБ) 75 скачиваний
sc.c
(1.63 КБ) 73 скачивания

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: протокол SCTP

Непрочитанное сообщение Olej » 26 июн 2017, 11:31

Olej писал(а): Но найти внятных обсуждений, а тем более примеры кода, как оказалось, не так просто... :-(
Вот что настораживает - SCTP:
Протокол SCTP реализован в следующих операционных системах:
...
QNX Neutrino Realtime OS,[6] в версиях с 6.3.0 по 6.3.2, но с 6.4.0 поддержка прекращена
...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: протокол SCTP

Непрочитанное сообщение Olej » 26 июн 2017, 12:47

Выглядит это как-то так:

Код: Выделить всё

[olej@dell SCTP]$ ./ss 
...

Код: Выделить всё

[olej@dell SCTP]$ ./sc 
(Local) Mon Jun 26 12:45:40 2017

(GMT  ) Mon Jun 26 09:45:40 2017

Связь в 2 независимых канала разнородной информации.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: протокол SCTP

Непрочитанное сообщение Olej » 27 июн 2017, 01:05

Olej писал(а): Меня интересовала программная реализация SCTP ... и, естественно, в Linux.
Но найти внятных обсуждений, а тем более примеры кода, как оказалось, не так просто... :-(
Интерфейс прикладного программирования Socket API, Часть 5: SCTP
Оригинал: "The Socket API, Part 5: SCTP"
Автор: Pankaj Tanwar
Дата публикации: December 29, 2011
Перевод: Н.Ромоданов
Дата перевода: июль 2012 г.
Протокол SCTP
Это полный официальный стандарт протокола (перевод):
Stream Control Transmission Protocol
23.12. Когда SCTP оказывается предпочтительнее TCP
7. Многие функции TCP поддерживаются и SCTP: уведомление о приеме, повторная передача утерянных данных, сохранение последовательности данных, оконное управление передачей, медленное начало и алгоритмы предотвращения перегрузки линий, а также выборочные уведомления. Есть и два исключения: состояние неполного закрытия и срочные данные.
SCTP лишен двух особенностей TCP. Одной из них является состояние неполного (половинного) закрытия соединения. Это состояние возникает, когда приложение закрывает свой конец соединения, но разрешает собеседнику отправлять данные, а само принимает их (мы обсуждали это состояние в разделе 6.6). Приложение входит в это состояние для того, чтобы сообщить собеседнику, что отправка данных завершена. Приложения очень редко используют эту возможность, поэтому при разработке SCTP решено было не заботиться об ее поддержке. Приложениям, которым нужна эта функция, с переходом на SCTP придется изменять протокол уровня приложения, чтобы отправлять сигнал в потоке данных. В некоторых случаях изменения могут быть далеко не тривиальными.

SCTP не поддерживает и такую функцию TCP, как обработка внеочередных данных (urgent data). Для доставки срочных данных в SCTP можно использовать отдельный поток, однако это не позволяет в точности воспроизвести поведение TCP.

Для приложений, ориентированных на передачу потока байтов, переход на SCTP может оказаться невыгодным. К таким приложениям относятся:
- telnet
- rlogin
- rsh
- ssh
TCP сегментирует поток байтов на пакеты IP более эффективно, чем SCPT, который пытается сохранять границы сообщений, из-за чего могут получаться блоки, не помещающиеся целиком в IP-дейтаграммы и вызывающие избыточные накладные расходы на передачу.
UNIX: разработка сетевых приложений
Стивенс Уильям Ричард
Глава 23 Дополнительные сведения о сокетах SCTP

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 17 гостей