Рисунок 4.4.14.1. Формат пакетов g-протокола
Пакет начинается с восьмеричного кода 020, далее следует поле k (1 Ј k Ј 9). Для управляющих пакетов k=9. Для информационных пакетов k определяет размер поля данных. k=1 соответствует 32 байтам данных, а k=9 – 4096 байтам. Далее следуют два байта контрольной суммы, контрольный байт, определяющий тип пакета, и xor-байт. Последний равен результату операции xor для полей k, младшего байта контрольной суммы, старшего байта контрольной суммы и контрольного байта. Этот байт служит для контроля целостности заголовка пакета.
Управляющий байт заголовка содержит в себе три субполя (ttxxxyyy). Поле tt может принимать следующие значения.
0 |
Указатель управляющего пакета (k должно быть равно 9). При этом поле xxx определяет тип управляющего пакета; |
1 |
Не используется UUCP; |
2 |
Информационный пакет; |
3 |
Короткий информационный пакет. |
Пусть длина поля данных, заданная k, равна 1, пусть также первый байт поля данных равен b1. Если b1 меньше 128, тогда истинное число байт в поле данных равно 1 – b1, начиная со второго байта. Если b1і 128 и второй байт поля данных b2, то истинное число байт в поле данных равно 1 – ((b1 & 0x7f) + (b2
Один байт данных пересылается в любом случае. Для всех типов информационных пакетов поле ххх определяет порядковый номер пакета, а поле yyy определяет номер последнего пакета, принятого без ошибки, что и определяет максимальный размер окна, равный 7. Каждая из сторон, участвующих в обмене, использует окно, чтобы регистрировать число пакетов, которое может быть послано без получения подтверждения. Размер этого окна может лежать в пределах 1-7. Пакеты посылаются строго по очереди, получение всех пакетов должно быть подтверждено в том порядке, в каком они были посланы.
В пакетах управления поле ххх может принимать следующие значения:
CLOSE |
Соединение должно быть оборвано немедленно (например, обнаружено слишком много ошибок). |
RJ или NAK |
Последний пакет доставлен с ошибкой. В поле ууу записан номер последнего пакета, доставленного корректно. |
SRJ |
Выборочный отказ. Поле ууу содержит номер пакета, доставленного с ошибкой. Пакет должен быть послан повторно. В UUCP обычно не используется. |
RR или ACK |
Подтверждение получения пакета. Поле ууу содержит код номера последнего пакета, полученного корректно. |
INITA |
Первый пакет инициализации. Поле ууу содержит код максимального размера окна. |
INITB |
Второй пакет инициализации. Поле ууу содержит код размера пакетов, который планируется использовать. |
INITC |
Третий пакет инициализации. Поле ууу содержит размер окна, который будет использован. |