Контрольная сумма вычисляется для всех
Контрольная сумма вычисляется для всех байтов поля данных.
Один байт данных пересылается в любом случае. Для всех типов информационных пакетов поле ххх определяет порядковый номер пакета, а поле yyy определяет номер последнего пакета, принятого без ошибки, что и определяет максимальный размер окна, равный 7. Каждая из сторон, участвующих в обмене, использует окно, чтобы регистрировать число пакетов, которое может быть послано без получения подтверждения. Размер этого окна может лежать в пределах 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; |
Содержание Назад Вперед