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



Ucp1 - часть 8


Размер этого окна может лежать в пределах 1-7. Пакеты посылаются строго по очереди, получение всех пакетов должно быть подтверждено в том порядке, в каком они были посланы.

В пакетах управления поле ххх может принимать следующие значения:

CLOSE Соединение должно быть оборвано немедленно (например, обнаружено слишком много ошибок).
RJ или NAK Последний пакет доставлен с ошибкой. В поле ууу записан номер последнего пакета, доставленного корректно.
SRJ Выборочный отказ. Поле ууу содержит номер пакета, доставленного с ошибкой. Пакет должен быть послан повторно. В UUCP обычно не используется.
RR или ACK Подтверждение получения пакета. Поле ууу содержит код номера последнего пакета, полученного корректно.
INITA Первый пакет инициализации. Поле ууу содержит код максимального размера окна.
INITB Второй пакет инициализации. Поле ууу содержит код размера пакетов, который планируется использовать.
INITC Третий пакет инициализации. Поле ууу содержит размер окна, который будет использован.

Контрольная сумма управляющего пакета равна 0хаааа - с, где с - контрольный байт заголовка. Контрольная сумма информационного пакета равна 0хаааа - (check ^ c), где ^ обозначает операцию исключающее ИЛИ, а check результат работы программы, приведенной ниже и обрабатывающей поле данных. Исходными параметрами для этой программы является указатель на начало блока данных z и число байтов в блоке c.

Int

igchecksum (z, c)

register const char *z;
register int c;

{

register unsigned int ichk1, ichk2;
ichk1 = 0xffff;
ichk2 = 0;
do
{
register unsigned int b;

/* rotate ichk1 left. */

if ((ichk1 & 0x8000) == 0)
ichk1

else
{
ichk1

++ichk1;
}

/* add the next character to ichk1. */

b = *z++ & 0xff;
ichk1 += b;

/* add ichk1 xor the character position in the buffer counting from the back to ichk2. */

ichk2 += ichk1 ^ c; /* if the character was zero, or adding it to ichk1 caused an overflow, xor ichk2 to ichk1. */

if (b == 0 (ichk1 & 0xffff) < b)
ichk1 ^= ichk2;
}
while (--c > 0);
return ichk1 & 0xffff;
<


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



44