Реализация своего TCP(UDP)/IP стека, как получить ответ?

Добрый день. Так получилось,что нужно реализовать свой TCP(UDP)/IP стек. Логика приложения обитает на сетевом уровне OSI (OSI level 3), т.е. есть дескриптор файла с которого я могу прочитать\записать IP дейтаграммы, далее каждый кадр могу обработать в соответствии с протоколом TCP/UDP (а это уже транспортный уровень OSI - 4). Собственно вопросы:
1. Для TCP протокола нужно установить соединение и держать "где-то" связку ip/port str/dst и его сокет? (соединяемся банально - создаем сокет через socket и тупа connect?)
1.1 В отдельном потоке (форке) долбить сокетом recv для получения данных?
1.2 Как бы с флагами протокола?
2. Тоже самое, но для UDP, интересуют пока только TCP/UDP (дай бог и до ICMP дойду, но это уже другая история, при том,что он работает параллельно с IP)

p.s. перерыл готовые реализации,как то непонятно, как они обрабатывают соединения. Наверно привычка из работы с сокетами в приложениях,где ты не заботишься об этом.
p.p.s Смотрел в сторону dunkels.com/adam/miniweb в качестве примера, но там жесть какая-то, они получают пакеты с tun-a и назад отправляют в него, это какой-то фокус?
  • Вопрос задан
  • 5213 просмотров
Решения вопроса 1
MrFrizzy
@MrFrizzy
Александ Колесень - Внедрение open-source TCP/IP с...
Посмотрите, тут человек реализовывал tcp стек поверх userspace на android
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
дай бог и до ICMP дойду

Как вы собираетесь имплементить TCP без ICMP? Вам же как-то нужно подтверждать доставку пакетов.

Соединение обрабатывается довольно просто. Производим тройное рукопожатие и по завершению оного создаем какой-то объект/структурку где хранятся все нужные нам данные, адрес второй оконечной точки, буферы записи/чтения (если вы решитесь реализовывать контроль насыщения и контроль потока ну или просто последний пакет сохранять и блокировать отправку пока не подтвердится доставка этого пакета).

Вообще мне кажется что вы просто придумали себе неподъемную проблему... Зачем вам TCP имплементить если у вас IP дейтаграммы есть? Кому адресованы эти IP дейтаграммы? Кому вы их отправлять собираетесь? С кем соединяться? Мне кажется вам просто нужно сделать перепаковку данных из IP дейтаграммы в TCP пакет.
Ответ написан
@neolink
Реализация своего TCP(UDP)/IP стека

Для TCP протокола нужно установить соединение и держать "где-то" связку ip/port str/dst и его сокет? (соединяемся банально - создаем сокет через socket и тупа connect?)

Вы сами-то определитесь что вы хотите делать толи свой tcp стек, толи вы используете сетевые функции linux.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы