SPX: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
+ {{Стаття, з якої нема посилань}} за допомогою AWB
Немає опису редагування
Рядок 3:
 
Рис. 4.2.1.2.1. Формат заголовка SPX-пакету
Поле управління з'єднанням визначає, чи є даний пакет системним чи прикладним. Це поле містить однобітовий прапори, використовувані spx і spx ii для керування потоком даних у віртуальному каналі.
*0x01 XHD Зарезервовано SPX II для розширення заголовків;
*0x02 RES1 Призначення поля не визначено, має дорівнювати нулю;
*0x04 NEG SPX II (SIZ) узгоджує розмір запиту / відгуку, для spx має дорівнювати нулю;
*0x08 SPX2 Тип пакету SPX II, для spx має дорівнювати нулю;
*0x10 EOM Встановлюється клієнтом spx для індикації кінця повідомлення (end-of-message);
*0x20 ATN (attention) зарезервовано для спеціальних запитів (не підтримується SPX);
*0x40 ACK Встановлюється для запиту підтвердження отримання даного пакету. Запити і відгуки обробляються на рівні SPX (додаток не повинно змінювати цей код);
*0x80 SYS Встановлюється, якщо цей пакет є системним і служить для підтвердження. Додатки не використовують пакети цього типу.
Поле тип потоку даних характеризує тип даних, поміщених в пакет. Значення цього поля перераховані нижче:
*0x00-0x07 визначається клієнтом і може використовуватися в додатках;
*0x80-0xfb зарезервовані на майбутнє;
*0xfc spx ii, впорядковане звільнення запиту;
*0xfd spx ii, впорядковане звільнення підтвердження;
*0xfe вказує на закінчення зв'язку (end-of-connection). При закритті каналу spx-драйвер посилає клієнту пакет, де в полі тип потоку записаний даний код;
*0xff підтвердження отримання повідомлення про закінчення зв'язку (end-of-connection-acknowledgment). Цим кодом позначається пакет, що підтверджує закриття каналу, в прикладну програму такий пакет не передається
Поля ідентифікатора відправника і одержувача містять коди, що визначають учасників інформаційного обміну, присвоюються SPX-драйвером в момент встановлення зв'язку. У запитах на з'єднання це поле містить код 0xffff. Дане поле служить для забезпечення демультиплексування пакетів, що надходять на один і той же з'єднувач (socket). Поле послідовний номер визначає число пакетів пересланих в одному напрямку. Кожен з партнерів обміну має свій лічильник, який скидається в нуль після досягнення 0xffff, після чого рахунок може продовжуватися. Для програми це поле, також як і наступні два, недоторкане. spx-пакети підтвердження містять в цьому полі порядковий номер останнього посланого пакета. Поле номер підтвердження характеризує послідовний номер наступного пакета, який spx очікує отримати. Будь-який пакет з порядковим номером менше, ніж задано в полі номера підтвердження, доставлений благополучно і не вимагає ретрансміссіі. Поле число буферів служить для вказівки числа доступних на станції буферів (буфера нумеруються, починаючи з 0, один буфер здатний прийняти один пакет) і використовується для організації управління потоком даних між додатками. Код цього поля інформує партнера про найбільший порядковий номер пакету, який може бути посланий. Протокол spx посилає пакети до тих пір, доки "послідовний номер не стане рівним числу-вказівником на віддаленій ЕОМ.
SPX-протокол не посилає наступний пакет до тих пір, поки не отримає підтвердження одержання попереднього. Хоча в протоколі SPX передбачений алгоритм ковзних вікон (як і в TCP), практично він в даний час не використовується, що цілком виправдано для локальних мереж. Слід зауважити, що для досить великих LAN, де пакет проходить через кілька перемикачів або маршрутизаторів, нехтування технікою вікон стає недозволеною розкішшю. На випадок непередбачених обривів зв'язку в spx є алгоритм "сторожова собака". Цей алгоритм реалізується спеціальною програмою, яка активується лише у разі, коли протягом певного часу в каналі відсутній трафік в будь-якому з напрямів (машина все зробила, а оператор заснув). У цьому випадку програма посилає спеціальні пакети і, якщо певна кількість спроб "достукатися" до партнера не увінчається успіхом, сесія переривається. Якщо партнер не надсилає відгук за певний відрізок часу (RTT), проводиться повторна посилка пакету, при цьому RTT збільшується на 50%. Значення RTT не повинно перевищити величини max_retry_delay, яка за замовчуванням дорівнює 5 секундам. Якщо зв'язок не відновилася, відправник намагається знайти інший маршрут до адресата. Якщо маршрут знайдений, лічильник спроб скидається в нуль і процедура відправки запускається знову. Допустима кількість спроб може лежати в діапазоні 1-255 (за замовчуванням - 10). При відсутності успіху сесія переривається.