Реализация своего 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 и назад отправляют в него, это какой-то фокус?
  • Вопрос задан
  • 5153 просмотра
Решения вопроса 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.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы