Есть ли какая-либо необработанная библиотека TCP в C или C ++? - PullRequest
0 голосов
/ 02 декабря 2011

Я собираюсь создать приложение уровня драйвера режима ядра, которое устанавливает TCP-соединение, вот мое требование:

  1. Я не хочу передавать данные в пользовательский режим
  2. Iя не хочу использовать библиотеку сокетов winsocket и OS
  3. Мне нужно просто передать пакет tcp в библиотеку, и библиотека создаст для меня простое соединение TCP-клиент или TCP-сервер.Он должен выполнять все требования TCP-соединения, такие как tcp handshake, генерировать пакет, вычислять контрольную сумму, устанавливать флаги TCP и подтверждение, а затем передавать мне новый пакет, чтобы я мог отправить пакет на мой сетевой адаптер.Знаете ли вы, выходя из реализации TCP, что он не использует библиотеку сокетов ОС?

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

Я думаю, что правильный способ задать этот вопрос таков:

Как правильно делать сокеты TCP в коде ядра?

И я не уверен, что вы хотите использовать TCP только на уровне пакетов, потому что вы также, вероятно, захотите обрабатывать сегментацию TCP, фрагментацию IP, отправку только тогда, когда это позволяет размер удаленного окна, и генерацию ACK. Другими словами, если вы используете TCP-сервер в режиме ядра, вам нужен весь стек TCP ядра.

В любом случае, используйте Bing или Google для «сокетов ядра» или «ksocket».

Для Linux: http://ksocket.sourceforge.net/ Также проверьте в этом примере для UDP.

Для Windows: перейдите на эту страницу и загрузите образцы HttpDisk и KHttpd. Оба имеют драйвер устройства Windows, который использует аналогичную библиотеку «ksocket». (Ищите ksocket.c и ksocket.h в каждом)

1 голос
/ 02 декабря 2011

Для Linux используйте kernel_*() версии обычного API сокета, то есть kernel_bind(), kernel_listen(), kernel_accept(), kernel_connect(). Они находятся в #include <linux/net.h> и используются способами, очень похожими на «нормальные» сокеты.

Солярис имеет очень похожие интерфейсы, там он называется ksocket_*(), см. #include <sys/ksocket.h> для справок.

Что касается * BSD UN * X, руководство Apple по сетевым расширениям ядра дает некоторые подробности (также со ссылками на соответствующие интерфейсы в Free / Net / OpenBSD).

Не знаю о Windows.

...