протокол SCTP
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
протокол SCTP
Протокол SCTP был добавлен достаточно поздно (2000г.) как 3-й протокол транспортного уровня TCP/IP (в дополнение к UDP и TCP).
Считается, что он объединяет возможности UDP и TCP и одновременно устраняет (некоторые) их недостатки.
(более-менее внятное объяснение см. по ссылке выше)
Меня интересовала программная реализация SCTP ... и, естественно, в Linux.
Но найти внятных обсуждений, а тем более примеры кода, как оказалось, не так просто...
Описание и некоторые примеры см. Надежная передача данных по протоколу SCTP (2008г.) ... но это, в таком виде, не работает (неизвестно в какой ОС это делалось).
Считается, что он объединяет возможности UDP и TCP и одновременно устраняет (некоторые) их недостатки.
(более-менее внятное объяснение см. по ссылке выше)
Меня интересовала программная реализация SCTP ... и, естественно, в Linux.
Но найти внятных обсуждений, а тем более примеры кода, как оказалось, не так просто...
Описание и некоторые примеры см. Надежная передача данных по протоколу SCTP (2008г.) ... но это, в таком виде, не работает (неизвестно в какой ОС это делалось).
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: протокол SCTP
Поехали...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 писал(а): Зато даёт:
Код: Выделить всё
[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
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: протокол SCTP
Вот что настораживает - SCTP:Olej писал(а): Но найти внятных обсуждений, а тем более примеры кода, как оказалось, не так просто...
Протокол SCTP реализован в следующих операционных системах:
...
QNX Neutrino Realtime OS,[6] в версиях с 6.3.0 по 6.3.2, но с 6.4.0 поддержка прекращена
...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: протокол SCTP
Выглядит это как-то так:
Связь в 2 независимых канала разнородной информации.
Код: Выделить всё
[olej@dell SCTP]$ ./ss
...
Код: Выделить всё
[olej@dell SCTP]$ ./sc
(Local) Mon Jun 26 12:45:40 2017
(GMT ) Mon Jun 26 09:45:40 2017
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: протокол SCTP
Интерфейс прикладного программирования Socket API, Часть 5: SCTPOlej писал(а): Меня интересовала программная реализация SCTP ... и, естественно, в Linux.
Но найти внятных обсуждений, а тем более примеры кода, как оказалось, не так просто...
Протокол SCTPОригинал: "The Socket API, Part 5: SCTP"
Автор: Pankaj Tanwar
Дата публикации: December 29, 2011
Перевод: Н.Ромоданов
Дата перевода: июль 2012 г.
Это полный официальный стандарт протокола (перевод):
23.12. Когда SCTP оказывается предпочтительнее TCPStream Control Transmission Protocol
7. Многие функции TCP поддерживаются и SCTP: уведомление о приеме, повторная передача утерянных данных, сохранение последовательности данных, оконное управление передачей, медленное начало и алгоритмы предотвращения перегрузки линий, а также выборочные уведомления. Есть и два исключения: состояние неполного закрытия и срочные данные.
UNIX: разработка сетевых приложенийSCTP лишен двух особенностей TCP. Одной из них является состояние неполного (половинного) закрытия соединения. Это состояние возникает, когда приложение закрывает свой конец соединения, но разрешает собеседнику отправлять данные, а само принимает их (мы обсуждали это состояние в разделе 6.6). Приложение входит в это состояние для того, чтобы сообщить собеседнику, что отправка данных завершена. Приложения очень редко используют эту возможность, поэтому при разработке SCTP решено было не заботиться об ее поддержке. Приложениям, которым нужна эта функция, с переходом на SCTP придется изменять протокол уровня приложения, чтобы отправлять сигнал в потоке данных. В некоторых случаях изменения могут быть далеко не тривиальными.
SCTP не поддерживает и такую функцию TCP, как обработка внеочередных данных (urgent data). Для доставки срочных данных в SCTP можно использовать отдельный поток, однако это не позволяет в точности воспроизвести поведение TCP.
Для приложений, ориентированных на передачу потока байтов, переход на SCTP может оказаться невыгодным. К таким приложениям относятся:
- telnet
- rlogin
- rsh
- ssh
TCP сегментирует поток байтов на пакеты IP более эффективно, чем SCPT, который пытается сохранять границы сообщений, из-за чего могут получаться блоки, не помещающиеся целиком в IP-дейтаграммы и вызывающие избыточные накладные расходы на передачу.
Стивенс Уильям Ричард
Глава 23 Дополнительные сведения о сокетах SCTP
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя