Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Свой стек TCP/IP
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Beginning
В заголовке IP кадра второй байт - тип обслуживания пакета (оптимизация, минимизировать задержку, максимальная производительность, максимальная надёжность передачи, минимизировать стоимость доставкипакета). Что означают эти опции и реально они на что-то влияют?
9 байт IP - TTL время жизни пакета, максимальное количество пройденныхмаршрутизаторов. Обычно 32 или 64. Как эта величена связана с реальной действительностью.
Важна любая информация. Идёт стадия накопления информации.
vesago
Типичный заголовок
Код
void Create_IP_Header(unsigned char *ip_header, unsigned char protocol, unsigned int total_len,
                      unsigned int id, unsigned long src_addr, unsigned long dst_addr)
{
  *((unsigned char*)ip_header + IP_HDR_VER_LEN) = 0x45;                                         //Version + IHL
  *((unsigned char*)ip_header + IP_HDR_TOS) = 0x00;                                             //ToS
  *(unsigned int*)(unsigned char*)((unsigned char*)ip_header + IP_HDR_TOTAL_LEN) = __reverse(total_len);        //Total Lenghth
  *(unsigned int*)(unsigned char*)((unsigned char*)ip_header + IP_HDR_ID) = __reverse(id);      //Identification
  *((unsigned char*)ip_header + (IP_HDR_FLAG_FRGT_OFFSET + 0)) = 0x40;                          //Flags + Fragment Offset. MF = 0, DF = 1
  *((unsigned char*)ip_header + (IP_HDR_FLAG_FRGT_OFFSET + 1)) = 0x00;                          //Fragment Offset
  *((unsigned char*)ip_header + IP_HDR_TTL) = 0x80;                                             //TTL
  *((unsigned char*)ip_header + IP_HDR_PROTOCOL) = protocol;                                    //Protocol
  *(unsigned int*)(unsigned char*)((unsigned char*)ip_header + IP_HDR_CHECKSUM) = 0;                            //IP Checksum
  *(unsigned long*)(unsigned char*)((unsigned char*)ip_header + IP_HDR_SRC_ADDR) = __reverse(src_addr);         //SRC IP ADDR
  *(unsigned long*)(unsigned char*)((unsigned char*)ip_header + IP_HDR_DST_ADDR) = __reverse(dst_addr);         //DST IP ADDR
}
Beginning
Спасибо.

