SPX — Вікіпедія
Модель TCP/IP (RFC 1122) |
---|
Прикладний рівень |
Транспортний рівень |
Мережевий рівень |
Канальний рівень |
SPX (Sequence Packet eXchange) і його вдосконалена модифікація SPX II являють собою транспортні протоколи 7-рівневої моделі OSI. Це протокол гарантує доставку пакета і використовує техніку ковзного вікна (віддалений аналог протоколу TCP). У разі втрати або помилки пакет даних пересилається повторно, число повторень задається програмно. У протоколі SPX не передбачена широкомовна або мультикастинг-адресація. У SPX індукується ситуація, коли партнер несподівано перериває з'єднання, наприклад через обрив зв'язку. Пакети SPX вкладаються в пакети IPX. При цьому в полі тип пакету IPX записується код 5. Заголовок пакета SPX завжди містить 42 байти, включаючи 30 байт заголовка IPX-пакета, куди він вкладений.
Поле управління з'єднанням визначає, чи є даний пакет системним чи прикладним. Це поле містить однобітові прапори, використовувані 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). При відсутності успіху сесія переривається.
Значення RTT визначається за часом відгуку найближчого маршрутизатора, який подвоюється, а до отриманої величини додається деяка константа. Для кожної з сесій RTT визначається незалежно. Багато тимчасових констант задаються адміністратором мережі. Протокол spx дозволяє здійснити від 100 до 2000 з'єднань одночасно (за замовчуванням це число дорівнює 1000). Конфігураційні параметри SPX-протоколу (і мережі) зберігаються у файлах shell.cfg і net.cfg.
У 1992 році була розроблена нова версія SPX - SPX II. Головне удосконалення протоколу пов'язано із застосуванням пакетів більшого розміру. Раніше довгі spx-пакети фрагментувалися і пересилалися по частинах, враховуючи, що черговий пакет може бути посланий лише після отримання підтвердження, неважко зрозуміти крайню неефективність такої схеми. Стандарт spx дозволяє обмін пакетами з розміром, обмеженим тільки використовуваної мережевим середовищем. Так в Ethernet пакет SPX II може мати довжину 1518 байт. Крім того, SPX II допускає використання технології вікон, тобто можна послати кілька кадрів, не чекаючи отримання підтвердження на кожен з вже посланих. Розмір вікна встановлюється відповідно до коду, що містяться в полі число-покажчик (число буферів / пакетів). При необхідності адміністратор може задати розмір вікна раз і назавжди. Формат пакетів SPX II дещо відрізняється від SPX. У SPX II збільшено число допустимих кодів для поля управління з'єднанням, введено додаткове поле в заголовок підтвердження (два байти, ім'я поля "розширене підтвердження"). Нове поле додано після поля число буферів. Алгоритм встановлення зв'язку в SPX II відрізняться від варіанту spx тим, що необхідно узгодити розмір пересилаються пакетів.
0 | Управління з'єднанням (1) | Тип потоку даних (1) |
2 | Ідентифікатор відправника (2) | |
4 | Ідентифікатор адресата (2) | |
6 | Порядковий номер (2) | |
8 | Номер підтвердження отримання (2) | |
10 | Кількість буферів (2) | |
12 | Розширене підтвердження (2) |
Табл.1. Формат заголовка SPX-II
Управління мережами Novell здійснюється за допомогою стандартного протоколу SNMP (Simple Network Management Protocol) і керуючої бази даних MIB.