Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
komap
Зарегистрирован: 15.12.2006 Сообщения: 6
|
Добавлено: Пт Дек 15 2006 13:08 Заголовок сообщения: пакет TCP руками |
|
|
Возможно ли в C# сформировать пакеты IP и TCP вручную, после чего передать их по сети?
Заранее благодарен... |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Пт Дек 15 2006 13:45 Заголовок сообщения: Re: пакет TCP руками |
|
|
komap писал(а): | Возможно ли в C# сформировать пакеты IP и TCP вручную, после чего передать их по сети?
Заранее благодарен... |
1) понятие пакета есть на IP уровне... на уровне TCP есть понятие потока.
2) для обеспечения посылки на IP уровне нужен выход на драйвер сетевой карточки, который примет на вход ваш поток байт. В формировании самой пачки нет ничего сверхгениального - нужно просто ознакомиться с соответствующим протоколом...
3) для приёма пакетов на IP уровне, нужно будет уже немного "поработать". Дело в том, что на данном уровне нужно опознавать вспомогательные весчи и события.. ну например фрагментирование этих пакетов.. т.е. где то в сети одын большой IP пакет могли порезать на кусочки поменьше.. соответственно такие головные боли как сколько ждать все фрагменты, как строить карту сборки, как определить критерий достоверности ...ну и прочая мурня...
4) с уровнем TCP - немного посложнее.. Дело в том, что это уровень потоковый.. имеются понятия состояний канала...опять же - вспомогательных задач добавиться.. Ну например как решать такие весчи как: заторы пакетов, пропажи пакетов, детекция разрыва, вычисление окна фрэйма, медленные старты, быстрые старты...ну шелухи всякой навалом... т.е. готовтесь как минимум просидеть несколько дней, ночей, месяцев со сниферами в обнимку и с доками на соответствующие протоколы... И найдя решение очередной задачи к своему ужасу обнаружить, что очередной комп по айпи адресу такому-то выдаёт постоянно дисконнект - по не известной причине(на сотом киллобайте потоковой пачки, когда работают более трёх ваших клиентов) ))
если не верите - проверьте
(круглый) |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Пт Дек 15 2006 13:49 Заголовок сообщения: Re: пакет TCP руками |
|
|
komap писал(а): | Возможно ли в C# сформировать пакеты IP и TCP вручную, после чего передать их по сети?
Заранее благодарен... |
ышо добавлю...
я не знаю на сколько Вы хорошо знаете си бимоль....
НО !!! протоколы которые Вы будете реализовывать, принципы работы сети, и т.п. весчи - Вы будете знать отлично !!!
удачи Вам
(круглый) |
|
Вернуться к началу |
|
|
komap
Зарегистрирован: 15.12.2006 Сообщения: 6
|
Добавлено: Пт Дек 15 2006 15:36 Заголовок сообщения: Re: пакет TCP руками |
|
|
kolobok0 писал(а): | komap писал(а): | Возможно ли в C# сформировать пакеты IP и TCP вручную, после чего передать их по сети?
Заранее благодарен... |
1) понятие пакета есть на IP уровне... на уровне TCP есть понятие потока.
2) для обеспечения посылки на IP уровне нужен выход на драйвер сетевой карточки, который примет на вход ваш поток байт. В формировании самой пачки нет ничего сверхгениального - нужно просто ознакомиться с соответствующим протоколом...
3) для приёма пакетов на IP уровне, нужно будет уже немного "поработать". Дело в том, что на данном уровне нужно опознавать вспомогательные весчи и события.. ну например фрагментирование этих пакетов.. т.е. где то в сети одын большой IP пакет могли порезать на кусочки поменьше.. соответственно такие головные боли как сколько ждать все фрагменты, как строить карту сборки, как определить критерий достоверности ...ну и прочая мурня...
|
Задача ствоит в формировании пакета (потока) руками (адрес отправителя, адрес получателя,данные и все необходимое для пакета), а вопросами дефрагментации и прочей мурней пусть занимается сам протокол....на очень низкий уровень программирования мне спускаться не надо...в том то и вопрос,как это сделать на С# |
|
Вернуться к началу |
|
|
Denjs
Зарегистрирован: 29.08.2003 Сообщения: 137
|
Добавлено: Пт Дек 15 2006 16:01 Заголовок сообщения: |
|
|
ну а нафига вам собственно тогда "формировать пакеты руками"?
используйсе стандартные компоненты и/или функции типа alя-telnet-соединения а протокол соответственно реализуете сами.
Т.Е ваша задача разбивается на 2 более простых задачи как я понял
1) как "открыть соединение с заданным tcp-портом на удаленной машине"?
2) как создать "сервер", ожидающий соединение на заданном порту?
думаю это стандартная задача. читайте маны или в msdn должно быть.(?) |
|
Вернуться к началу |
|
|
komap
Зарегистрирован: 15.12.2006 Сообщения: 6
|
Добавлено: Пт Дек 15 2006 17:05 Заголовок сообщения: |
|
|
Делаю работу для преподавтеля...Что то вроде заданий к лабораторным работам с примерами по дисциплине Сети ЭВМ
Пакет IP состоит
“Номер версии”
"Длина заголовка"
“Тип сервиса"
"Общая длина"
"Идентификатор пакета"
"Флаги"
"Смещение фрагмента"
"Время жизни"
"Идентификатор Протокола верхнего уровня"
"Контрольная сумма"
"Адрес источника"
Большинство из этих параметров хотелось бы задавать вручную...Что бы студент мог прочувствовать все структуру пакета своими руками, а не пользовался стандартным интерфейсом... |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пт Дек 15 2006 19:45 Заголовок сообщения: |
|
|
Ой боюсь не сумеете вы. Сложно это, вы ведь хотите полностью реализовать а-ля свой TCP/IP? Пусть не в полном объеме, но свой?
Ой не делали ли бы вы этого...
Если очень хочется - посмотрите код реализации TCP/IP в Linux. Исходные коды на Си найдете легко. |
|
Вернуться к началу |
|
|
borkes
Зарегистрирован: 24.03.2006 Сообщения: 64 Откуда: Озерск/Москва
|
Добавлено: Пт Дек 15 2006 22:12 Заголовок сообщения: |
|
|
не знаю как в С#, а в перле для TCP есть универсальный IO::Socket - можно почитать сорцы этого модуля |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пт Дек 15 2006 22:49 Заголовок сообщения: |
|
|
Сокеты - это не то. Сокеты - это то програмная привязка, которая обеспечивает привязку приложения к TCP или UDP порту.
Используя сокеты, вы не заботитесь о структуре формирования пакета, проблемы фрагментации, проблемы выбора пути доставки и многого, многого другого. Это делает стек TCP/IP, который вы стратежно поставили в своей ОС.
Автору же нужно именно самому формировать TCP пакеты. Самому заполнить поля пакета и отправить его на канальный уровень, т.е. фактически драйверу сетевой платы.
Проблема в том, что автор не видит слона целиком. Он не видит весь объем работы перед тем как сделать простые операции по заполнению заголовков пакета.
Предлагаю найти в Инете книгу "TCP/IP крупным планом". Это поможет понять что к чему и стоит ли игра свеч. |
|
Вернуться к началу |
|
|
Denjs
Зарегистрирован: 29.08.2003 Сообщения: 137
|
Добавлено: Пт Дек 15 2006 23:47 Заголовок сообщения: |
|
|
предлагаю "забить на аффтора", пока он не распишет _подробно_ что, для какой цели и зачем ему нужно ))))
и что он холчет получить в конце... |
|
Вернуться к началу |
|
|
killall
Зарегистрирован: 31.10.2006 Сообщения: 11
|
Добавлено: Пн Дек 18 2006 17:09 Заголовок сообщения: |
|
|
ПРи помощи сокетов можно решить проблему.
Почитайте Стивенса "Unix.Разработка сетевых приложений", замечательный мануал, там правда для си, но интерфейс сокетов реализован для многих других языков, я думаю и для С# тоже. |
|
Вернуться к началу |
|
|
anton_wol
Зарегистрирован: 11.04.2005 Сообщения: 259 Откуда: Kiev
|
Добавлено: Пн Дек 18 2006 19:09 Заголовок сообщения: |
|
|
в учебных целях это нахрен не нужно
вы же не учите на разработчиков TCP/IP
в учебнике это излагается, в духе приймите к сведению вот так оно работает и все (почему к этому пришли вам даже разработчики врядли расскажут если захотят). Олифер к примеру пишет, посмотрите и преподавателю дайте посмотреть
или сделайте какую-нить мульку _________________ не стыдно быть дураком, стыдно им оставаться... |
|
Вернуться к началу |
|
|
anton_wol
Зарегистрирован: 11.04.2005 Сообщения: 259 Откуда: Kiev
|
Добавлено: Пн Дек 18 2006 19:10 Заголовок сообщения: |
|
|
в учебных целях это нахрен не нужно
вы же не учите на разработчиков TCP/IP
в учебнике это излагается, в духе приймите к сведению вот так оно работает и все (почему к этому пришли вам даже разработчики врядли расскажут если захотят). Олифер к примеру пишет, посмотрите и преподавателю дайте посмотреть
или сделайте какую-нить мульку
короче, проффессор - лопух _________________ не стыдно быть дураком, стыдно им оставаться... |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Пн Дек 25 2006 15:51 Заголовок сообщения: Re: пакет TCP руками |
|
|
komap писал(а): | ...Задача ствоит в формировании пакета (потока) руками (адрес отправителя, адрес получателя,данные и все необходимое для пакета), а вопросами дефрагментации и прочей мурней пусть занимается сам протокол....на очень низкий уровень программирования мне спускаться не надо...в том то и вопрос,как это сделать на С# |
ээээээ уважаемый...Когда Вы говорите "заполнить" - это значит что ВСЕ (!) головные боли по данному уровню Вы берёте НА СЕБЯ !!!
Пример...
Уровень IP (эта та структура, которую Вы привели в виде списка полей)
Взглянем внимательней на флаги... Один из флагов - пакет дефрагментирован...Т.е. если этот флаг выставлен (а он выставляется почти автоматом под форточками, если IP пакет превышает 1500 байт - см. настройки данного уровня) то это значит, что пришедший пакет есть МАЛЕНЬКАЯ частичка от БОЛЬШОГО пакета, который был разбит на части... Т.е. Вам (и именно Вам, а не кому то !!!) нужно выделить память, записать туда данные, записать вспомогательные весчи типа номер пакета, смещение, длина, время прихода (чтоб отслеживать протухание) и прочую мурню .... и ждать (!!) прихода следующего фрагмента... Это и есть РЕАЛИЗАЦИЯ IP УРОВНЯ !!!!
ОСАДОК
----------
Если Вы решаетесь на СВОЮ реализацию данного уровня, то ВСЕ(!!!) проблемы данного уровня и ВЫШЕ(!) Вы будете должны взять на СЕБЯ! Всё остальное от лукавого...
удачи Вам
(круглый)
ЗЫ
TCP/IP - там ышо поболее наворотов, чем IP...
ЗЫ ЗЫ
Оно Вам нуна ? |
|
Вернуться к началу |
|
|
Dmitry_Karpov
Зарегистрирован: 23.02.2006 Сообщения: 212 Откуда: Москва, Матвеевское
|
Добавлено: Пн Дек 25 2006 22:12 Заголовок сообщения: |
|
|
1) "Можно ли" больше зависит от операционки. чем от языка программирования.
2) Берём Linux или FreeBSD - исходники сетевого стека открыты, в хедерах (/usr/include) есть описания типов структур для работы со всеми уровнями стека протоколов.
3) Как уже говорили, обработать все возможные варианты событий, возникающих в сетИ Internet (фрагментация, нарушение очерёдности, пропажа и дублирование IP-пакетов), очень сложно, а сделать работу сетевого стека ещё и эффективной под силу только сильномогучим программистам, хорошо знающим математику. _________________ Хочу в Хогвардс преподавателем информатики. |
|
Вернуться к началу |
|
|
komap
Зарегистрирован: 15.12.2006 Сообщения: 6
|
Добавлено: Пт Янв 05 2007 19:26 Заголовок сообщения: Re: пакет TCP руками |
|
|
[quote="kolobok0"][quote="komap
ээээээ уважаемый...Когда Вы говорите "заполнить" - это значит что ВСЕ (!) головные боли по данному уровню Вы берёте НА СЕБЯ !!!/quote]
Формировал пакет IPX руками, а на остальные вопросы не обращал внимания...Правда пришлось использовать ассемблерные вставки. Вот пример:
сonst SockClient : word = $4141;
SockServer = $4747;
ThisNet : TNetwork= (0,0,0,0);
var
TxECB,RxECB:TECB;
TxHeader,RxHeader:TIPXHEADER;
i:Integer;
begin
clrscr;
if not Init(SockClient) then exit;
IPXGetInternetworkAddress;
FillChar (TxHeader,sizeof(TxHeader),#0);
with TxHeader do
begin
PacketType := 4;
Dest.Station.Network:=ThisNet;
Dest.Station.Node := forAll;
Dest.Socket := Swap(SockServer);
Source.Station.Network:=OwnAddress.Network;
Source.Station.Node:=OwnAddress.Node;
Source.Socket :=swap(SockClient);
Data := 'Hello Server';
end;
Примерно такое же хотелось сделать на языке более высокого уровня, и для другого протокола. |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Ср Янв 10 2007 13:28 Заголовок сообщения: Re: пакет TCP руками |
|
|
komap писал(а): | ...Формировал пакет IPX руками, а на остальные вопросы не обращал внимания....... |
ЗАМЕЧАТЕЛЬНО !!!
А теперь попробуйте создать помеху по пути следования Ваших пакетов. Есть много способов - один из них ударная нагрузка. Попробуйте насытить трафик другими пакетами. Проходит ? Или Вам до лампочки гарантия доставки ?
И собственно вопрос...
Вам лишь бы отослать на деревню бабушке, или передать что то конкретное по конкретному адресу ?
Уважаемый...
IPX - это дайтаграмный уровень. В стэке IP смотрите его подобие - UDP (кстати под Novell TCP/IP легко ставиться - посему если будете вязать Win32 с Novell - рекомендую юзать именно этот стэк...уж поверьте дураку). Его Вы сможете легко отправить кому угодно...Правда как и в случае с IPX доставка данных НЕ ГАРАНТИРУЕТСЯ !!! (например затор, либо обрыв кабельного хозяйства, либо...да мало ли..)
удачи Вам
(круглый)
ЗЫ
IPX имеет смысл юзать только для рассылки бродкастингов в стиле Novell от имени чужих станций . Вот в общем то и вся область применения. Если Вы вяжете клиент-серверные системы, то рекомендации в данном случае - уже озвучил выше...
ЗЫ ЗЫ
С азмовскими вставками - Вы явно перемудрили. Там всё мона начирикать под стандартными сями... Если программируете под сам Novell то - есть такая книга "Программирование под Netware 386" (если ничего не попутал). В синей, мягкой обложке. Год где то 1993... Если под клиента - то примеров в различных книгах достаточно много. Да и в инете сможете насчупать... |
|
Вернуться к началу |
|
|
komap
Зарегистрирован: 15.12.2006 Сообщения: 6
|
Добавлено: Ср Янв 10 2007 16:52 Заголовок сообщения: Re: пакет TCP руками |
|
|
[/quote]
ЗАМЕЧАТЕЛЬНО !!!
А теперь попробуйте создать помеху по пути следования Ваших пакетов. Есть много способов - один из них ударная нагрузка. Попробуйте насытить трафик другими пакетами. Проходит ? Или Вам до лампочки гарантия доставки ?
[/quote]
Гарантия доставки не обязательна. Просто надо сделать пособие для лабораторной работы по этому протоколу...В общем я понял, что гнилое это дело. |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Чт Янв 11 2007 13:42 Заголовок сообщения: Re: пакет TCP руками |
|
|
komap писал(а): | Гарантия доставки не обязательна... |
именно это условие конфликтует с TCP/IP протоколом (его задача как раз наоборот - решать проблемы связанные с ГАРАНТИРОВАННОЙ доставкой). НО(!) Вы можете легко задействовать пакеты UDP. Это пакетная посылка, без подтверждения доставки. Протокол гарантирует только передачу в сеть (как IPX)...Единственно надо помнить, что IP уровень нужно будет задействовать по минимуму (выставлять флаги не дробить, не обрабатывать флаги дробления, не обрабатывать системные поля и т.п.). Т.е. минимально возможный пакет и распознавать те пакеты, обработку которых Вы не реализуете - для их отбраковки.
с уважением
(круглый) |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Янв 11 2007 13:49 Заголовок сообщения: |
|
|
эта... опа... Про SPX не забыли?
TCP/IP - это стек протоколов. Нельзя говорить, что он обеспечивает гарантированную доставку. Правильней говорить, что в стеке протоколов TCP/IP есть протокол TCP, который гарантирует доставку. В IPX/SPX этим занимается SPX.
http://sources.ru/protocols/bsp08/ch3.htm |
|
Вернуться к началу |
|
|
oleg_poruchikov
Зарегистрирован: 09.09.2004 Сообщения: 567 Откуда: http://tor.clan.su
|
Добавлено: Чт Янв 11 2007 14:44 Заголовок сообщения: |
|
|
IMHO: Для лабораторной работы можно использовать sniffer
К примеру, с помощью анализатора Sniffer захватить трафик сети, и проанализировать заголовки IP-пакетов, которые перемещались в сети, сделать соответствующие выводы. _________________ Вот такая картина маслом! (c) |
|
Вернуться к началу |
|
|
komap
Зарегистрирован: 15.12.2006 Сообщения: 6
|
Добавлено: Чт Янв 11 2007 17:53 Заголовок сообщения: |
|
|
oleg_poruchikov писал(а): | IMHO: Для лабораторной работы можно использовать sniffer
К примеру, с помощью анализатора Sniffer захватить трафик сети, и проанализировать заголовки IP-пакетов, которые перемещались в сети, сделать соответствующие выводы. |
идея хорошая....только специальность стдунетов - программное обеспечение вычислительной техники...в л/р они сами должны что-то писать, а не пользоваться готовым ПО (возможно я не знаю что такое Sniffer)... |
|
Вернуться к началу |
|
|
|