To vesago:
А это из исходников linux или чего другого?
Вы можите выложить исходников побольше, например (__reverse(total_len)wink.gif, конечно если это не комерческая инфа.
Я например думаю сделать IP заголовок через union, навскидку например так:
Код
tupdef union{
uint8 raw_data[2000];
//---------------------------------
struct{
    uint8 ip_header;
    uint8 tos;
    ……    
}IP;
//--------------------------------
struct{
    uint8 shift[32];  //пропускаем IP заголовок
    uint16  PORT_surce;
uint16  PORT_distenation;
    ……    
}TCP;
//----------------------------------
struct{
    uint8 shift[32];  //пропускаем IP заголовок
    ……    
}UDP;
}IP_FRAME;

Тогда обращения будут выглядеть так:
IP_FRAME ip_frame;
Ip_frame.IP. header=0x45;
Ip_frame.TCP. PORT_surce =0x0080;
Ну и т.д.

Как вам такой подход? Какие есть замечания?
lolful
Вы конечно рановато замахнулись на TCP. Начните хотябы с UDP - во много раз проще будет начать.

Цитата(Beginning @ Oct 24 2008, 13:12) *
uint16 PORT_distenation;
Destination smile.gif
Beginning
Ну пока я только IP формирую. Впринципе, вроде всё OK, вкладываю ICMP-ping и на google. И нифига не приходит laughing.gif Грешить могу только на CRC ip шапки. Буду разбиратся.
Ещё TCP не брал. Неужели он настолько сложнее UDP? Владея предварительной инфой, о мне не показался "страшным".
lolful
TCP простой, немного сложнее UDP. Проблема в том, что его отлаживать надо намного дольше чем UDP (только сравните заголовки TCP и UDP!).

Да, с CRC бывает больше всего проблем. smile.gif Так что советую найти где-нибудь калькулятор, который бы считал CRC, а Вы бы сранивали его с тем, что выдает ваша функция.
Beginning
Да блин с этими CRC одни проблемы. С CRC PPP долго мучался. Вот походу таже проблема с CRC IP. А самое главное что не понятно где грабли. То ли CRC, толи что другое. Но факт остаётся фактом, PING отправляется и ничего не приходит. Вы не знаете где взять калькулятор CRC для IP?
Beginning
Всё проблема решена. PING отправляется и приходит. Вот пример:

Вот что я посылаю :
--> GSM:FF,3,0,21,45,0,0,1C,0,0,40,0,FF,1,BD,F0,A,14,B7,8F,40,E9,BB,63,8,0,F7,FE,0,1
,0,0,22,E6,

И вот что приходит :
<-- GSM:FF,3,0,21,45,0,0,1C,0,0,40,0,EC,1,D0,F0,40,E9,BB,63,A,14,B7,8F,0,0,FF,FE,0,1
,0,0,B1,32,

IP - 40.E9.BB.63 - это google
IP - A,14,B7,8F - адрес который мне сеть выдала
Beginning
Начал изучать TCP. Дааа... Не думал, что он настолько сложен. Не удастся реализовать с "наскока".A время поджимает. Народ, может кто поделится готовыми реализациями TCP, или ссылочку кто подскажет.
mdmitry
Изучать исходные тексты от linux, все дистрибутивы поддерживают TCP стек.
Beginning
Скачал LwIP. Думаю выдрать от туда TCP. Кто работал с этим, какие мнения?
west329_
Цитата(Beginning @ Oct 29 2008, 14:18) *
Скачал LwIP. Думаю выдрать от туда TCP. Кто работал с этим, какие мнения?


может єто поможет, сам по нему разбираюсь
Beginning
Встречал я подобные схемы, и ещё сложнее. Там столько нюансов. Один расчёт окна чего стоит. Вообще можно написать. Но писать километр времени надо. Лично я нелюблю чужие исходники брать, т.к. на их изучение тратится примерно столько же времени, сколько и на написание своих. Но видимо не в этом случае. crying.gif

Ни у кого нету uCOS TCP/IP. Хочется глянуть что за весч. А то на их сайте надо километровую анкету заполнять, а у меня хроническая аллергия к подобным анкетам.

To west329_:
A вы уже написали PPP(Ethernet),IP?
Вы сейчас TCP пишите?
west329_
Цитата(Beginning @ Oct 29 2008, 15:25) *
Встречал я подобные схемы, и ещё сложнее. Там столько нюансов. Один расчёт окна чего стоит. Вообще можно написать. Но писать километр времени надо. Лично я нелюблю чужие исходники брать, т.к. на их изучение тратится примерно столько же времени, сколько и на написание своих. Но видимо не в этом случае. crying.gif

Ни у кого нету uCOS TCP/IP. Хочется глянуть что за весч. А то на их сайте надо километровую анкету заполнять, а у меня хроническая аллергия к подобным анкетам.

To west329_:
A вы уже написали PPP(Ethernet),IP?
Вы сейчас TCP пишите?


дошол до TCP и в стопор, уж больно сложная реализация, но говорят можно простую сотворить, если используются небольшие пакеты данных, чтоб не разбивать и собирать их потом. пока ищу..
Beginning
А на чём остановился?
west329_
Цитата(Beginning @ Oct 29 2008, 16:33) *
А на чём остановился?

UDP + повторная повторная посылка потеряных пакетов
Beginning
Так к UDP вроде не относится повторная посылка?
west329_
Цитата(Beginning @ Oct 29 2008, 16:52) *
Так к UDP вроде не относится повторная посылка?


програмно посылаю снова потеряный пакет и так 3 раза если небыло ответа пингую хост если и тогда нет ответа разрываю связь и всё заново поднимаю
stream
Цитата(Beginning @ Oct 29 2008, 14:18) *
Скачал LwIP. Думаю выдрать от туда TCP. Кто работал с этим, какие мнения?

Да работает все, чего там разбираться... Запускается даже без всякой операционки. При желании даже PPP в "безоперационный" вид разворачивается.

При желании можно их багтрекер внимательно почитать, и версию поновее с CVS скачать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.