12/18/94 04:03pm
lok_seti.lek
А.В.Фролов, Г.В.Фролов
"Программирование модемов"
серия БСП том 4 М. "ДИАЛОГ-МИФИ"
1994 издание второе, стереотипное.
А.В.Фролов, Г.В.Фролов "Локальные
сети персоналиных компьютеров.
Использование протоколов IPX, SPX,
NETBIOS" серия БСП том 8 М.
"ДИАЛОГ-МИФИ" 1993.
Локальные сети персональных компьютеров.
ЛОКАЛЬНАЯ СЕТЬ - замкнутая система ЭВМ, предназначенная для использования на ограниченной территории предприятия - владельца сети, для решения его внутренних задач.
Основные характеристики и принципы построения локальной сети:
Каналы связи обычно принадлежат организации пользователя;
Используются специальные высокоскоростные каналы с логической коммутацией абонентов;
Пользовательские терминалы распологаются неподалеку друг от друга в пределах одного здания или комплекса зданий (расстояние между передатчиком и приемником не превышает нескольких километров);
Для обеспечения работы компьютера в локальной сети, как правило, требуется специальное оборудование и программное обеспечение;
Возможно
объединение нескольких
локальных сетей в более
крупную сеть.
Переход из одной сети в
другую осуществляется через
"мост";
Выход в глобальные сети может осуществляеться специальными средствами.
В локальной сети данные передаются от одной рабочей станции к другой блоками, называемыми ПАКЕТАМИ ДАННЫХ. Каждый пакет состоит из ЗАГОЛОВКА и СОБСТВЕННО БЛОКА. Пакеты могут передаваться с подтверждением получения и без подтверждения. При передаче без подтверждения не гарантируется, что пакет будет получен адресатом и что принимающая сторона получит пакеты в правильной последовательности.
Протоколы передачи данных:
IPX (Internetwork Packet Exchange) - используется в сетевом программном обеспечении Novell и является реализациея уровня ДАТОГРАММ (собственно передача данных без подтверждения получения);
SPX (Sequenced Packet Exchange protocol) - протокол последовательной передачи пакетов. Реализован на основе IPX и гарантирует получение пакетов в правильной последовательности.
NETBIOS - протокол более высокого уровня, обеспечивающий передачу информации и выполнение операций, необходимых для организации канала связи между передатчиком и приемником. Реализован на основе IPX и SPX.
Потокол IPX.
Пакет IPX состоит из заголовка и блока передаваемых данных. Блок передаваемых данных имеет длину от 0 до 546 байт. Формат заголовка приведен ниже, его особенностью является то, что все поля хранят информацию в "перевернутом" виде (старший байт распологается по меньшему адресу).
Формат заголовка пакета IPX (его длина 30 байт):
Checksum - контрольная сумма (хранит контрольную сумму передаваемого пакета, формирование и проверку осуществляет драйвер сетевого адаптера);
Length - общая длина пакета с учетом заголовка (пакет может состоять только из заголовка. Такие пакеты обычно используются для подтверждения приема пакета адресатом);
TransportControl - счетчик пройденных мостов (посуществу указывает на количество промежуточных станций, через которые передавался пакет. Значение может использоваться драйвером для отслеживания загруженности линий);
PacketType - тип пакета (указывает на назначение пакета);
DestNetwork - номер сети получателя пакета (каждая сеть имеет свой номер, который присваивается ей при создании сети);
DestNode - адрес станции-получателя (каждый компьютер, подключенный к сети, имеет свой уникальный идентификатор. Возможна организация передачи сразу на несколько адресов);
DestSocket - Сокет (уникальный номер) программы-получателя (одновременно на компьютере может быть запущено несколько программ, каждая из которых может обратиться к сети);
SourceNetwork - Номер сети отправителя пакета;
SourceNode - Адрес станции-отправителя;
SourceSocket - Сокет программы-отправителя.
Работа с драйвером IPX.
Работа с драйвером должна начинаться с проверки, загружен ли драйвер в память, и определения адреса его вызова.
Для выполнения этих операций необходимо вызвать прерывание 2Fh, с AX=7A00h; если после возврата из прерывания AL=FFh, то драйвер загружен и регистровая пара ES:DS содержит адрес API (Application Programm Interface - интерфейс для приложений) точки входа в драйвер. Для выполнения какой-либо функции необходимо загрузить ее номер в BX и обратиться к подпрограмме с адресом API.
После инициализации драйвера необходимо выполнить инициализацию СЕРВЕРА (машины или программы, обслуживающей запросы) и КЛИЕНТА (машины или программы формирующей запросы к серверу). В сети может быть несколько серверов и несколько клиентов, кроме того на каждом компьютере могут быть одновременно запушены программы-серверы и программы-клиенты.
Инициализация сводится к присвоению программам двухбайтовых номеров-сокетов. Можно использовать произвольные номера, но в реальной сети часть номеров может быть зарезервирована за определенными программами.
Номера сокетов могут присваиваться программам на постоянной основе, либо выделяться динамически.
Для приема или передачи пакета прикладная программа должна подготовить пакет данных и построить БЛОК УПРАВЛЕНИЯ СОБЫТИЕМ - ECB (Event Control Block). В блоке ECB содержится адресная информация для передачи пакета, адрес передаваемого пакета и дополнительная информация.
Формат блока ECB:
LINK - Указатель на следующий ECB (последовательно может передаваться несколько пакетов, а поскольку передача идет асинхронно с инициирующей передачу программой необходимо отслеживать каждую передачу отдельно);
ESRAdress - адрес программы ESR (программы пользователя, получающей управление после окончания передачи; если такой программы нет, то поле должно содержать нули);
InUse - флаг состояния ECB (указывает на текущее состояние пакета:
00h - операция завершена,
FFh - ECB используется для передачи данных
FEh - ECB используется для приема данных
FDh - ECB находится в ожидании окончания зададанного интервала времени
FBh - операция завершена, но обработка ECB не закончена);
CCode - Код результата выполнения операции:
00h - операция выполнена без ошибок (гарантий приема адресатом нет!)
FFh - передающее оборудование неисправно или получен пакет на неизвестный сокет
FEh - станция-приемник неисправна или отсутствует
FDh - ошибка в оформлении пакета
FCh - обмен был прекращен специальной функцией драйвера IPX;
Socket - Сокет, связанный с данным ECB (с программой, создавшей данный ECB);
IPXWorkspace - Рабочий буфер драйвера IPX;
DriverWorkspace - Рабочий буфер драйвера адаптера;
ImmAdress - Адрес узла связи (при передаче внутри одной сети - адресстанции-получателя, при межсетевой передаче - адрес "моста" между сетями);
FragmentCnt - Количество фрагментов, на которые надо разбить принятый пакет или из которых надо собрать передаваемый (удобно при обмене большими массивами формировать отдельно заголовок пакета и блок данных. Поле содержит подполя, количество подполей опредеделяется количеством фрагментов: Address - адрес фрагмента, Size - длина фрагмента ...).
Основные функции API драйвера IPX:
Функции для работы с сокетами - позволяют программе получить свой уникальный номер. Сокеты являются ограниченным ресурсом, поэтому они должны освобождаться после использования. Выделяемый сокет может быть короткоживущими (после окончания работы программы автоматически освобождаются) и долгоживущие (предназначены для резидентных программ и самих пользователей).
Функции для работы с сетевыми адресами - позволяют вычислить адрес станции получателя, отправителя или свой собственный адрес.
Функции занимающиеся приемом и передачей пакетов - организуют очереди на прием и передачу пакетов. Порядок передачи (и приема) может не соответствовать порядку поступления запросов.
Функции обслуживания времени - позволяют синхронизировати процессы обмена во времени.
Определение топологии сети.
Реальная сеть может состоять из нескольких самостоятельных сетей, соединенных мостами. При работе внутри одной сети программе-клиенту достаточно знать номер сокета программы-сервера, всю остальную информацию можно определить по результатам первого сеанса связи (при первом вызове клиент указывает "широковещательный" адрес на который откликаются все программы с данным сокетом на всех станциях из полученных ответов выбирается нужный).
Если топология сети более сложная, то необходимо организовать переход через мост, который возможен только при знании его сетевого адреса.
Реальные
сетевые оболочки обычно имеют
специальный сервис для
автоматического определения
топологии сети. Для этого
выделяется сокет (в сети Novel NetWare это
0456h), при обращении к которому
возвращается диагностическая
информация.
Обнаружив мост можно войти в другую
сеть с повторным запросом
конфигурации.
Диагностические запросы можно посылать конкретной станции или всем станциям сети сразу, по адресу диагностического сокета. В блоке данных пакета необходимо указать список номеров станций к которым относится запрос (первый байт блока должен содержать количество станций или ноль, если ожидается ответ от всех станций). При обрашении к нескольким станциям запрос необходимо повторить несколько раз, т.к. нет гарантии получения ответа. Станции при получении такого запроса после небольшой задержки (для устранения перегрузки в сети и повышения вероятности передачи) возвращают пакет конфигурации. В его блоке данных содержится информация о программном и аппаратном обеспечении станции.
Блок данных состоит из двух частей:
Первая часть имеет фиксированную структуру и содержит общую информацию о станции; структура второй части зависит от конфигурации программного и аппаратного обеспечения станции.
Вторая часть содержит структуры, описывающие отдельные компаненты которые могут быть простыми и расширенными. Именно расширенные структуры содержат данные, необходимые для выхода в другие сети в виде номера внешней сети и сетевого адреса адаптера для обрашения.