Перейти к содержанию
    

В заголовке IP кадра второй байт - тип обслуживания пакета (оптимизация, минимизировать задержку, максимальная производительность, максимальная надёжность передачи, минимизировать стоимость доставкипакета). Что означают эти опции и реально они на что-то влияют?

9 байт IP - TTL время жизни пакета, максимальное количество пройденныхмаршрутизаторов. Обычно 32 или 64. Как эта величена связана с реальной действительностью.

Важна любая информация. Идёт стадия накопления информации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Типичный заголовок

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
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

 

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;

Ну и т.д.

 

Как вам такой подход? Какие есть замечания?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

uint16 PORT_distenation;
Destination :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну пока я только IP формирую. Впринципе, вроде всё OK, вкладываю ICMP-ping и на google. И нифига не приходит :laughing: Грешить могу только на CRC ip шапки. Буду разбиратся.

Ещё TCP не брал. Неужели он настолько сложнее UDP? Владея предварительной инфой, о мне не показался "страшным".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TCP простой, немного сложнее UDP. Проблема в том, что его отлаживать надо намного дольше чем UDP (только сравните заголовки TCP и UDP!).

 

Да, с CRC бывает больше всего проблем. :) Так что советую найти где-нибудь калькулятор, который бы считал CRC, а Вы бы сранивали его с тем, что выдает ваша функция.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё проблема решена. 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 - адрес который мне сеть выдала

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начал изучать TCP. Дааа... Не думал, что он настолько сложен. Не удастся реализовать с "наскока".A время поджимает. Народ, может кто поделится готовыми реализациями TCP, или ссылочку кто подскажет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изучать исходные тексты от linux, все дистрибутивы поддерживают TCP стек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скачал LwIP. Думаю выдрать от туда TCP. Кто работал с этим, какие мнения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скачал LwIP. Думаю выдрать от туда TCP. Кто работал с этим, какие мнения?

 

может єто поможет, сам по нему разбираюсь

post-30423-1225278538_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

To west329_:

A вы уже написали PPP(Ethernet),IP?

Вы сейчас TCP пишите?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

To west329_:

A вы уже написали PPP(Ethernet),IP?

Вы сейчас TCP пишите?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...