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

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 і в інші мережі з метою пошуку наявних там мостів. Таким чином можна з'ясувати конфігурацію всієї мережі і встановити зв'язок з програмою-сервером, де б вона не знаходилася.