Протоколы IPX/SPX
Основные функции API драйвера IPX. Прием и передача пакетов. Определение топологии сети. Функции для работы с сетевыми адресами. Настройка параметров IPX. Формат пакета SPX. Проверка состояния канала. Простая система "клиент – сервер" на базе SPX.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 11.07.2012 |
Размер файла | 103,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Федеральное государственное образовательное учреждение
высшего профессионального образования
Пермская государственная сельскохозяйственная академия
имени Д.Н. Прянишникова
Тема
Протоколы IPX/SPX
Выполнила
Дробинина А.С. (ПИ-2006-2)
Проверил
преподаватель Краснобаев В.А
Пермь 2008г.
Содержание
Введение
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
2. Протокол SPX
2.1 Формат пакета SPX
2.2 Функции SPX
2.2.1 Инициализация SPX
2.2.2 Образование канала связи
2.2.3 Прием и передача пакетов
2.2.4 Разрыв канала связи
2.2.5 Проверка состояния канала
2.3 Простая система «клиент - сервер» на базе SPX
2.4 Настройка параметров SPX
Заключение
Список литературы
Введение
Протокол IPX (Internetwork Packet Exchange - межсетевой обмен пакетами) является оригинальным протоколом сетевого уровня стека Novell, разработанным в начале 80-х годов на основе протокола Internetwork Datagram Protocol (IDM) компании Xerox.
Протокол IPX соответствует сетевому уровню модели ISO / OSI и, поддерживает только дейтаграммный (без установления соединений) способ обмена сообщениями. В сети NetWare самая быстрая передача данных при наиболее экономном расходовании памяти реализуется именно протоколом IPX. Надежную передачу пакетов может осуществлять транспортный протокол SPX (Sequenced Packet Exchange - последовательный обмен пакетами), который работает с установлением соединения и восстанавливает пакеты при их потере или повреждении.
Фирма Novell в сетевой операционной системе NetWare применяла протокол IPX для обмена датаграммами и протокол SPX для обмена в сеансах.
1. Протокол IPX
Протокол IPX предоставляет возможность программам, запущенным на рабочих станциях, обмениваться пакетами данных на уровне датаграмм, т. е. без подтверждения.
В сети Novell NetWare наиболее быстрая передача данных при наиболее экономном использовании памяти реализуется именно протоколом IPX. Протокол SPX сделан на базе IPX и поэтому требует дополнительных ресурсов.
Если на рабочей станции используется операционная система MS-DOS, функции, необходимые для реализации протокола IPX, реализуются резидентными программами ipx.com или ipxodi.com, входящими в состав сетевой оболочки рабочей станции сети NetWare.
Для того чтобы научиться составлять программы, которые могут передавать данные по сети с использованием протокола IPX, необходимо познакомиться со структурой пакета IPX и научиться пользоваться функциями IPX, реализованными в рамках сетевой оболочки рабочей станции.
1.1 Формат пакета IPX
Формат передаваемых по сети пакетов представлен на рис. 1.
Рис. 1. Структура пакета IPX
Пакет можно разделить на две части - заголовок и передаваемые данные. Все поля, представленные на рис. 1, кроме последнего (Data), представляют собой заголовок пакета. Заголовок пакета выполняет ту же роль, что и конверт обычного письма - там располагается адрес назначения, обратный адрес и некоторая служебная информация.
Особенностью формата пакета является то, что все поля заголовка содержат значения в перевернутом формате, т. е. по младшему адресу записывается старший байт данных, а не младший, как это принято в процессорах фирмы Intel. Поэтому перед записью значений в многобайтовые поля заголовка необходимо выполнить соответствующее преобразование. Представление данных в заголовке пакета соответствует, например, формату целых чисел в компьютере IBM-370 (серия ЕС ЭВМ).
Назначение отдельных полей пакета.
Поле Checksum предназначено для хранения контрольной суммы передаваемых пакетов. При формировании собственных пакетов не придется заботиться о содержимом этого поля, так как проверка данных по контрольной сумме выполняется драйвером сетевого адаптера.
Поле Length определяет общий размер пакета вместе с заголовком. Длина заголовка фиксирована и составляет 30 байт. Размер передаваемых в поле Data данных может составлять от 0 до 546 байт, следовательно, в поле Length в зависимости от размера поля Data могут находиться значения от 30 до 576 байт. Если длина поля Data равна нулю, пакет состоит из одного заголовка. Как это ни странно, такие пакеты тоже нужны! При формировании собственных пакетов не надо проставлять длину пакета в поле Length, протокол IPX сделает это сам (вернее, программный модуль, отвечающий за реализацию протокола IPX, вычислит длину пакета на основании длины поля Data).
Поле TransportControl служит как бы счетчиком мостов, которые проходит пакет на своем пути от передающей станции к принимающей. Каждый раз, когда пакет проходит через мост, значение этого счетчика увеличивается на единицу. Перед передачей пакета IPX сбрасывает содержимое этого поля в нуль. Так как IPX сам следит за содержимым этого поля, при формировании собственных пакетов не надо изменять или устанавливать это поле в какое-либо состояние.
Поле PacketType определяет тип передаваемого пакета. Программа, которая передает пакеты средствами IPX, должна установить в поле PacketType значение 4. Протокол SPX, реализованный на базе IPX, использует в этом поле значение 5.
Поле DestNetwork определяет номер сети, в которую передается пакет. При формировании собственного пакета необходимо заполнить это четырехбайтовое поле. Номер сети задается сетевым администратором при установке Novell NetWare на сервер.
Поле DestNode определяет адрес рабочей станции, которой предназначен пакет. Необходимо определить все шесть байт этого поля.
Поле DestSocket предназначено для адресации программы, запущенной на рабочей станции, которая должна принять пакет. При формировании пакета необходимо заполнить это поле.
Поля SourceNetwork, SourceNode и SourceSocket содержат соответственно номер сети, из которой посылается пакет, адрес передающей станции и сокет программы, передающей пакет.
Поле Data в пакете IPX содержит передаваемые данные. Длина этого поля может быть от 0 до 546 байт. Если длина поля Data равна нулю, пакет состоит из одного заголовка. Такой пакет может использоваться программой, например, для подтверждения приема пакета с данными.
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.
топология сеть драйвер
1.3 Основные функции API драйвера IPX
API драйвера протокола IPX состоит из примерно дюжины функций, предназначенных для выполнения операций с сокетами, сетевыми адресами, для приема и передачи пакетов и некоторых других операций. Кратко рассмотрим состав и назначение основных функций IPX.
1.3.1 Функции для работы с сокетами
IPXOpenSocket- открыть сокет
На входе: BX=00h.
Тип сокета:
AL=00h - короткоживущий;
FFh - долгоживущий.
DX= Запрашиваемый номер сокета или 0000h, если требуется получить динамический номер сокета.
Примечание. Байты номера сокета находятся в перевернутом виде.
Код завершения:
На выходе: AL = 00h - сокет открыт;
FFh - этот сокет уже был открыт раньше;
FEh - переполнилась таблица сокетов.
DX=Присвоенный номер сокета.
Перед началом передачи пакетов программа должна получить свой идентификатор - сокет. Функция IPXOpenSocket как раз и предназначена для получения сокета.
Сокеты являются ограниченным ресурсом, поэтому программы должны заботиться об освобождении сокетов. Когда открываете (запрашиваете у IPX) сокет, нужно указать тип сокета - короткоживущий или долгоживущий.
Короткоживущие сокеты освобождаются (закрываются) автоматически после завершения программы. Долгоживущие сокеты можно закрыть только с помощью специально предназначенной для этого функции IPXCloseSocket. Такие сокеты больше всего подходят для использования резидентными программами или драйверами. Более того, для резидентных программ, работающих с IPX, необходимо использовать долгоживущие сокеты, так как в противном случае при завершении программы (и при оставлении ее резидентной в памяти) все открытые программой сокеты будут автоматически закрыты. В этом случае после активизации резидентная программа останется без сокетов.
По умолчанию при загрузке оболочки рабочей станции доступно максимально 20 сокетов. При соответствующей настройке сетевой оболочки можно увеличить это значение до 150.
IPXCloseSocket - закрыть сокет
На входе: BX= 01h.
DX=Номер закрываемого сокета.
На выходе: Регистры не используются.
Функция закрывает заданный в регистре DX сокет, короткоживущий или долгоживущий.
1.3.2 Функции для работы с сетевыми адресами
IPXGetLocalTaget -получить непосредственный адрес
На входе:
BX=02h.
ES:SI = Указатель на буфер длиной 12 байт, содержащий полный сетевой адрес станции, на которую будет послан пакет.
ES:DI = Указатель на буфер длиной 6 байт, в который будет записан непосредственный адрес, т. е. адрес той станции, которой будет передан пакет. Это может быть адрес моста.
Код завершения:
00h - непосредственный адрес был успешно вычислен;
На выходе
AL= FAh - непосредственный адрес вычислить невозможно, так как к указанной станции нет ни одного пути доступа по сети.
CX= Время пересылки пакета до станции назначения (только если AL равен нулю) в тиках системного таймера. Тики таймера следуют с периодом примерно 1/18 секунды.
IPXGetInternetworkAddress - получить собственный адрес
На входе:
BX=09h.
ES:DI = Указатель на буфер длиной 10 байт; в него будет записан адрес станции, на которой работает данная программа. Адрес состоит из номера сети Network и адреса станции в сети Node.
На выходе: Регистры не используются.
С помощью этой функции программа может узнать сетевой адрес станции, на которой она сама работает.
Полученный адрес программа может затем использовать по своему усмотрению (например, сообщить его другой станции).
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 и в другие сети с целью поиска имеющихся там мостов. Таким образом можно выяснить конфигурацию всей сети и установить связь с программой-сервером, где бы она ни находилась.
1.5 Настройка параметров IPX
Драйвер протоколов IPX/SPX для MS-DOS реализован в виде резидентной программы. В версии 3.11 операционной системы Novell NetWare на рабочих станциях MS-DOS используется программа ipxodi.com.
При запуске этой программы можно указать параметры "d" и "a". Если указывается параметр "d", на рабочей станции не загружается диагностический сервис, что экономит примерно 4 Кбайт памяти. Если же указывается параметр "a", в память загружается только драйвер протокола IPX, а драйвер протокола SPX и диагностический сервис не загружаются. При этом освобождается 8 Кбайт основной памяти.
Однако нужно учесть, что такие сетевые утилиты, как RCONSOLE и NVER, требуют присутствия драйвера протокола SPX и диагностического сервиса.
Также можно менять некоторые параметры драйверов IPX и SPX. Для этого в первых строках файла net.cfg, расположенного в каталоге C:\NET можно указывать параметры:
· IPX RETRY COUNT. Параметр определяет, сколько раз будет выполнена повторная передача пакета, прежде чем будет сделан вывод о невозможности его передачи. Сам протокол IPX не выполняет повторные передачи (так как этот протокол не гарантирует доставку передаваемых пакетов), но это значение используется протоколами более высокого уровня, реализованными на базе IPX, в частности протоколом SPX.
По умолчанию пакет передается 20 раз.
· IPX SOCKETS Параметр определяет максимальное количество сокетов, которые программа может открыть на рабочей станции.
По умолчанию можно открыть 20 сокетов.
Например, для увеличения числа доступных сокетов до 50 добавьте в начало файла net.cfg строку IPX SOCKETS=50.
2. Протокол SPX
Для некоторых приложений (например, для программ, передающих файлы между рабочими станциями) удобнее использовать сетевой протокол более высокого уровня, обеспечивающий гарантированную доставку пакетов в правильной последовательности. Разумеется, программа может сама следить за тем, чтобы все переданные пакеты были приняты. Однако в этом случае придется делать собственную надстройку над протоколом IPX - собственный протокол передачи данных.
SPX - протокол последовательного обмена пакетами (Sequenced Packet Exchange Protocol), разработанный Novell. Возможно, что протокол SPX удовлетворит потребности программы в гарантированной передаче данных по сети.
2.1 Формат пакета SPX
Пакет, передаваемый при помощи протокола SPX, имеет более длинный заголовок. Дополнительно к 30 байтам стандартного заголовка пакета IPX добавляется еще 12 байт (рис. 2).
Рис. 2. Формат заголовка пакета SPX
Поле ConnControl можно рассматривать как набор битовых флагов, управляющих передачей данных по каналу SPX:
Биты |
Назначение |
|
01h-08h |
Зарезервировано |
|
10h |
End-of-Message. Этот бит может использоваться программой для сигнализации окончания передачи данных. Драйвер SPX передает этот бит программе в неизменном виде, причем сам драйвер протокола SPX этот бит игнорирует |
|
20h |
Attention. Этот бит игнорируется драйвером SPX и передается в неизменном виде программе |
|
40h |
Acknowledgement Required. Бит используется драйвером SPX. Вам не следует модифицировать его значение |
|
80h |
System Packet. Этот бит устанавливается драйвером SPX при передаче системных пакетов, которые используются самим драйвером и не передаются в программу пользователя |
Поле DataStreamType также состоит из однобитовых флагов, которые используются для классификации данных, передаваемых или принимаемых при помощи протокола SPX. Возможные значения поля DataStreamType:
Биты |
Назначение |
|
00h-FDh |
Эти значения игнорируются драйвером SPX и могут быть использованы программой произвольным образом |
|
FEh |
End-of-Connection. Когда программа вызывает функцию, закрывающую SPX-канал, драйвер SPX посылает партнеру по связи последний пакет, в поле DataStreamType которого записано значение FEh. Это служит требованием завершить связь и закрыть канал |
|
FFh |
End-of-Connection-Acknowledgement. Это значение отмечает пакет, подтверждающий завершение связи. Такой пакет является системным и не передается в программу пользователя |
Поле SourceConnID содержит номер канала связи передающей программы, присвоенный драйвером SPX при создании канала связи. Этот номер должен указываться функции передачи пакета средствами SPX.
Поле DestConnID содержит номер канала связи принимающей стороны. Так как все пакеты приходят на один номер сокета и могут принадлежать разным каналам связи (на одном сокете можно открыть несколько каналов связи), необходимо классифицировать приходящие пакеты по номеру канала связи.
Поле SeqNumber содержит счетчик пакетов, переданных по каналу в одном направлении. На каждой стороне канала используется свой счетчик. После достижения значения FFFFh счетчик сбрасывается в нуль, после чего процесс счета продолжается.
Содержимым этого поля управляет драйвер SPX, поэтому программа не должна менять его значение.
Поле AckNumber содержит номер следующего пакета, который должен быть принят драйвером SPX.
Содержимым этого поля управляет драйвер SPX, поэтому программа не должна менять его значение.
Поле AllocNumber содержит количество буферов, распределенных программой для приема пакетов.
Содержимым этого поля управляет драйвер SPX, поэтому программа не должна менять его значение.
2.2 Функции SPX
2.2.1 Инициализация SPX
SPXCheckInstallation - инициализировать SPX
На входе:
BX = 0h.
AL = 0h.
На выходе: AL = Код завершения:
00h - SPX не установлен;
FFh - SPX установлен.
BH = Верхний (major) номер версии SPX.
BL = Нижний (minor) номер версии SPX.
CX = Максимальное количество каналов SPX, поддерживаемых драйвером SPX.
DX = Количество доступных каналов SPX.
2.2.2 Образование канала связи
SPXListenForConnection - создать канал с принимающей стороны
На входе:
BX = 12h.
AL = Счетчик повторов попыток создать канал связи.
AH = Флаг включения системы периодической проверки связи (Watchdog Supervision Required Flag).
ES:S = Указатель на блок ECB.
На выходе: Регистры не используются.
SPXEstablishConnection - создать канал с передающей стороны
На входе:
BX = 11h
AL = Счетчик повторов попыток создать канал связи.
AH = Флаг включения системы периодической проверки связи (Watchdog Supervision Required Flag).
ES:SI = Указатель на блок ECB
На выходе: AL = Промежуточный код завершения:
00h - выполняется попытка создать канал;
FFh - указанный в блоке ECB сокет закрыт;
FDh - сбойный пакет: либо счетчик фрагментов не равен 1, либо размер фрагмента не равен 42;
EFh - переполнение локальной таблицы номеров каналов связи.
DX Присвоенный номер канала.
2.2.3 Прием и передача пакетов
SPXListenForSequencedPacket - принять SPX-пакет
На входе:
BX = 17h.
ES:SI = Указатель на блок ECB.
На выходе: Регистры не используются.
SPXSendSequencedPackett - передать SPX-пакет
На входе: BX = 16h.
ES:SI = Указатель на блок ECB
DX = Номер канала связи.
На выходе: Регистры не используются.
2.2.4 Разрыв канала связи
SPXTerminateConnection - закрыть канал
На входе:
BX = 13h
ES:SI = Указатель на блок ECB
DX = Номер канала связи
На выходе Регистры не используются.
SPXAbortConnection - закрыть канал аварийно
На входе
BX = 14h.
DX = Номер канала связи.
На выходе: Регистры не используются.
2.2.5 Проверка состояния канала
SPXGetConnectionStatus - получить состояние канала
На входе:
BX = 15h.
DX = Номер канала связи.
ES:SI = Указатель на буфер размером 44 байта.
На выходе: AL = Код завершения:
00h - канал активен;
EEh - указанный канал не существует.
2.3 Простая система "клиент - сервер" на базе SPX
Рассмотрим пример, демонстрирующий использование основных функций SPX. Этот пример сделан на базе предыдущего, в котором две программы - клиент и сервер - общались между собой с помощью протокола IPX.
После определения наличия драйвера IPX и получения адреса его API программа-сервер с помощью функции SPXCheckSPXInstallation() определяет присутствие драйвера протокола SPX.
Затем открывается сокет для протокола IPX, подготавливается ECB для приема пакета от клиента. Этот пакет будет передаваться с помощью протокола IPX и предназначен для определения адреса клиента. Программа-клиент посылает пакет в текущую сеть с номером 00000000 по адресу FFFFFFFFFFFFh, т. е. всем станциям текущей сети. После того, как программа-сервер примет этот пакет, она сохранит в области памяти ClientImmAddress непосредственный адрес станции, на которой работает программа-клиент.
После этого программа-сервер, пользуясь полученным непосредственным адресом, посылает клиенту ответный IPX-пакет, сообщая о том, что сервер принял пакет от клиента.
Далее программа-сервер открывает еще один сокет, который будет использоваться протоколом SPX. Для работы с протоколами IPX и SPX необходимо выделять разные сокеты.
Открыв сокет, сервер подготавливает блок ECB для приема SPX-пакета от клиента. В поле непосредственного адреса копируется непосредственный адрес клиента, полученный после приема от него IPX-пакета. Запрос на создание канала выдает функция SPXListenForSequencedPacket().
Далее программа-сервер подготавливает в структуре ConnECB блок ECB для создания канала и вызывает функцию создания канала с принимающей стороны SPXListenForConnection().
После создания канала программа-сервер ожидает прихода SPX-пакета, После прихода SPX-пакета сервер закрывает оба сокета и завершает свою работу.
Программа-клиент после проверки наличия драйверов IPX и SPX открывает два сокета для использования с протоколами IPX и SPX. Затем подготавливается блок ECB для передачи "широковещательного" пакета по адресу FFFFFFFFFFFFh в текущую сеть с номером 000000. На этот пакет должна откликнуться программа-сервер, если она работает в текущей сети.
После передачи пакета программа-клиент ожидает прихода пакета от сервера. Затем она подготавливает блок ECB для приема SPX-пакета и ставит его в очередь на прием при помощи функции SPXListenForSequencedPacket().
Затем программа-клиент подготавливает блок ECB для создания канала с программой-сервером и вызывает функцию создания канала с передающей стороны SPXEstablishConnection().
После того, как канал будет создан, в область памяти ConnID копируется идентификатор канала для использования при приеме и передаче SPX-пакетов.
Далее программа-клиент подготавливает SPX-пакет и блок ECB для передачи программе-серверу и при помощи функции SPXSendSequencedPacket() передает пакет.
После передачи SPX-пакета программа-клиент закрывает оба сокета и завершает свою работу.
2.4 Настройка параметров SPX
В разделе, посвященном настройке параметров драйвера IPX, говорилось о том, что при запуске программы ipxodi.com можно указывать параметры. Если указывается параметр "d", на рабочей станции не загружается диагностический сервис. Если же указывается параметр "a", в память не загружаются драйвер протокола SPX и диагностический сервис.
В документации на вашу программу следует указать о том, какие параметры можно использовать при загрузке ipxodi.com. В частности, если программа использует протокол SPX, параметр "a" задавать нельзя.
Для изменения режима работы драйвера SPX в первых строках файла net.cfg, расположенного в каталоге C:\NET, можно указывать параметры:
SPX ABORT TIMEOUT |
Время в тиках системного таймера, в течение которого драйвер SPX будет ожидать прихода ответа от партнера по каналу, прежде чем будет сделан вывод о невозможности работы с каналом. После истечения этого времени канал будет закрыт. По умолчанию драйвер ждет 540 тиков, что соответствует примерно 30 с |
|
SPX CONNECTIONS |
Параметр определяет максимальное количество каналов, которые могут быть созданы на рабочей станции. По умолчанию можно создавать максимально 15 каналов. |
|
SPX LISTEN TIMEOUT |
Параметр задает время, в течение которого драйвер SPX будет ждать прихода пакета от партнера. Если за это время пакет не придет, драйвер будет посылать пакеты для проверки работоспособности канала. По умолчанию это время равно 108 тикам, что составляет примерно 6 с |
|
SPX VERIFY TIMEOUT |
Этот параметр задает период времени, с которым драйвер SPX передает пакеты для проверки работоспособности канала связи. По умолчанию проверочные пакеты передаются с интервалом 54 тика (примерно 3 с). |
Например, для увеличения числа доступных каналов до 25 добавьте в начало файла net.cfg строку:
SPX CONNECTIONS=25
Заключение
Таким образом, выбор варианта транспорта IPX/SPX практически никогда не требует вмешательства пользователя в настройки сети и работает с хорошей точностью как Plug`n'Play, т.е. сразу после установки.
Эти протоколы управляют несколькими типами данных. Это адресация, маршрутизация, проверка ошибок и запросы на повторную передачу. IPX/SPX протоколы позволяют компьютерам в ЛВС легко обмениваться данными друг с другом.
Протокол IPX является более быстродействующим, чем протокол SPX для поддержки сеансов. Несмотря на отсутствие гарантий доставки сообщений, по данным фирмы Noмell, в 95 процентах случаев сообщения доставляются безошибочно.
Именно протокол IPX используется модулями перенаправления файлов в ОC NetWare при обмене служебными сообщениями с файловым сервером. Этот метод оказывается надёжным потому, что каждый такой запрос от рабочей станции требует ответного сообщения от стороны сервера. Таким образом, модули перенаправления файлов подразумевают, что реакция сервера на служебный запрос (например, записать данные в файл) последует только после соответствующего ответного подтверждения сервера. Протокол IPX имеется во всех версиях NetWare, в отличие от SPX.
Протокол SPX предназначен для установления диалога и применяется в течение сеанса. Для обмена данными по протоколу SPX прежде всего необходимо установит логическую связь между двумя участниками диалога. После этого сообщения могут циркулировать в обоих направлениях с гарантией их безошибочной доставки. Протокол SPX также гарантирует, что сообщения будут передаваться в правильной последовательности (в случае одновременной передачи нескольких пакетов). Протокол SPX работает на сетевом уровне по модели OSI и имеет некоторые из характеристик сеансового уровня.
В OC Net Ware протокол IPX используется для обмена пакетами, предназначенными для обслуживания файлов, а протокол SPX используется для доступа к внутренним функциям управления и диагностики сети.
Протокол SPX находится над IPX и фактически использует IPX для обмена пакетами сообщений. Он не применялся в ранних версиях NetWare и имеется только в версиях NetWare 2.0 и выше. В данное время новые версии ОС NetWare вместо протокола IPX используют протокол IP.
Список литературы
1. Олифер В. Г., Олифер Н. А. Компьютерные сети. Принципы, технологии, протоколы: Учебник. - СПб.: Питер. - 2005, 864 с.
2. Фролов А., Фролов Г. Локальные сети персональных компьютеров. Использование протоколов IPX, SPX: Учебник. - М.:Диалог - МИФИ -1993, 160 с.
3. Вычислительные системы и телекоммуникации: Учебник/ Под ред. Пятибратова А. П. - М.: Финансы и статистика. - 2002, 512 с.
Размещено на Allbest.ru
Подобные документы
Основные параметры канала цветности СЕКАМ их настройка и измерение. Традиционные измерения параметров КЦ. Время фазовой задержки в КЦ через переходную цепь. Настройка и измерение основных параметров канала цветности. Особенности многостандартных КЦ.
реферат [28,2 K], добавлен 13.01.2009Одноранговые локальные сети и сети с выделенным сервером, их преимущества и недостатки. Сущность технологий обработки информации "файл-сервер" и "клиент-сервер". Понятие экспертной системы и ее основные компоненты. Этапы развития средств разработки ЭС.
контрольная работа [21,3 K], добавлен 09.02.2012Организация сети доступа на базе волоконно–оптической технологии передачи. Инсталляция компьютерных сетей. Настройка службы управления правами Active Directory. Работа с сетевыми протоколами. Настройка беспроводного соединения. Физическая топология сети.
отчет по практике [2,9 M], добавлен 18.01.2015Разработка информационно-вычислительной сети для магазина бытовой техники. Создание системы программ "клиент-сервер", осуществляющих взаимодействие посредством сети с использованием среды визуального программирования Microsoft Visual Studio C++ 2010.
курсовая работа [896,8 K], добавлен 23.06.2012Виды сетей передачи данных. Типы территориальной распространенности, функционального взаимодействия и сетевой топологии. Принципы использования оборудования сети. Коммутация каналов, пакетов, сообщений и ячеек. Коммутируемые и некоммутируемые сети.
курсовая работа [271,5 K], добавлен 30.07.2015Исследование сети и оценка необходимости статической маршрутизации. Настройка статических маршрутов и маршрутов по умолчанию. Планирование реализации списка контроля доступа. Настройка, применение и проверка стандартных списков контроля доступа.
курсовая работа [4,3 M], добавлен 29.05.2019История возникновения сети Token-Ring как альтернативы Ethernet. Топология сети, соединение абонентов, концентратор Token-Ring. Основные технические характеристики сети. Формат пакета (кадра) сети. Назначение полей пакета. Маркерный метод доступа.
презентация [1,9 M], добавлен 20.06.2014Критерий оптимальной оценки параметров сигнала. Выбор функции стоимости при оценке параметров, его зависимость от точности измерения координат. Простая и допустимая (релейная), линейная и квадратичная функции стоимости. Структура оптимального измерителя.
реферат [698,8 K], добавлен 13.10.2013Разработка клиент-серверного приложения для передачи данных с использованием среды программирования Microsoft Visual Studio 2005. Архитектура клиент/сервер. Сокеты и библиотека WinSock. Разработка системы передачи данных в локальной вычислительной сети.
курсовая работа [479,1 K], добавлен 23.06.2012Исследование функциональной зависимости параметров сети. Мощность мобильного терминала. Расчет параметров сетей связи стандарта CDMA. Анализа трафик-каналов прямого и обратного соединений, пилот-канала, канала поискового вызова и канала синхронизации.
курсовая работа [166,1 K], добавлен 15.09.2014