Что не входит в компоненты пакетов
Работа с пакетами и компонентами
Исходный файл пакета, содержащий список модулей, расположенных в пакете. Он создается при запуске редактора пакета (по своему назначению и функциональности он похож на файл проекта Delphi *.DPR)
Двоичный файл, содержащий заголовок пакета и описание всех файлов *.DCU, расположенных в пакете, включая всю символьную информацию, которая требуется для компилятора. Всего один файл данного типа создается для одного пакета
Двоичный файл, содержащий текст модуля, находящийся в пакете. Для каждого модуля создается один файл *.DCU
Файл пакета, используемого во время работы приложения. Этот файл является аналогом динамически загружаемой библиотеки (*.DLL) Windows, которая содержит специфичные характеристики среды Delphi. Если это пакет времени выполнения, то вы должны передавать данный пакет пользователю вместе с файлом приложения. В случае, если это пакет разработки, он должен распространяться среди программистов, использующих его для написания приложений
Использование пакетов в приложениях
Для того чтобы приложение, которое использует пакеты, благополучно запустилось, нужно, чтобы имелись все необходимые приложению файлы ЕХЕ и BPL. Файлы BPL должны быть прописаны в путях приложения.
Примечание
При разработке коммерческих приложений обратите внимание на то, чтобы пользователи получили правильную версию файлов пакетов (*.BPL).
Для использования пакетов времени выполнения в вашем приложении нужно выполнить следующие шаги:
1. Загрузите или создайте новый проект в среде Delphi.
2. В главном меню Delphi выберите пункт Project/Options (Проект/Настройки).
Рис. 1.27. Вкладка Packages диалогового окна Project Options
3. В открывшемся диалоговом окне выберите вкладку Packages (Пакеты) (рис. 1.27).
4. Установите флажок Build with runtime packages (Строить с пакетами времени выполнения). Затем в открывшееся поле введите один или несколько названий пакетов, которые вы хотите использовать в своем приложении. Вы можете воспользоваться также кнопкой Add (Добавить) для поиска необходимого пакета (рис. 1.28).
Рис. 1.28. Окно добавления пакета в проект
Примечание
При изменении пути поиска (Search path) в диалоговом окне добавления пакета (рис. 1.28) вы измените глобальные настройки путей к библиотекам Delphi.
При ручном вводе имени пакета (в поле для редактирования без применения кнопки Add (Добавить) вам не потребуется вводить расширение пакета. Обратите внимание, что названия пакетов записываются через точку с запятой: VCL50;VCLX50;VCLSMPbO;VCLDB50;VCLAD050
Пакеты, перечисленные в поле для редактирования, при компиляции вашего приложения будут автоматически связаны с ним. Если в поле для ввода имен пакетов не будет ни одного названия пакета, ваше приложение будет откомпилировано как не использующее пакеты. В случае если один и тот же пакет будет записан в поле для редактирования несколько раз, все лишние записи будут проигнорированы.
Примечание
Вся информация об используемых приложением пакетах будет сохранена только для данного приложения. Если вы хотите, чтобы настройки сохранялись для других приложений, установите флажок Defaults (По умолчанию), находящийся в нижней части диалогового окна Project Options (Настройки проекта).
Очень важно помнить, что даже если вы используете в своем приложении пакеты, вы все равно должны прописывать имена модулей среды Delphi в блоке uses:
unit Unitl;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,. Dialogs;
Хотя все из вышеперечисленных модулей входят в один пакет VCL50.BPL, если убрать их описание из блока uses, компилятор сгенерирует ошибку.
Динамическая загрузка пакетов
Иногда требуется загружать необходимый пакет во время работы приложения. Для этой цели служит функция LoadPackage. Данная функция находится в модуле Delphi SysUtils. Описание функции имеет следующий вид: function LoadPackage(const Name: string): HMODULE;
В качестве передаваемого функции параметра служит имя файла пакета типа string. Вызов данной функции очень прост: LoadPackage(‘Имя файла пакета’);
Для динамической выгрузки пакета применяется процедура unioadPackage. Эта процедура также содержится в модуле SysUtils. Ее описание имеет вид: procedure UnioadPackage(Module: HMODULE);
При вызове данной процедуры будьте осторожны, чтобы не уничтожить экземпляры классов, определенных в пакете.
Среда Delphi поставляется с уже установленными пакетами компонентов, которые поддерживают основные компоненты, необходимые для создания стандартных приложений Windows. Наибольшее число стандартных компонентов Delphi содержится в уже знакомом нам пакете VCL50.BPL. Но данный пакет не содержит многие компоненты, например компоненты для работы с базами данных, компоненты для Windows 3.1 и др. Эти компоненты находятся в других пакетах Delphi (например, компоненты, предназначенные для работы с базами данных, находятся в пакете VCLDB50.BPL). Однако, несмотря на это, для работы с базами данных, вам понадобятся оба пакета VCL50.BPL и VCLDB50.BPL. В приведенной ниже табл. 1.5 перечислены пакеты времени выполнения, поставляемые с Delphi (версии 5.0), а также модули (units), входящие в данные пакеты.
Таблица 1.5. Основные runtime-пакеты Delphi
Модули, входящие в пакет
Ax, Buttons, Classes, Clipbrd, Comctrls, Coraractrl, Commdlg, Comobj, Comstrs, Consts, Controls, Ddeml, Dialogs, Digs, Dsgnintf, Dsgnwnds, Editintf, Exptintf, Extctrls, Extdlgs, Fileintf, Forms, Graphics, Grids, Imm, IniFiles, Isapi, Isapi2, Istreams, Libhelp, Libintf, Lzexpand, Mapi, Mask, Math, Menu, Messages, Mmsystem, Nsapi, 01e2I, Oleconst, Olectnrs, Olectrls, Oledlg, Penwin, Printers, Proxies, Registry, Regstr, Richedit, Shellapi, Shlobj, Stdctrls, Stdvcl, Sysutils, Tlhelp32, Toolintf, Toolwin, Typinfo, Vclcom, Virtintf, Windows, Wininet, Winsock, Winspool, Winsvc
Checklst, Colorgrd, Ddeman, Filectrl, Mplayer, Outline, Tabnotbk, Tabs
Bde, Bdeconst, Bdeprov, Db, Dbcgrids, Dbclient, Dbcommon, Dbconsts, Dbctrls, Dbgrids, Dbinpreq, Dblogdlg, Dbpwdlg, Dbtables, Dsintf, Provider, Smintf
Mxarrays, Mxbutton, Mxcommon, Mxconsts, Mxdb, Mxdcube, Mxdssqry, Mxgraph, Mxgrid, Mxpivsrc, Mxqedcom, Mxqparse, Mxqryedt, Mxstore, Mxtables, Mxqvb
Qr2const, Qrabout, Qralias, Qrctrls, Qrdatasu, Qrexpbld, Qrextra, Qrprev, Qrprgres, Qrprntr, Qrqred32, Quickrpt
Arrowcha, Bubblech, Chart, Ganttch, Series, Teeconst, Teefunci, Teengine, Teeprocs, Teeshape
Areaedit, Arrowedi, Axisincr, Axmaxmin, Baredit, Brushdlg, Bubbledi, Custedit, Dbeditch, Editchar, Flineedi, Ganttedi, leditcha, Pendlg, Pieedit, Shapeedi, Teeabout, Teegally, Teelisb, Teeprevi, Teexport
Рассмотрим теперь пакеты разработки, которые поставляются вместе с Delphi 5.0 (табл. 1.6). Напомним, что данные пакеты используются IDE Delphi для установки компонентов в палитру компонентов, задания свойств компонентов и многого другого.
Таблица 1.6. Основные design-time-компоненты Delphi
Вкладки палитры компонентов
Standard, Additional, System, Win32, Dialogs
Additional (компонент TChart)
Data Access, Data Controls
Samples (компонент IBEventAlerter)
Мастер многоязыковой поддержки
Все вышеперечисленные пакеты разработки вызывают при своей работе пакеты времени выполнения. Например, пакет DCLSTD50.BPL вызывает VCL50.BPL. Первый пакет содержит код, который позволяет делать доступ ными многие компоненты, входящие во второй пакет на палитре компонентов Delphi.
В дополнение ко всем рассмотренным выше пакетам, вы можете устанавливать в IDE пакеты собственного производства, а также пакеты, созданные другими разработчиками. Пакет Delphi DCLUSR50.BPL является стандартным контейнером для новых компонентов.
Установка пакетов компонентов
Для того чтобы установить собственные пакеты или пакеты, созданные другими разработчиками, вам нужно выполнить следующие шаги:
1. В случае, когда вы устанавливаете новый пакет, скопируйте файлы пакета в директорию библиотеки Delphi. Убедитесь, что скопировали все необходимые файлы пакета (имеющие расширения BPL, DCP, DCU). Если вы устанавливаете файл пакета с расширением DCP (Delphi Package Collection), то вам не нужно копировать никакие другие файлы, т. к. DCP-файл содержит внутри себя все файлы пакета.
2. В главном меню Delphi выберите команду Component/Install Packages (Компонент/Установить пакеты), либо воспользуйтесь вкладкой Packages (Пакеты) в диалоговом окне свойств проекта, вызываемого командой главного меню Delphi Project/Options (Проект/Настройки) (рис. 1.29).
Рис. 1.30. Щелкните на значке Package, чтобы создать новый пакет
Для создания пакета вам необходимо выполнить перечисленные ниже шаги:
Примечание
Для хорошего понимания перечисленных ниже шагов вам нужно ознакомиться со структурой пакета. Структура пакета рассматривается в следующем разделе.
1. Выберите в главном меню Delphi команду File/New (Файл/Новый). В появившемся диалоговом окне выберите значок Package (Пакет) (рис. 1.30). Сгенерированный пакет будет отображен в редакторе пакета (рис. 1.31).
Редактор пакета отображает два раздела: содержания (Contains) и требований (Requires).
Рис. 1.31. Редактор пакета
2. Для добавления нового модуля в раздел Contains (Содержание) выберите этот раздел, затем щелкните на кнопке Add (Добавить) редактора пакета. Появится диалоговое окно Add (Добавление) (рис. 1.32).
На странице Add Unit (Добавление модуля) диалогового окна Add (Добавление) запишите в поле имени файла модуля имя файла *.PAS, который вы хотите включить в пакет, либо воспользуйтесь кнопкой Browse (Обзор) для непосредственного указания файла. В результате, выбранный файл модуля будет добавлен в раздел contains вашего пакета.
Можете повторить вышеперечисленные действия для добавления дополнительных модулей в пакет.
Рис. 1.32. Диалоговое окно добавления нового модуля раздела Contains пакета
3. Для добавления пакетов в раздел Requires выберите этот раздел щелчком мыши, затем нажмите кнопку Add (Добавить) редактора пакета.
В появившемся диалоговом окне (рис. 1.33) в поле имени пакета (Package Name) впишите имя файла пакета (*.DCP), требуемого для работы вашего пакета. Вы также можете использовать кнопку Browse (Обзор) для непосредственного указания файла пакета. Повторяя данный шаг, вы можете добавить несколько файлов пакетов в раздел Requires вашего пакета.
Что не входит в компоненты пакетов
Ключевой термин: пакет.
информацию, синхронизирующую передачу.
Данные обычно содержатся в больших по размерам файлах. Однако сети не будут нормально работать, если компьютер посылает этот блок данных целиком. Существует две причины, замедляющие работу сети при передаче по кабелю больших блоков данных.
Во-первых, такой блок, посылаемый одним компьютером, заполняет кабель и «связывает» работу всей сети, т.е. препятствует взаимодействию остальных сетевых компонентов.
Во-вторых, возникновение ошибок при передаче крупных блоков приводит к повторной передаче всего блока. А если поврежден небольшой блок данных, то требуется повторная передача именно этого небольшого блока, что значительно экономит время.
Чтобы быстро и легко, не тратя времени на ожидания, передавать по сети данные, надо разбить их на небольшие управляемые блоки. Эти блоки называются пакетами или кадрами. Хотя термины «пакет» и «кадр» синонимичны, полными синонимами они все-таки не являются. Существуют различия между этими терминами в компьютерных сетях некоторых типов.
При разбиении данных на пакеты сетевая операционная система добавляет к каждому пакету специальную управляющую информацию. Она обеспечивает:
передачу исходных данных небольшими блоками;
сбор данных в надлежащем порядке (при их получении);
проверку данных на наличие ошибок (после сборки).
Пакеты могут содержать несколько типов данных:
информацию (например, сообщения или файлы);
определенные виды данных и команд, управляющих компьютером (например, запросы к службам);
коды управления сеансом (например, запрос на повторную передачу для исправления ошибки).
Некоторые компоненты являются обязательными для всех типов пакетов:
адрес источника (source), идентифицирующий компьютер-отправитель;
адрес местоназначения (destination), идентифицирующий компьютер-получатель;
инструкции сетевым компонентам о дальнейшем маршруте данных;
информация компьютеру-получателю о том, как объединить передаваемый пакет с остальными, чтобы получить данные в исходном виде;
информация для проверки ошибок, обеспечивающая корректность передачи.
Компоненты пакета группируются в три раздела: заголовок, данные и трейлер.
Рисунок 3.3.3. Компоненты пакета
сигнал, «говорящий» о том, что передается пакет;
информацию, синхронизирующую передачу.
Так как обычно размер исходных данных гораздо больше 4 Кб, для помещения в пакет их необходимо разбивать на меньшие блоки. При передаче объемного файла может потребоваться много пакетов.
Рисунок 3.3.4. Сформированный пакет
Формат и размер пакета зависят от типа сети. А максимальный размер пакета определяет, в свою очередь, количество пакетов, которое будет создано сетевой операционной системой для передачи большого блока данных.
Процесс формирования пакета начинается на Прикладном уровне модели OSI, т.е. там, где «рождаются» данные. Информация, которую надо переслать по сети, проходит сверху вниз все семь уровней, начиная с Прикладного.
На каждом уровне компьютера-отправителя к блоку данных добавляется информация, предназначенная для соответствующего уровня компьютера-получателя. Например, информация, добавленная на Канальном уровне компьютера-отправителя, будет прочитана Канальным уровнем компьютера-получателя.
Рисунок 3.3.5. Формирование пакета
Большинство пакетов в сети адресуется конкретному компьютеру, и, как результат, только он один реагирует на них. Каждая плата сетевого адаптера «видит» все пакеты, передаваемые по сегменту кабеля, но только при совпадении адреса пакета с адресом компьютера она прерывает его работу. Используется также и широковещательная адресация (broadcast addressing). На пакет с таким типом адреса одновременно реагирует множество компьютеров в сети.
В крупномасштабных сетях, покрывающих огромные территории (или государства), предлагается несколько возможных маршрутов для передачи данных. Коммутирующие и соединяющие сетевые компоненты используют адресную информацию пакетов для определения наилучшего из маршрутов.
Сетевые компоненты используют адресную информацию пакетов и для других целей: чтобы направлять пакеты по местоназначению и не допускать их в те области сети, к которым они не относятся. В правильной рассылке пакетов ключевую роль играют две функции.
Компьютер может отправить пакет на следующий подходящий сетевой компонент, основываясь на адресе из заголовка пакета.
Компьютер может отбирать определенные пакеты на основе некоторых критериев, например адреса.
При разбиении данных на пакеты сетевая операционная система добавляет к каждому пакету специальную управляющую информацию.
Компоненты пакета группируются в три раздела: заголовок, данные и трейлер.
Формат и размер пакета зависят от типа сети.
Процесс формирования пакета начинается на Прикладном уровне модели OSI.
Информация, которую надо переслать по сети, проходит сверху вниз все семь уровней, начиная с Прикладного.
На каждом уровне компьютера-отправителя к блоку данных добавляется информация, предназначенная для соответствующего уровня компьютера-получателя.
Большинство пакетов в сети адресуется конкретному компьютеру, и, как результат, только он один реагирует на них.
Используется также и широковещательная адресация (broadcast addressing). На пакет с таким типом адреса одновременно реагирует множество компьютеров в сети.
В правильной рассылке пакетов ключевую роль играют две функции: продвижение пакетов и фильтрация пакетов.
Вопросы для самоконтроля
Объясните термин: «пакет».
Для чего данные, передаваемые по компьютерной сети, разбивают на пакеты?
Какую функцию играет специальная управляющая информация, которую сетевая операционная система добавляет к каждому пакету?
Какова структура пакета?
Какие функции в правильной рассылке пакетов играют ключевую роль?
Что означает термин «продвижение» пакетов?
Что означает термин «фильтрация» пакетов?
IP-пакет состоит из заголовка и поля данных. Заголовок, как правило, имеющий длину 20 байт, имеет следующую структуру (рис. 3.3.7).
Поле Номер версии (Version), занимающее 4 бит, указывает версию протокола IP. Сейчас повсеместно используется версия 4 (IPv4), и готовится переход на версию 6 (IPv6).
Поле Длина заголовка (IHL) IP-пакета занимает 4 бит и указывает значение длины заголовка, измеренное в 32-битовых словах. Обычно заголовок имеет длину в 20 байт (пять 32-битовых слов), но при увеличении объема служебной информации эта длина может быть увеличена за счет использования дополнительных байт в поле Опции (IP Options). Наибольший заголовок занимает 60 октетов.
Рисунок 3.3.6. Структура заголовка IP-пакета
Поле Общая длина (Total Length) занимает 2 байта и означает общую длину пакета с учетом заголовка и поля данных. Максимальная длина пакета ограничена разрядностью поля, определяющего эту величину, и составляет 65 535 байт, однако в большинстве хост-компьютеров и сетей столь большие пакеты не используются. При передаче по сетям различного типа длина пакета выбирается с учетом максимальной длины пакета протокола нижнего уровня, несущего IP-пакеты. Если это кадры Ethernet, то выбираются пакеты с максимальной длиной в 1500 байт, умещающиеся в поле данных кадра Ethernet. В стандарте предусматривается, что все хосты должны быть готовы принимать пакеты вплоть до 576 байт длиной (приходят ли они целиком или по фрагментам). Хостам рекомендуется отправлять пакеты размером более чем 576 байт, только если они уверены, что принимающий хост или промежуточная сеть готовы обслуживать пакеты такого размера.
Поле Идентификатор пакета (Identification) занимает 2 байта и используется для распознавания пакетов, образовавшихся путем фрагментации исходного пакета. Все фрагменты должны иметь одинаковое значение этого поля.
Поле Флаги (Flags) занимает 3 бита и содержит признаки, связанные с фрагментацией. Установленный бит DF (Do not Fragment) запрещает маршрутизатору фрагментировать данный пакет, а установленный бит MF (More Fragments) говорит о том, что данный пакет является промежуточным (не последний) фрагментом. Оставшийся бит зарезервирован.
Поле Смещение фрагмента (Fragment Offset) занимает 13 бит и задает смещение в байтах поля данных этого пакета от начала общего поля данных исходного пакета, подвергнутого фрагментации. Используется при сборке/разборке фрагментов пакетов при передачах их между сетями с различными величинами MTU. Смещение должно быть кратно 8 байт.
Поле Время жизни (Time to Live) занимает один байт и означает предельный срок, в течение которого пакет может перемещаться по сети. Время жизни данного пакета измеряется в секундах и задается источником передачи. На маршрутизаторах и в других узлах сети по истечении каждой секунды из текущего времени жизни вычитается единица; единица вычитается и в том случае, когда время задержки меньше секунды. Поскольку современные маршрутизаторы редко обрабатывают пакет дольше, чем за одну секунду, то время жизни можно считать равным максимальному числу узлов, которые разрешено пройти данному пакету до того, как он достигнет места назначения. Если параметр времени жизни станет нулевым до того, как пакет достигнет получателя, этот пакет будет уничтожен. Время жизни можно рассматривать как часовой механизм самоуничтожения. Значение этого поля изменяется при обработке заголовка IP-пакета.
Идентификатор Протокол верхнего уровня (Protocol) занимает один байт и указывает, какому протоколу верхнего уровня принадлежит информация, размещенная в поле данных пакета (например, это могут быть сегменты протокола TCP, дейтаграммы UDP, пакеты ICMP или OSPF). Значения идентификаторов для различных протоколов приводятся в документе RFC «Assigned Numbers».
Поле Опции (IP Options) является необязательным и используется обычно только при отладке сети. Механизм опций предоставляет функции управления, которые необходимы или просто полезны при определенных ситуациях, однако он не нужен при обычных коммуникациях. Это поле состоит из нескольких подполей, каждое из которых может быть одного из восьми предопределенных типов. В этих подполях можно указывать точный маршрут прохождения маршрутизаторов, регистрировать проходимые пакетом маршрутизаторы, помещать данные системы безопасности, а также временные отметки. Так как число подполей может быть произвольным, то в конце поля Опции должно быть добавлено несколько байт для выравнивания заголовка пакета по 32-битной границе.
Поле Выравнивание (Padding) используется для того, чтобы убедиться в том, что IP-заголовок заканчивается на 32-битной границе. Выравнивание осуществляется нулями.
Формат пакета протокола IPX
Пакет протокола IPX имеет гораздо более простую структуру по сравнению с пакетом IP, что, собственно, и отражает меньшие функциональные возможности протокола IPX.
IPX-пакет имеет следующие поля.
Управление транспортом (Transport control) имеет длину 8 бит. Это поле определяет время жизни пакета в хопах. IPX-пакет может пересечь до 15 маршрутизаторов. Протокол IPX устанавливает это однобайтовое поле в 0 до начала передачи, а затем увеличивает его на 1 каждый раз, когда пакет проходит через маршрутизатор. Eu,ui счетчик превысит 15, то пакет аннулируется.
Поле данных (Data). Может занимать от 0 до 546 байт. Поле данных нулевой длины может использоваться в служебных пакетах, например, для подтверждения получения предыдущего пакета.
Из анализа формата пакета можно сделать некоторые выводы об ограничениях протокола IPX.
Отсутствует возможность динамической фрагментации на сетевом уровне. В IPX-пакете нет полей, с помощью которых маршрутизатор может разбить слишком большой пакет на части. При передаче пакета в сеть с меньшим значением MTU IPX-маршрутизатор отбрасывает пакет. Протокол верхнего уровня, например NCP, должен последовательно уменьшать размер пакета до тех пор, пока не получит на него положительную квитанцию.
Большие накладные расхдды на служебную информацию. Сравнительно небольшая максимальная длина поля данных IPX-пакета (546 байт при длине заголовка 30 байт) приводит к тому, что как минимум 5 % данных являются служебными.
Время жизни пакета ограничено числом 15, что может оказаться недостаточным для большой сети (для сравнения, в IP-сетях пакет может пройти до 255 промежуточных маршрутизаторов).
Отсутствует поле качества сервиса, что не позволяет маршрутизаторам автоматически подстраиваться к требованиям приложения к качеству передачи трафика.
Кроме того, некоторые недостатки сетей Novell связаны не с протоколом IPX, a со свойствами других протоколов стека IPX/SPX. Многие недостатки проявляются при работе стека IPX/SPX на медленных глобальных линиях связи, и это закономерно, так как ОС NetWare оптимизировалась для работы в локальной сети.
Например, неэффективная работа по восстановлению потерянных и искаженных пакетов на низкоскоростных глобальных каналах обусловлена тем, что протокол NCP, который выполняет эту работу, использует метод получения квитанций с простоями. В локальных сетях со скоростью 10 Мбит/с такой метод работал вполне эффективно, а на медленных каналах время ожидания квитанции заметно тормозит работу передающего узла.
В версиях ОС NetWare до 4.0 соответствие символьных имен серверов их сетевым адресам устанавливалось только с помощью широковещательного протокола Service Advertising Protocol (SAP). Однако широковещательные рассылки заметно засоряют медленные глобальные каналы. Модернизируя свой стек для применения в крупных корпоративных сетях, компания Novell использует теперь справочную службу NDS (NetWare Directory Services) для нахождения разнообразной информации об имеющихся в сети ресурсах и службах, в том числе и о соответствии имени сервера его сетевому адресу. Так как служба NDS поддерживается только серверами с версией NetWare 4.x и выше, то для работы с версиями NetWare 3.x маршрутизаторы распознают SAP-пакеты по номеру их сокета и передают их на все порты, имитируя широковещательные рассылки локальной сети, на что тратится значительная часть пропускной способности медленных глобальных линий. Кроме того, такая «псевдошироковещательность» сводит на нет изоляцию сетей от некорректных SAP-пакетов.
В последних версиях своей операционной системы NetWare компания Novell значительно модифицировала свой стек для того, чтобы он мог более эффективно использоваться в крупных составных сетях.
Служба NDS позволяет отказаться от широковещательного протокола SAP. Служба NDS основана на иерархической распределенной базе данных, хранящей информацию о пользователях и разделяемых ресурсах сети. Приложения обращаются к этой службе по протоколу прикладного уровня NDS.
Кроме того, постоянное повышение быстродействия глобальных служб уменьшает недостатки оригинальных протоколов стека IPX/SPX, что позволяет некоторым обозревателям говорить об успешной работе операционной системы NetWare в глобальных сетях и без указанных нововведений.