Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > raw socke


Автор: Maledictus 16.5.2009, 12:47
собственно вопрос в следующем: объясните пожалуйста какая связь между константами в заголовках пакетов и данными из rfc.
Цитата

/*
 * Definitions for IP type of service (ip_tos)
 */
#define    IPTOS_TOS_MASK  0x1E
#define    IPTOS_TOS(tos)  ((tos) & IPTOS_TOS_MASK)
#define    IPTOS_LOWDELAY  0x10
#define    IPTOS_THROUGHPUT    0x08
#define    IPTOS_RELIABILITY    0x04
#define    IPTOS_LOWCOST  0x02
#define    IPTOS_MINCOST  IPTOS_LOWCOST

/*
 * Definitions for IP precedence (also in ip_tos) (hopefully unused)
 */
#define    IPTOS_PREC_MASK    0xe0
#define    IPTOS_PREC(tos)                ((tos) & IPTOS_PREC_MASK)
#define    IPTOS_PREC_NETCONTROL  0xe0
#define    IPTOS_PREC_INTERNETCONTROL    0xc0
#define    IPTOS_PREC_CRITIC_ECP  0xa0
#define    IPTOS_PREC_FLASHOVERRIDE    0x80
#define    IPTOS_PREC_FLASH  0x60
#define    IPTOS_PREC_IMMEDIATE  0x40
#define    IPTOS_PREC_PRIORITY  0x20
#define    IPTOS_PREC_ROUTINE  0x00


Это данные из netinet/ip.h о типе сервиса и приоритете для протокола ip

Цитата

биты 0-2  приоритет
бит 3     0 - нормальная задержка, 1 - малая задержка
бит 4     0 - нормальная пропускная способность,
             1 - высокая пропускная способность
бит 5     0 -  обычная достоверность, 1 - высокая достоверность
биты 6-7 зарезервированы
      0     1     2     3     4     5     6     7

   +-----+-----+-----+-----+-----+-----+-----+-----+

   |     приоритет   |  D  |  T  |  R  |  0  |  0  |

   +-----+-----+-----+-----+-----+-----+-----+-----+

Приоритет
   111 - управление сетью
   110 - межсетевое управление
   101 - CRITIC/ECP
   100 - более, чем мгновенно
   011 - мгновенно
   010 - немедленно
   001 - приоритетно
   000 - обычный маршрут


это из rfc791

вот почему IPTOS_LOWDELAY = 0x10, как это значение получено? Так же и с остальными.
Как например задать приоритеты для raw socketa?
Будут ли все значения универсальны для  Windows/Unix?

И, будьте добры, объясните когда необходимо использовать htons?
Заранее благодарю

Автор: Олег2005 16.5.2009, 23:55
Цитата(Maledictus @  16.5.2009,  11:47 Найти цитируемый пост)
вот почему IPTOS_LOWDELAY = 0x10, как это значение получено? Так же и с остальными.
Как например задать приоритеты для raw socketa?
Будут ли все значения универсальны для  Windows/Unix?

И, будьте добры, объясните когда необходимо использовать htons?

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

Автор: Maledictus 17.5.2009, 00:46
Я знаю, что игнорируют. Я пишу свой генератор пакетов, вот поэтому и хочу разобраться во всех подробностях. 
Как это я могу писать что хочу? А как тогда определить что именно я отправил в пакете?

Автор: Maledictus 21.5.2009, 07:06
Опять поднимаю в топ: подскажите как мне задать уровень приоритета в IP? Констант для этого нет, но я их могу определить сам, только вот не могу разобраться, как, например, 101-в битовом виде(CRITIC/ECP для приоритета в поле сервиса IP-пакета) перевести в тип 0x...В нете не смог найти описания. или единственный способ, это так и записать 3 бита??

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)