Beginning
Oct 24 2008, 07:29
В заголовке IP кадра второй байт - тип обслуживания пакета (оптимизация, минимизировать задержку, максимальная производительность, максимальная надёжность передачи, минимизировать стоимость доставкипакета). Что означают эти опции и реально они на что-то влияют?
9 байт IP - TTL время жизни пакета, максимальное количество пройденныхмаршрутизаторов. Обычно 32 или 64. Как эта величена связана с реальной действительностью.
Важна любая информация. Идёт стадия накопления информации.
vesago
Oct 24 2008, 07:47
Типичный заголовок
Код
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
Oct 24 2008, 08:12
Спасибо.
To vesago:
А это из исходников linux или чего другого?
Вы можите выложить исходников побольше, например (__reverse(total_len)

, конечно если это не комерческая инфа.
Я например думаю сделать 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
Oct 27 2008, 11:09
Вы конечно рановато замахнулись на TCP. Начните хотябы с UDP - во много раз проще будет начать.
Цитата(Beginning @ Oct 24 2008, 13:12)

uint16 PORT_distenation;
Destination
Beginning
Oct 27 2008, 11:21
Ну пока я только IP формирую. Впринципе, вроде всё OK, вкладываю ICMP-ping и на google. И нифига не приходит

Грешить могу только на CRC ip шапки. Буду разбиратся.
Ещё TCP не брал. Неужели он настолько сложнее UDP? Владея предварительной инфой, о мне не показался "страшным".
lolful
Oct 28 2008, 05:15
TCP простой, немного сложнее UDP. Проблема в том, что его отлаживать надо намного дольше чем UDP (только сравните заголовки TCP и UDP!).
Да, с CRC бывает больше всего проблем.

Так что советую найти где-нибудь калькулятор, который бы считал CRC, а Вы бы сранивали его с тем, что выдает ваша функция.
Beginning
Oct 28 2008, 07:00
Да блин с этими CRC одни проблемы. С CRC PPP долго мучался. Вот походу таже проблема с CRC IP. А самое главное что не понятно где грабли. То ли CRC, толи что другое. Но факт остаётся фактом, PING отправляется и ничего не приходит. Вы не знаете где взять калькулятор CRC для IP?
Beginning
Oct 28 2008, 08:14
Всё проблема решена. 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
Oct 29 2008, 09:24
Начал изучать TCP. Дааа... Не думал, что он настолько сложен. Не удастся реализовать с "наскока".A время поджимает. Народ, может кто поделится готовыми реализациями TCP, или ссылочку кто подскажет.
mdmitry
Oct 29 2008, 09:31
Изучать исходные тексты от linux, все дистрибутивы поддерживают TCP стек.
Beginning
Oct 29 2008, 10:18
Скачал LwIP. Думаю выдрать от туда TCP. Кто работал с этим, какие мнения?
west329_
Oct 29 2008, 11:12
Цитата(Beginning @ Oct 29 2008, 14:18)

Скачал LwIP. Думаю выдрать от туда TCP. Кто работал с этим, какие мнения?
может єто поможет, сам по нему разбираюсь
Beginning
Oct 29 2008, 11:25
Встречал я подобные схемы, и ещё сложнее. Там столько нюансов. Один расчёт окна чего стоит. Вообще можно написать. Но писать километр времени надо. Лично я нелюблю чужие исходники брать, т.к. на их изучение тратится примерно столько же времени, сколько и на написание своих. Но видимо не в этом случае.

Ни у кого нету uCOS TCP/IP. Хочется глянуть что за весч. А то на их сайте надо километровую анкету заполнять, а у меня хроническая аллергия к подобным анкетам.
To west329_:
A вы уже написали PPP(Ethernet),IP?
Вы сейчас TCP пишите?
west329_
Oct 29 2008, 12:04
Цитата(Beginning @ Oct 29 2008, 15:25)

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

Ни у кого нету uCOS TCP/IP. Хочется глянуть что за весч. А то на их сайте надо километровую анкету заполнять, а у меня хроническая аллергия к подобным анкетам.
To west329_:
A вы уже написали PPP(Ethernet),IP?
Вы сейчас TCP пишите?
дошол до TCP и в стопор, уж больно сложная реализация, но говорят можно простую сотворить, если используются небольшие пакеты данных, чтоб не разбивать и собирать их потом. пока ищу..
west329_
Oct 29 2008, 12:50
Цитата(Beginning @ Oct 29 2008, 16:33)

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

Так к UDP вроде не относится повторная посылка?
програмно посылаю снова потеряный пакет и так 3 раза если небыло ответа пингую хост если и тогда нет ответа разрываю связь и всё заново поднимаю
Цитата(Beginning @ Oct 29 2008, 14:18)

Скачал LwIP. Думаю выдрать от туда TCP. Кто работал с этим, какие мнения?
Да работает все, чего там разбираться... Запускается даже без всякой операционки. При желании даже PPP в "безоперационный" вид разворачивается.
При желании можно их багтрекер внимательно почитать, и версию поновее с CVS скачать.