Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

пакет TCP руками

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Сети
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 - немного посложнее.. Дело в том, что это уровень потоковый.. имеются понятия состояний канала...опять же - вспомогательных задач добавиться.. Ну например как решать такие весчи как: заторы пакетов, пропажи пакетов, детекция разрыва, вычисление окна фрэйма, медленные старты, быстрые старты...ну шелухи всякой навалом... т.е. готовтесь как минимум просидеть несколько дней, ночей, месяцев со сниферами в обнимку и с доками на соответствующие протоколы... И найдя решение очередной задачи к своему ужасу обнаружить, что очередной комп по айпи адресу такому-то выдаёт постоянно дисконнект - по не известной причине(на сотом киллобайте потоковой пачки, когда работают более трёх ваших клиентов) Smile))

если не верите - проверьте Laughing
(круглый)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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 - можно почитать сорцы этого модуля Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
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    Заголовок сообщения: Ответить с цитатой

предлагаю "забить на аффтора", пока он не распишет _подробно_ что, для какой цели и зачем ему нужно ))))
и что он холчет получить в конце... Exclamation
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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

в учебнике это излагается, в духе приймите к сведению вот так оно работает и все (почему к этому пришли вам даже разработчики врядли расскажут если захотят). Олифер к примеру пишет, посмотрите и преподавателю дайте посмотреть

или сделайте какую-нить мульку

короче, проффессор - лопух Laughing Laughing
_________________
не стыдно быть дураком, стыдно им оставаться...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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 от имени чужих станций Laughing . Вот в общем то и вся область применения. Если Вы вяжете клиент-серверные системы, то рекомендации в данном случае - уже озвучил выше...
ЗЫ ЗЫ
С азмовскими вставками - Вы явно перемудрили. Там всё мона начирикать под стандартными сями... Если программируете под сам 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 Exclamation
К примеру, с помощью анализатора Sniffer захватить трафик сети, и проанализировать заголовки IP-пакетов, которые перемещались в сети, сделать соответствующие выводы.
_________________
Вот такая картина маслом! (c)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
komap



Зарегистрирован: 15.12.2006
Сообщения: 6

СообщениеДобавлено: Чт Янв 11 2007 17:53    Заголовок сообщения: Ответить с цитатой

oleg_poruchikov писал(а):
IMHO: Для лабораторной работы можно использовать sniffer Exclamation
К примеру, с помощью анализатора Sniffer захватить трафик сети, и проанализировать заголовки IP-пакетов, которые перемещались в сети, сделать соответствующие выводы.



идея хорошая....только специальность стдунетов - программное обеспечение вычислительной техники...в л/р они сами должны что-то писать, а не пользоваться готовым ПО (возможно я не знаю что такое Sniffer)...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Сети Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...