
- •Реферат на тему
- •1. Протокол ipx
- •1.1 Формат пакета ipx
- •1.2 Робота з драйвером ipx / spx
- •1.2.1 Точка входу api драйвера ipx / spx
- •1.2.2 Використання api драйвера ipx
- •1.3 Основні функції api драйвера ipx
- •1.3.1 Функції для роботи з сокетами
- •1.3.2 Функції для роботи з мережевими адресами
- •1.3.3 Прийом і передача пакетів
- •1.4 Визначення топології мережі
- •1.5 Налаштування параметрів ipx
1.3.3 Прийом і передача пакетів
IPXListenForPacket
На вході:
BX = 04h.
Покажчик на заповнений блок ECB. Необхідно заповнити поля:
ESRAddress;
ES: DI = Socket;
FragmentCnt;
покажчики на буфери фрагментів Address;
розміри фрагментів Size.
На виході: Регістри не використовуються.
Ця функція призначена для ініціювання процесу прийому пакетів даних з мережі. Вона передає драйверу IPX підготовлений блок ECB, і той включає його в свій внутрішній список блоків ECB, очікують прийому пакетів. Одночасно програма може підготувати кілька блоків ECB (необмежена кількість) і для кожного викликати функцію IPXListenForPackets.
Функція IPXListenForPackets може використовуватися для прийому тільки таких пакетів, в адресі призначення яких зазначений сокет, що співпадає з номером сокета, підготовленого в блоці ECB. Перед тим, як використовувати сокет для прийому пакетів, його необхідно відкрити функцією IPXOpenSocket, описаної вище.
IPXSendPacket - передати IPX-пакет
На вході:
BX = 03h.
Покажчик на заповнений блок ECB. Необхідно заповнити поля:
ESRAddress;
Socket;
ImmAddress;
ES: DI = FragmentCnt;
покажчики на буфери фрагментів Address;
розміри фрагментів Size.В заголовку пакета IPX необхідно заповнити поля:
PacketType;
DestNetwork;
DestNode;
DestSocket.
На виході: Регістри не використовуються.
Ця функція готує блок ECB і пов'язаний з ним заголовок пакета для передачі пакета по мережі. Вона відразу повертає управління викликала її програмі, не чекаючи завершення процесу передачі пакета.
Перед викликом цієї функції необхідно заповнити зазначені вище поля в блоці ECB, підготувати заголовок пакету і, зрозуміло, сам переданий пакет. Потім викликати функцію IPXSendPacket, яка ставить блок ECB в чергу на передачу. Сама передача пакету відбувається асинхронно по відношенню до викликала її програмі.
1.4 Визначення топології мережі
Якщо засобами IPX або SPX необхідно передавати дані між робочими станціями, розташованими в різних мережах, з'єднаних мостами, не обійтися без визначення топології мережі. Коли програма передає дані в межах однієї мережі, вона повинна знати адресу станції, якій буде надсилатися пакет.
Як номер мережі можна вказати нуль, при цьому не треба буде навіть знати номер мережі, в якій розташована приймаюча станція.
Інша справа, якщо в передачу даних втягується міст. Якщо пакет повинен пройти міст, необхідно вказати мережеву адресу моста, так як для того, щоб потрапити в іншу мережу, пакет повинен бути переданий насамперед в міст. У заголовку пакета при цьому повинна бути вказана адреса приймаючої станції - її мережеву адресу, в тому числі і номер мережі, в якій розташована станція.
Якщо сервер і клієнт розташовані в різних мережах, ситуація сильно ускладнюється. Якщо клієнт буде посилати пакет за адресою FFFFFFFFFFFFh, вказавши нульовий номер мережі, пакет буде прийнятий тільки тими станціями, які розташовані в тій же мережі, що й передавальна станція. Через міст такий пакет не пройде, тому якщо програма-сервер працює на станції, яка знаходиться в іншій мережі, вона не отримає пакет від клієнта.
Для того, щоб пакет був прийнятий всіма станціями мережі, підключеної через міст, вам необхідно послати цей пакет в міст, вказавши в заголовку пакета номер мережі, в яку передається пакет, а також адресу станції, рівний FFFFFFFFFFFFh.
Отже, для того щоб встановити зв'язок з сервером, програма-клієнт повинна дізнатися номер мережі, в якій розташований сервер, і мережеву адресу мосту, через який можна послати пакет в цю мережу. На жаль, жодна з функцій драйвера IPX або SPX не вертає інформації про конфігурації мережі. Але можна з'ясувати конфігурацію мережі, якщо скористатися спеціальним діагностичним сервісом, реалізованим в рамках драйверів протоколів IPX і SPX.
Мережева оболонка, запущена на робочих станціях в мережі Novell NetWare, може приймати пакети на спеціальному діагностичному сокеті з номером 0456h. У відповідь на прийнятий пакет діагностичний сервіс повертає станції, яка послала такий пакет, інформацію про конфігурацію мережевого програмного і апаратного забезпечення станції.
Основна ідея визначення конфігурації мережі полягає в тому, що програма-клієнт надсилає запит про конфігурацію одночасно всім станціям даної мережі на сокеті 0456h, вказавши як номери мережі нуль, а в якості адреси станції значення FFFFFFFFFFFFh. Аналізуючи прихожу від станцій діагностичну інформацію, програма-клієнт може виявити в мережі мости та визначити як номери підключених до мостів мереж, так і мережеві адреси самих мостів.
Знаючи мережевий адресу мостів та номери підключених до них мереж, програма-клієнт зможе посилати запити для пошуку програми-сервера в усі підключені до мостів мережі.
Очевидно, можна посилати діагностичні запити на сокеті 0456h і в інші мережі з метою пошуку наявних там мостів. Таким чином можна з'ясувати конфігурацію всієї мережі і встановити зв'язок з програмою-сервером, де б вона не знаходилася.