Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Протокол IPX. Будова, призначення та принцип ро...docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
50 Кб
Скачать
☆

1.2 Робота з драйвером ipx / spx

Перше, що повинна зробити програма, яка бажає працювати в мережі з протоколом IPX або SPX, - перевірити, чи встановлений драйвер відповідного протоколу. Потім необхідно отримати адресу виклику цього драйвера - точку входу API (Application Programm Interface - інтерфейс для додатків). Надалі програма викликає драйвер за допомогою команди міжсегментного виклику процедури за адресою точки входу API драйвера IPX / SPX.

1.2.1 Точка входу api драйвера ipx / spx

Для того щоб перевірити, завантажений чи драйвер IPX, необхідно завантажити в регістр AX значення 7A00h і викликати мультиплексне переривання INT 2Fh.

Якщо після повернення з переривання в регістрі AL буде значення FFh, драйвер IPX завантажений. Адреса точки входу для виклику API драйвера при цьому буде знаходитися в реєстрової парі ES: DI.

Якщо ж вміст регістра AL після повернення з переривання INT 2Fh буде відмінно від FFh, драйвер IPX / SPX не завантажено. Це означає, що на цій робочій станції не завантажені резидентні програми ipx.exe або ipxodi.exe, що забезпечують API для роботи з протоколами IPX і SPX.

Для виклику API в регістр BX необхідно завантажити код виконуваної функції. Значення, що завантажуються в інші регістри, залежать від виконуваної функції.

Наприклад, функція з кодом 10h використовується для перевірки присутності в системі протоколу SPX (може бути така ситуація, коли протокол IPX присутній, а SPX - ні). Для того, щоб визначити наявність SPX, необхідно завантажити в BX значення 10h, в AX значення 00h і викликати API драйвера IPX. Якщо після повернення регістр AX буде містити значення FFh, протокол SPX присутній і може бути використаний. У регістрах CX і DX передаються параметри SPX - максимальне число каналів зв'язку, яке дана станція може встановити з програмами, що працюють на інших станціях, і кількість каналів, доступне в даний час.

1.2.2 Використання api драйвера ipx

Тепер, після того як перевірили наявність драйвера IPX і визначили точку входу для виклику його API, використовуємо API. Без перебільшення можна сказати, що від того, наскільки добре освоєний API драйвер IPX, залежать успіхи в створенні програмного забезпечення для мереж Novell NetWare.

Однак, перш необхідно розібратися зі структурою програм, здатних обмінюватися даними по мережі, і зрозуміти, яким чином програми, що працюють на різних станціях, можуть передавати один одному ці самі дані.

Схема "клієнт-сервер"

Зазвичай в мережі одна з робочих станцій приймає запити на виконання будь-яких дій від інших робочих станцій. Так як станція обслуговує запити, вона називається сервером (serve - обслуговувати, server - обслуговуючий пристрій). Виконавши запит, сервер посилає відповідь у запиті станцію, яка називається клієнтом.

У мережі може бути багато серверів і багато клієнтів. Одні й ті ж клієнти можуть надсилати запити різних серверів.

Говорячи більш строго, сервером або клієнтом є не робоча станція, а запущена на ній програма. У мультизадачною середовищі різні програми, запущені одночасно на одній і тій же робочій станції можуть бути і клієнтами, і серверами.

Програма-сервер, виконавши черговий запит, переходить в стан очікування. Вона чекає приходу пакету даних від програми-клієнта. Залежно від вмісту цього пакету програма-сервер може виконувати різні дії, у відповідності з логікою роботи програми. Наприклад, вона може прийняти від програми-клієнта додаткові пакети даних або передати свої пакети.

Сервер і клієнт при необхідності на якийсь час або назавжди можуть помінятися місцями, змінивши своє призначення на протилежне.

Для того, щоб створювати програми-сервери і програми-клієнти, необхідно навчитися виконувати два завдання:

• ініціалізацію сервера і клієнта;

• прийом і передачу пакетів даних.

Ініціалізація сервера і клієнта

Для ініціалізації програм сервера і клієнта, що працюють на базі IPX, недостатньо переконатися в наявності відповідного драйвера і отримати точку входу в його API. Необхідно виконати деякі підготовчі дії для того, щоб програма могла приймати і передавати пакети даних.

Перш за все необхідно, щоб програма-сервер або програма-клієнт ідентифікували себе в мережі за допомогою механізму сокетів.

Для зберігання сокета використовується двохбайтове слово, так що діапазон можливих значень тягнеться від 0 до FFFFh. Однак не можна використовувати довільні значення.

Деякі значення зарезервовані для використання певними програмами. Це так звані "добре відомі" сокети ("well-known" sockets).

Так як протокол IPX є практичною реалізацією протоколу Xerox Internetwork Packet Protocol, первинний розподіл сокетів виконується фірмою Xerox. Згідно з цим розподілом сокети від 0 до 3000 зарезервовані статично за певним програмним забезпеченням. Зокрема, фірма Novell отримала від фірми Xerox діапазон сокетів для своєї мережевої операційної системи NetWare. У специфікації Xerox сокети зі значенням, більшим ніж 3000, можуть розподілятися динамічно.

