Ну да ладно. А если рассмотреть предельно упрощенный вариант - есть две сетевые карты, воткнуты напрямую, никакой маршрутизации, нужно переслать заранее известный файл. Протокол пишу с нуля, но на основе идей TCP Reno (тех, которые касаются окна, контроля за доставкой пакетов и т.д.) Это будет задача, решаемая на уровне драйверов?
Гм ...
Конечно, можно реализовать подобное решение некоторым специализированным драйвером, но вот вопросы отладки меня, если честно, страшат. Да и то, стоит ли овчинка выделки? Неужели возможностей стандартного TCP недостаточно?
Если всё-таки надо изобретать свой велосипед, то стоит начать с прототипа, который работает на прикладном уровне. Отладить протокол, убедиться, что он работает, и только потом делать ядерный модуль.
Для прототипа может быть несколько опций -- поверх UDP или непосредственно поверх Ethernet. Поверх UDP -- быстрее будет работающий прототип, и нет заморочек с адресацией на уровне линка (для IP это делает arp). Поверх ethernet -- возможно (!), будет работать быстрее на больших объемах данных (нет накладных расходов UDP).
Кроме предложенных вариантов на винде можно воспользоваться TDI-интерфейсом, который предоставляет IP модуль и недокументированными средствами TCP/IP стека. Насколько я помню, через TDI к IP можно цеплять любой payload, а не только TCP/UDP. Детали не помню, увы
.
Короче -- я бы делал прототип поверх UDP (или, возможно, поверх IP через TDI) и только потом (если потребуется) разворачивал новый протокол в ядре.
PS: Да, ещё в винде для IPv4 есть raw socket. Как альтернатива UDP.