Телекоммуникационные технологии. Том 1




Определения - часть 20


Приведенные типовые значения параметров базируются на максимальном времени сбоя нумерации равном 2 секундам при скорости 50 пакетов/сек и времени таймаута 1 минута. Параметр таймаута MAX_DROPOUT должен соответствовать небольшой доле от 16-битового диапазона нумерации. Таким образом, после рестарта новый номер пакета с большой вероятностью не должен попасть в допустимый диапазон.

void init_seq(source *s, u_int16 seq)

{

s->base_seq = seq - 1;

s->max_seq = seq;

s->bad_seq = RTP_SEQ_MOD + 1;

s->cycles = 0;

s->received = 0;

s->received_prior = 0;

s->expected_prior = 0;

/* other initialization */

}

int update_seq(source *s, u_int16 seq)

{

u_int16 udelta = seq - s->max_seq;

const int MAX_DROPOUT = 3000;

const int MAX_MISORDER = 100;

const int MIN_SEQUENTIAL = 2;

*

* Источник нелегален до тех пор, пока не будет получено MIN_SEQUENTIAL пакетов

* с последовательно нарастающими номерами.

*/

if (s->probation) {

/* пакет соответствует последовательности */

if (seq == s->max_seq + 1) {

s->probation--;

s->max_seq = seq;

if (s->probation == 0) {

init_seq(s, seq);

s->received++;

return 1;

}

} else {

s->probation = MIN_SEQUENTIAL - 1;

s->max_seq = seq;

}

return 0;

} else if (udelta < MAX_DROPOUT) {

/* в порядке, с допустимым зазором */

if (seq < s->max_seq) {

/*

* Порядковый номер переполнен - начинаем новый 64K цикл.

*/

s->cycles += RTP_SEQ_MOD;

}

s->max_seq = seq;

} else if (udelta <= RTP_SEQ_MOD - MAX_MISORDER) {

/* порядковый номер изменился слишком сильно */

if (seq == s->bad_seq) {

/*

* Два последовательных пакета - предполагается, что другая сторона рестартовала, не

* предупредив нас об этом. re-sync (т.е., считаем, что получили первый пакет).

*/

init_seq(s, seq);

}

else {

s->bad_seq = (seq + 1) & (RTP_SEQ_MOD-1);

return 0;

}

} else {

/* задублированные пакеты или пакеты с перепутанным порядком прихода */

}

s->received++;

return 1;

}

Проверка корректности может быть и жестче, требуя более двух пакетов с последовательными номерами подряд.


Содержание  Назад  Вперед