Динамічно що розподіляються сокети видаються програмами як би в тимчасове користування (на час їх роботи) за спеціальним запитом. Перед початком роботи програма повинна запросити сокет у протоколу IPX, а перед завершенням - звільнити його.

Розподіл сокетів в мережі Novell NetWare дещо відрізняється від розподілу, встановленого фірмою Xerox. Сокети від 0 до 4000h зарезервовані і не повинні використовуватися в програмному забезпеченні користувачів. Сокети від 4000h до 8000h розподіляються динамічно. Діапазон "добре відомих" сокетів, що розподіляються Novell персонально розробникам програмного забезпечення, розташований вище значення 8000h.

Розробник програмного забезпечення для мереж NetWare, може отримати у Novell для своєї програми персональний сокет або скористатися сокетом, отриманим динамічно. Можна задавати сокет як параметр при запуску програми. Якщо використовуване значення сокета конфліктує з іншим програмним забезпеченням, можна легко змінити його, просто задавши нове значення для відповідного параметра.

При реалізації схеми обміну даними "клієнт-сервер" сервер зазвичай приймає пакети на сокеті, значення якого відомо програмам-клієнтам. Самі ж програми-клієнти можуть використовувати або те ж саме значення сокета, або отримувати свій сокет динамічно. Клієнт може повідомити сервер свій сокет просто передавши його в пакеті даних (так як ми припускаємо, що сокет сервера відомий програмі-клієнту).

Після визначення сокета необхідно дізнатися мережеву адресу станцій-одержувачів. Для того щоб клієнт міг послати запит серверу, необхідно окрім сокета сервера знати його мережеву адресу - номер мережі і адресу робочої станції в мережі.

Якщо програма-клієнт знає тільки сокет програми-сервера, але не знає його мережеву адресу, останній можна запросити у сервера, пославши запит в усі станції одночасно. Такий запит в межах одного сегмента мережі можна виконати, якщо в якості адреси робочої станції вказати спеціальне значення FFFFFFFFFFFFh. Це так званий "широкомовний" (broadcast) адреса.

Клієнт надсилає запит на відомий йому сокет програми-сервера і використовує адресу FFFFFFFFFFFFh. Такий запит приймають всі програми на всіх робочих станціях, які очікують пакети на даному сокеті. Отримає його і програма-сервер. А вона може визначити свій власний мережевий адресу (виконавши виклик відповідної функції IPX) і послати його клієнту. Адреса ж клієнта програма-сервер може взяти із заголовка прийнятого пакета.

Існує спосіб визначення адреси робочої станції по імені користувача, що підключився на ній до файл-серверу. Це можна зробити за допомогою API мережевий оболонки робочої станції (резидентна програма netx.exe). Однак цей спосіб не дозволить визначити адресу станції, на якій не виконано підключення до файл-серверу або не запущено мережна оболонка netx.exe. Пакет, переданий за адресою FFFFFFFFFFFFh, буде прийнятий усіма станціями мережі навіть у тому випадку, якщо файл-сервер вимкнений або його зовсім немає. Тому спосіб визначення мережевої адреси через запит по всій мережі більш універсальний.

Прийом і передача пакетів даних

Прийом і передачу пакетів виконує мережевий адаптер, що працює з використанням переривань. Деякі мережеві адаптери працюють з пам'яттю через канал прямого доступу DMA. Переривання від мережного адаптера обробляє драйвер мережного адаптера. Наприклад, в операційній системі MS-DOS для адаптерів, сумісних з адаптером Novell NE2000 у складі Novell NetWare поставляється драйвер ne2000.com, реалізований у вигляді резидентної програми.

Прикладні програми не працюють напряму з драйвером мережевого адаптера. Всі свої запити на прийом і передачу пакетів вони направляють драйверу IPX (програма ipx.exe або ipxodi.exe), який, у свою чергу, звертається до драйвера мережного адаптера.

Для прийому або передачі пакету прикладна програма повинна підготувати пакет даних, сформувавши його заголовок, і побудувати так званий блок управління подією ECB (Event Control Block). У блоці ECB задається адресна інформація для передачі пакета, адресу самого переданого пакета в оперативній пам'яті і деяка інша інформація.

Підготувавши блок ECB, прикладна програма передає його адресу відповідної функції IPX для виконання операції прийому або передачі пакета.

Функції IPX, приймаючі або передавальні пакет, не виконують очікування завершення операції, а відразу повертають управління викликала їхній програмі. Прийом або передача виконуються мережним адаптером автономно і асинхронно по відношенню до програми, що викликала функцію IPX для передачі даних. Після того, як операція передачі даних завершилася, у відповідному полі блоку ECB встановлюється ознака. Програма може періодично перевіряти ECB для виявлення ознаки завершення операції.

Є й інша можливість. У блоці ECB можна вказати адресу процедури, яка буде викликана при завершенні виконання операції передачі даних. Такий спосіб краще, оскільки прикладна програма не буде витрачати час на періодичну перевірку блоку ECB.

топологія мережа драйвер