Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Формирование ТСР-пакета  (Прочитано 14969 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dimsv
Гость
« : 30-04-2004 08:13 » 

Подскажите, где в DDK для win2000 можно найти пример, в котором было бы показано, как с нуля формируется TCP-пакет?
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 30-04-2004 09:02 » 

Очень странный вопрос, правда.

TCP всегда передаётся как полезная нагрузка IP.  Протокол TCP реализован в одном транспортном драйвере с IP и, насколько я знаю, отдельно не поставляется.  Как получить исходники IP стека от майкрософт -- это я не знаю.

Есть свободно распространяемая реализация IPv6, построенная на основе IP стека Windows NT (пятилетней давности), в ней можно посмотреть, как майкрософт в своё время делал tcp.  Взять (если ещё дают) с http://research.microsoft.com/msripv6/msripv6.htm

Формат пакета TCP определён в соответствующих документах, базовый -- RFC 793
http://www.rfc-editor.org/rfc/rfc793.txt
дополнения RFC3168 http://www.rfc-editor.org/rfc/rfc3168.txt
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
dimsv
Гость
« Ответ #2 : 30-04-2004 09:39 » 

Цитата: npak
Очень странный вопрос, правда.
TCP всегда передаётся как полезная нагрузка IP.  Протокол TCP реализован в одном транспортном драйвере с IP и, насколько я знаю, отдельно не поставляется.  Как получить исходники IP стека от майкрософт -- это я не знаю.


Если быть точным, хочется посмотреть, как реализованы механизмы регулировки размера окна, пересылка недошедших пакетов и т.д.

А еще точнее - хочется вмешаться и переделать что-нибудь по-своему
Записан
Kife
Помогающий

by
Offline Offline

« Ответ #3 : 30-04-2004 09:50 » 

Цитата: dimsv
Подскажите, где в DDK для win2000 можно найти пример, в котором было бы показано, как с нуля формируется TCP-пакет?


Имхо RFC читай, там все описано... Как и что собирается, как разменр окна регулируется (кстати обычно он(размер) принимается большим, и если ошибки валят, то уменьшается, хотя есть реализации TCP/IP, где все наоборот) ...
Записан

_______
Да поможет нам F1,  и да сохранит нас F2 ...
dimsv
Гость
« Ответ #4 : 30-04-2004 10:00 » 

Цитата: Kife


Имхо RFC читай, там все описано... Как и что собирается, как разменр окна регулируется (кстати обычно он(размер) принимается большим, и если ошибки валят, то уменьшается, хотя есть реализации TCP/IP, где все наоборот) ...


С теорией все понятно, непонятно с практикой. Не писать же драйвер с нуля, где взять исходник, чтобы только внести в него изменения?
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 30-04-2004 10:16 » 

Некоторую информацию можно узнать через IPHelper
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/ip_helper_functions.asp

Цитата: dimsv
С теорией все понятно, непонятно с практикой. Не писать же драйвер с нуля, где взять исходник, чтобы только внести в него изменения?


Похоже, батенька, вас open-source развратил.  Исходники ms tcp/ip закрыты от посторонних глаз и шаловливых ручек.

Попробуйте обратиться в организацию, которая подписана на Microsoft Shared Sources.

По-моему, про msripv6 я вам уже писал.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
dimsv
Гость
« Ответ #6 : 30-04-2004 11:32 » 

Цитата: npak

Похоже, батенька, вас open-source развратил.  Исходники ms tcp/ip закрыты от посторонних глаз и шаловливых ручек.

По-моему, про msripv6 я вам уже писал.


Да, спасиб за ссылки.
А с исходниками печально, как-то сразу не догадался..

Ну да ладно. А если рассмотреть предельно упрощенный вариант - есть две сетевые карты, воткнуты напрямую, никакой маршрутизации, нужно переслать заранее известный файл. Протокол пишу с нуля, но на основе идей TCP Reno (тех, которые касаются окна, контроля за доставкой пакетов и т.д.) Это будет задача, решаемая на уровне драйверов?
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 30-04-2004 11:56 » 

Цитата: dimsv

Ну да ладно. А если рассмотреть предельно упрощенный вариант - есть две сетевые карты, воткнуты напрямую, никакой маршрутизации, нужно переслать заранее известный файл. Протокол пишу с нуля, но на основе идей 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.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
dimsv
Гость
« Ответ #8 : 03-05-2004 02:46 » 

Склоняюсь к варианту с TDI, но кое-что непонятно.
Там есть два варианта установки соединения:  сonnection-oriented и connectionless. Мне, как я понимаю, нужен второй.
Но куда пойдет датаграмма после вызова TDI_SEND_DATAGRAM, непосредственно на адаптер или будет еще где-то чем-то обрабатываться?
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 05-05-2004 09:28 » 

Будет обрабатываться транспортным драйвером.  

Насколько я понимаю, в стеке TCP/IP  TDI_SEND_DATAGRAM отображается на отправку UDP.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #10 : 05-05-2004 13:52 » 

dimsv, npak, не прав. ПОлные примеры драйверов есть в DDK - кроме того - на выходных постараюсь отделать и вывесить драйвер TDI в виде примера!!!!

TDI_SEND_DATAGRAM - пойдет в NDIS потом в случае наличия в системе в драйвер фильтра, а потом пойдет в драйвер адаптера!
Записан

А птичку нашу прошу не обижать!!!
Anonymous
Гость
« Ответ #11 : 06-05-2004 21:20 » 

Цитата: Гром
dimsv, npak, не прав. ПОлные примеры драйверов есть в DDK - кроме того - на выходных постараюсь отделать и вывесить драйвер TDI в виде примера!!!!

TDI_SEND_DATAGRAM - пойдет в NDIS потом в случае наличия в системе в драйвер фильтра, а потом пойдет в драйвер адаптера!

Будет интересно посмотреть.  

Свой ответ по обработке TDI_SEND_DATAGRAM я основываю на исходниках к реализации TCP/IPv6.  В них диспетчер обрабатывает минорный код TDI_SEND_DATAGRAM как отправку UDP пакета.

Сейчас уже поздно, на следующей неделе посмотрю подробнее (если нужно).
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 06-05-2004 21:21 » 

Гость -- это я  Отлично
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
dimsv
Гость
« Ответ #13 : 11-05-2004 02:29 » 

Цитата: Гром
постараюсь отделать и вывесить драйвер TDI в виде примера!!!!


Гром, примера пока еще нет или не там ищу? Очень уж хочется посмотреть.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines