Свой транспортный протокол
От: Lonely Dog Россия  
Дата: 06.09.13 06:30
Оценка:
Привет!

Дано: механизм передачи данных между 2 компами (не TCP/IP) под Windows. Похож на named pipes, но имеет ограничение на рамер пакета (4Kb). Т.е.
WriteFile (xxx, 4096, xxx) сработает, а WriteFile(xxx, 4097, xxx) вернет INVALID_PARAMETER. Есть поддержка асинхронного ввода-вывода (через overlapped io). Пакеты не теряются (100% гарантия доставки, при условии, что оба процесса живы).

Необходимо: Реализовать свой транспортный протокол. Сделать поддержку пакетов произвольной длины, порты (чтобы разные приложения могли посылать данные через этот механизм без конфликтов).

Понятно, что можно написать руками. Но возможно есть стандартные механизмы? Ну там boost.asio какой-нибудь? Или что-то другое.
Посоветуйте плиз.

Спасибо.
Re: Свой транспортный протокол
От: SkyDance Земля  
Дата: 06.09.13 07:16
Оценка: 5 (2)
LD>Необходимо: Реализовать свой транспортный протокол. Сделать поддержку пакетов произвольной длины, порты (чтобы разные приложения могли посылать данные через этот механизм без конфликтов).

Самым универсальным вариантом будет реализовать IP over "свой механизм передачи данных". Ведь, по сути, этот "механизм" есть сетевая карта с MTU=4096.
Re[2]: Свой транспортный протокол
От: Lonely Dog Россия  
Дата: 06.09.13 17:09
Оценка:
Здравствуйте, SkyDance, Вы писали:

LD>>Необходимо: Реализовать свой транспортный протокол. Сделать поддержку пакетов произвольной длины, порты (чтобы разные приложения могли посылать данные через этот механизм без конфликтов).


SD>Самым универсальным вариантом будет реализовать IP over "свой механизм передачи данных". Ведь, по сути, этот "механизм" есть сетевая карта с MTU=4096.

Да, примерно это я и хочу. Возможно вы подскажите мне готовые реализации? Или может какие-нибудь либы?
Re[2]: Свой транспортный протокол
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.09.13 18:31
Оценка:
Здравствуйте, SkyDance, Вы писали:

LD>>Необходимо: Реализовать свой транспортный протокол. Сделать поддержку пакетов произвольной длины, порты (чтобы разные приложения могли посылать данные через этот механизм без конфликтов).


SD>Самым универсальным вариантом будет реализовать IP over "свой механизм передачи данных". Ведь, по сути, этот "механизм" есть сетевая карта с MTU=4096.


Это не решит задачу. В IP нет метода передачи пакетов произвольной длинны. Ограничение UDP — 64K минус копейки. А SCTP в венде, можно сказать, что нет.
Re[3]: Свой транспортный протокол
От: SkyDance Земля  
Дата: 08.09.13 23:11
Оценка:
Pzz>Это не решит задачу. В IP нет метода передачи пакетов произвольной длинны. Ограничение UDP — 64K минус копейки. А SCTP в венде, можно сказать, что нет.

В IP(v6) есть поддержка Jumbogram (RFC 2675), это вполне можно считать "произвольной длиной".

Далее, поскольку канальный уровень (тот самый авторский "свой механизм") 100% надёжен, можно применять "просто TCP". Вероятно, для задач автора будет работать хорошо, если нет — придется поиграть с размерами send/receive буферов, чтобы ничего не пропадало в недрах TCP реализации MS.
Re[3]: Свой транспортный протокол
От: SkyDance Земля  
Дата: 08.09.13 23:12
Оценка:
LD>Да, примерно это я и хочу. Возможно вы подскажите мне готовые реализации? Или может какие-нибудь либы?

ЕМНИП в MSDN есть пример loopback network adapter. К сожалению, я уже лет 5 под винду не писал и потому не помню, в каких разделах искать, но гугл по "loopback network adapter source code" уж что-нибудь да найдет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.