Скачать

Интранет сети

         

Интранет сети

СОДЕРЖАНИЕ1. Введение2. Сетевые и межсетевые протоколы3. Протоколы TCP/IP4. Обмен сообщениями в сети5. Работа с файлами в ЛВС6. Вирусы в сети7. Список литературы1. Введение.Накопленный опыт эксплуатации больших вычислительных сетей, та-ких как ARPANET и TELENET, показывает, что около 80% всей генери-руемой в таких сетях информации используется только тем же офисом,который ее порождает, т.е. значительная часть сетевой информациипредназначается лишь местным потребителям. Поэтому в последние10-15 лет выделился специальный класс вычислительных сетей - ло-кальные вычислительные сети (ЛВС), оптимально сочетающие в себепростоту и надежность, высокую скорость передачи и большой наборреализуемых функций.Международный комитет IEEE 802 (институт инженеров по электро-нике и электротехнике -IEEE, США), специализирующийся на стандар-тизации в области ЛВС, дает следующее определение этим сетям: "...Локальные вычислительные сети отличаются от других типов сетейтем, что они обычно ограничены умеренной географической областью,такой, как группа рядом стоящих зданий: склад, студенческий горо-док, и в зависимости от каналов связи осуществляют передачу данныхв диапазонах скоростей от умеренных до высоких с низкой степеньюошибок... Значения параметров области, общая протяженность, коли-чество узлов, скорость передачи и топология ЛВС могут быть самымиразличными, однако комитет IEEE 802 основывает ЛВС на кабеляхвплоть до нескольких километров длины, поддержки нескольких сотенстанций разнообразной топологии при скоростях порядка 1-20 и болееМбит/сек" .Таким образом, отличительными признаками ЛВС можно считать: ох-ват умеренной площади, высокую скорость передачи и низкую вероят-ность возникновения ошибок в коммуникационном оборудовании.2. СЕТЕВЫЕ И МЕЖСЕТЕВЫЕ ПРОТОКОЛЫБазовая Модель Открытых Систем (МОС) определяет семь уровней(слоев) коммуникационной системы. Каждый слой определяет соот-ветствующее подмножество функций, необходимых для взаимодействия.Каждый уровень взаимодействует только со смежными уровнями.Физический уровень (слой 1) предназначен для собственно переда-чи данных по сети. Этот уровень определяет набор передающих сред,используемых для соединения различных сетевых компонент (например,оптическое волокно, витой телефонный кабель, коаксиальный кабель иустройство цифрового мультиплексирования).Уровень управления каналом (слой 2) предназначен для передачиданных в каждый тип передающей среды. В локальных сетях на этомуровне решается проблема коллективного использования передающейцсреды и обнаружения и исправления ошибок.Сетевой уровень (слой 3), часто называемый уровнем коммуникаци-онной подсети, предназначен для переадресации пакетов. На этомуровне осуществляется прокладка маршрутов пакетов в сети. .Транспортный уровень (слой 4) обеспечивает надежный транспортданных между абонентами сети, включая средства управления потокоми выявления и исправления ошибок.Сеансовый уровень (слой 5) предназначен для управления коммуни-кационными связями между двумя точками уровня представления. Уста-новление, поддержка и окончание сеанса (сессии) обеспечиваютсяэтим уровнем. Кроме того, здесь же обеспечиваются соглашения обименах.Уровень представления (слой 6) предназначен для преобразованияданных в процессе их прохождения по сети. Кодировка, шифрование,преобразование ASCII/EBCDIC, а также интерпретация управляющихсимволов - примеры задач этого уровня.Прикладной уровень (слой 7) представляет собой полный прог-раммный интерфейс к прикладным процессам. Этот слой обеспечиваетполный набор служб для управления связанными распределенными про-цессами, включая доступ к файлам, управление базами данных и уп-равление сетью.Существует два различных способа организации обмена данными всети - без установления логического соединения и с установлениемсоединения.Метод связи без логического соединения один из самых старых ипростейших в коммуникационной технологии. В таких системах каждыйпакет рассматривают как индивидуальный объект: каждый пакет содер-жит адрес доставки и освобождает систему от предварительного обме-на служебной информацией между передающим и принимающим узлами.Примерами таких протоколов являются:1.Прикладной дейтаграммный протокол Министерстваобороны США.Ihe Dept. of Defense's User Datagram Protocol (UDP).2.Протокол обмена пакетов сети Интернет фирмы Ксерокс.Xerox's Internet Pasket Exchange Protocol (IPX).3.Дейтаграммный протокол фирмы Apple.Apple's Datagram Delivery Protocol (DDP).Пример взаимодействия между абонентами безустановления соединенияПакет данных 1------------------------------>Клиент "A" Пакет данных 2 Клиент "B"------------------------------>Пакет данных 3------------------------------>Пример взаимодействия между клиентом "A" и клиентом "B" без ус-тановления логического канала. Поскольку никакого предварительногообмена служебной информацией не производится, при этом методе пе-редаются только данные.Связь без логического соединения характеризуется следующим:а. Переполнения соединений в рабочих станциях, межсетевыхрутерах, мостах и серверах полностью исключены.в. Имеется возможность одновременно посылать пакеты множествуадресатов.с. Синхронизация приемника и передатчика не является необходи-мой. Используя систему очередей, сетевые компоненты буферизуютзапросы на передачу пакетов, увеличивая гибкость передачи.Метод, ориентированный на логическое соединение, является болеепоздней технологией. При этом методе устанавливается логическийканал между двумя клиентами перед собственно передачей данных. Па-кеты запроса на соединение посылаются удаленному клиенту для уста-новки логического канала. Если удаленный клиент "согласен", товозвращается пакет подтверждения установления логического канала итолько после этого начинается обмен данными с управлением потоком,сегментацией и исправлением ошибок. Когда обмен данными завершает-ся, посылается пакет подтверждения клиенту - инициатору.Примерами протоколов, ориентированных на соединение,(с установ-кой логического канала являются):1.Протокол управления передачей Министерства обороны США. IheDept. of Defenee's Transmission Control Protocol (TCP)2.Протокол последовательных пакетов фирм Ксерокс Xerox'sSequenced Packet Protocol (SPP). Примерами протоколов, ориентиро-ванных на соединение,(с установкой логического канала являются):1.Протокол управления передачей Министерства обороны США. IheDept. of Defenee's Transmission Control Protocol (TCP) 2.Протоколпоследовательных пакетов фирм Ксерокс Xerox's Sequenced PacketProtocol (SPP). 3.Протокол транзакции фирмы Эппл. Apple'sAppletalk Transaction Protocol (ATP)Пример взаимодействия с предварительнымустановлением логического каналаПакет запроса "вызов"----------------------------------->Пакет подтверждения вызова<----------------------------------Пакет данных 1----------------------------------->Клиент "A" Пакет данных 2 Клиент "B"----------------------------------->Пакет данных 3----------------------------------->Пакет подтверждения данных<----------------------------------Пример взаимодействия между клиентом "A" и клиентом "B" с пред-варительной установкой логического канала. Пакет запроса "вызов",пакет подтверждения вызова и пакет подтверждения данных являютсяслужебной информацией.Связь с установлением соединения характеризуется большими нак-ладными расходами, но обеспечивает значительно более высокий уро-вень сервиса по сравнению с дейтаграммной связью.NetWare базируется на эффективном методе без установления логи-ческого канала. Служба логических каналов базируется на системе,использующей метод передачи без установления соединения, и пред-назначается для приложений, нуждающихся в таком сервисе.2.1. Переадресация в интерсетиСхема адресации NetWare в интерсети изначально была определенагруппой по сетевым системам фирмы Xerox (Xerox Network SystemsXNS) как межсетевой дейтаграммный и межсетевой транспортный прото-колы (Internet Datagram and Internet Transport Protocols).Пакет межсетевого протокола разделен на две основные части: за-головок (блок адресации) и блок данных. Блок адресации подразделя-ется в свою очередь на три части: часть управления, адресная частьполучателя (доставки) и адресная часть источника.Оба адреса - адрес доставки и адрес отправителя состоят из трехполей: номера хост-системы, номера сети и номера порта (сокета).Номер хост-системы имеет размер 48 битов. Он обеспечивает уни-кальную идентификацию любых хост-систем различных производителейбезотносительно к составу конкретной интерсети.Номер сети имеет разрядность 32 бита, что обеспечивает уни-кальным идентификатором любую сеть в интерсети.Номер порта (сокета) имеет разрядность 16 битов для идентифика-ции запроса приема/передачи между процессами.2.2. Маршрутизация в интерсети.Алгоритм маршрутизации в NetWare является распределенным такимобразом, что процессы принятия решения могут приниматься во мно-жестве узлов интерсети - в любом из маршрутизаторов или сетевыхсерверов NetWare. Алгоритм маршрутизации NetWare является адаптив-ным. Он позволяет реагировать на изменяющиеся условия внутри ин-терсети почти мгновенно.При отказе сетевого сервера или моста , адаптивный маршрутиза-тор ищет альтернативный маршрут. Если находятся несколько маршру-тов, маршрутизатор использует наиболее оптимальный.2.3. Алгоритм маршрутизации.Сетевая операционная система NetWare использует распределенныйадаптивный алгоритм передачи пакетов в интерсети. NetWare быстро иэффективно реагирует на динамические изменения в топологии интер-сети, предоставляя новые эффективные маршруты практически немед-ленно. Управление потоком обеспечивается Протоколом Обмена После-довательными Пакетами (Sequenced Packet Exange Protocol), рассмат-риваемым далее.Алгоритм маршрутизации NetWare включает в себя: 1) процесс из-мерения и идентификации для отслеживания за топологией интерсети,и 2) протокол рассеивания информации о сетевых характеристиках со-ответствующего узла. Маршрутизатор выполняет измерения посредствомзаписи числа точек сети интернет, через которые должен пройти па-кет от маршрутизатора (измерителя) по всем остальным маршрутизато-рам интерсети с отметками интервала времени прохождения между ни-ми. Таким образом отмечается количество серверов и маршрутизато-ров, которые пакет возвращает измерителю. Серверы и маршрутизаторыследят друг за другом посредством периодической посылки информациио своем состоянии.Во время инициализации каждый маршрутизатор запрашивает инфор-мацию о маршрутах от всех других маршрутизаторов интерсети. Табли-цы маршрутизаторов строятся во время инициализации и обновляютсяпо мере приема информации.После инициализации маршрутизатор посылает широковещательно ин-формацию о всех сетях и серверах, о которых он имеет сведения. Се-тевая информация включает в себя номер сети, удаленность и пример-ное время передачи 576-байтового пакета от данного маршрутизаторрадо целевой сети.В дополнение к данной информации, маршрутизатор передает обнов-ляющую информацию, как только изменится информация в таблице. Этиизменения включают в себя все удаления и включения других маршру-тизаторов и серверов в таблицу, а также изменения в расстояниимежду серверами и маршрутизаторами. Как только изменение в таблицеобнаружено, сервер/маршрутизатор немедленно отсылает информацию обизменении во все сети, к которым он подсоединен.Когда теряется информация о сервере или сети, маршрутизатор пы-тается выровнять ситуацию при помощи нового маршрута, который онвычисляет на основе своих сведений. Как только такой маршрут нахо-дится, маршрутизатор немедленно сообщает остальным маршрутизаторамо новом маршруте. Если альтернативный маршрут не найден, маршрути-затор также оповещает об этом.2.4. Протокол обмена пакетов интерсети NetWare (IPX)IPX обеспечивает сетевой уровень Advanced NetWare дейтаграммныминтерфейсом. IPX является реализацией Xerox's InteruetworkDatagram PacKet Protocol (IDP). Назначение IPX - дать прикладнымпрограммам рабочей станции NetWare доступ к сетевым драйверам ивзаимодействовать напрямую с другими рабочими станциями, серверамиили устройствами интерсети.IPX позволяет прикладной программе присылать и принимать от-дельные пакеты интерсети. Пакеты интерсети структурированы в соот-ветствии с определением Xerox Network Systems (XNS). В среде ин-терсети NetWare каждый узел имеет уникальный межсетевой адрес. Ис-пользуя IPX, рабочая станция NetWare может посылать и приниматьпакет от любой станции интерсети. Маршрутизация пакетов между уз-лами, физически находящимися в сетях различной архитектуры, явля-ется автоматической и прозрачной. Эта прозрачность обеспечиваетсясредствами маршрутизации в серверах и маршрутизаторах NetWare.IPX-пакеты структурированы в точности как пакеты Xerox's XNSInternet Datagram Protocol (IDP). Пакеты разбиваются на две логи-ческие части: на заголовок и блок данных. Заголовок в свою очередьразделен на блок управления, на блок адреса получателя и на блокадреса отправителя.Каждый пакет содержит длину полного пакета интерсети, которыйявляется суммой длины блока заголовка и длока данных. Минимальнойдлиной пакета принято считать 30 байтов.Каждый пакет имеет индикатор типа сервиса, предоставляемого илизапрашиваемого данным пакетом. Xerox определяет следующие величи-ны:0 : неопределенный тип пакета;1 : пакет информации о маршруте;2 : эхо-пакет;3 : пакет объявления об ошибке;4 : пакет обмена пакетами;5 : пакет протокола последовательных пакетов;16-31 : экспериментальные протоколы.Формат пакета обмена Интерсети (IPX)-0 1 15 ¦г====================¦Управление ¦---------T----------¦¦¦---------+----------¦¦¦- сеть доставки -¦¦¦--------------------¦¦Сетевой адрес ¦- -¦¦доставки ¦- хост доставки -¦¦¦--------------------¦¦Заголовок¦ порт доставки ¦+---------¦--------------------¦¦¦ сеть отправителя ¦¦¦--------------------¦¦Сетевой адрес ¦ -¦¦отправителя ¦- хост отправителя -¦¦¦- -¦¦¦--------------------¦¦¦ порт отправителя ¦¦L====================-¦--г====================¦ ¦¦¦ 0 -546 байтов ¦¦¦ ¦¦Данные¦ прозрачных данных ¦+------¦ ¦¦¦ ---------¦¦¦ ¦доп.байт¦¦L===========¦========-¦--Рис. 2.3.2.5. Программный интерфейс IPXIPX использует блок управления событиями для координации и акти-визации определенных операций. Могут возникать два типа событий:события, связанные с приемопередачей и события специального назна-чения, определяемые прикладной программой. Услуги IPX по приему ипередаче включают в себя следующее:a. открыть порт;b. закрыть порт;c. получить локальную цель;d. послать пакет;e. получить межсетевой адрес;f. сбросить управление;g. отсоединиться от цели.События специального назначения управляются посредствомAsynchronons Event Sheduler (AES), встроенного в IPX. AES являетсядополнительным сервисом, обеспечивающим также средства измерениязатраченного времени и переключения событий в соответствии с отме-ренными интервалами времени. Программный интерфейс AES включает всебя следующие услуги:a. планирование события IPX;b. подавление события;c. планирование специального события;d. получение маркера интервала.Протокол IPX предназначен для использования в качестве фунда-мента для построения сложных прикладных систем, включая серверысвязи, шлюзы или системы прямого взаимодействия.Тест наличия IPX в памяти использует мультиплексное прерывание2F. Ниже приводится текст функции, возвращающей 1, если IPX уста-новлен.void far (*ipx_spx)(void)int ipx_installed(void){union REGS regs;struct SREGS sregs;regs.x.ax =0x7a00;int86x(0x2f,®s,®s,&sregs);if (regs.h.al != 0xff)return -1;ipx_spx = MK_FP(sregs.es,regs.x.di);return 1;}/****/struct IPXHEADER{unsigned int checksum;unsigned int length;unsigned char transport_control;unsigned char packet_type;unsigned char dest_network_number (4);unsigned char dest_network_node (6);unsigned int dest_network_socket;unsigned char source_network_number (4);unsigned char source_network_node (6);unsigned int source_network_socket;};struct ECB{void far *link_address;void far (*event_service_routine)(void);unsigned char in_use;unsigned char completion_code;unsigned int socket_number;unsigned int connection_id; /* returned by Listen */unsigned int rest_of_workspace;unsigned char driver_workspace (12);unsigned char immediate_address ( 6);unsigned int packet_count;struct {void far *address;unsigned int length;} packet (2);};int ipx_spx_installed(void);int ipx_cancel_event(struct ECB *ecb_ptr);void close_socket(unsigned int socket);int open_socket(unsigned int socket);int get_local_target(unsigned char *dest_network,unsigned char *dest_node,unsigned int dest_socket,unsigned char *bridge_address);void let_ipx_breath(void);void ipx_listen_for_packet(struct ECB *ecb_ptr);void ipx_send_packet(struct ECB *ecb_ptr);int get_internet_address(unsigned char connection_number,unsigned char *network_number,unsigned char *physical_node);unsigned int get_1st_connection_num (char *who);unsigned char get_connection_number(void);void get_user_id(unsigned char connection_number,unsigned char *user_id);/** IPX.C -- helper routines for accessing IPX services* from Turbo C.*/#include void far (*ipx_spx)(void);int ipx_spx_installed(void){union REGS regs;struct SREGS sregs;regs.x.ax = 0x7a00;int86x(0x2f, ®s, ®s, &sregs);if (regs.h.al != 0xff) return -1;ipx_spx = MK_FP(sregs.es, regs.x.di);_BX = 0x0010;_AL = 0x00;ipx_spx();if (_AL == 0x00) return 0;return 1;}int ipx_cancel_event(struct ECB *ecb_ptr){_ES = FP_SEG( (void far *) ecb_ptr);_SI = FP_OFF( (void far *) ecb_ptr);_BX = 0x0006;ipx_spx();_AH = 0;return _AX;}void close_socket(unsigned int socket){if (ipx_spx_installed() < 1) return;_BX = 0x0001;_DX = socket;ipx_spx();}int open_socket(unsigned int socket){if (ipx_spx_installed() < 1) return -1;_DX = socket;_BX = 0x0000;_AL = 0xFF;ipx_spx();_AH = 0;return _AX;}int get_local_target(unsigned char *dest_network,unsigned char *dest_node,unsigned int dest_socket,unsigned char *bridge_address){unsigned int temp_ax;struct {unsigned char network_number (4);unsigned char physical_node (6);unsigned int socket;} request_buffer;struct {unsigned char local_target (6);} reply_buffer;memcpy(request_buffer.network_number, dest_network, 4);memcpy(request_buffer.physical_node, dest_node, 6);request_buffer.socket = dest_socket;_ES = FP_SEG( (void far *) &request_buffer);_SI = FP_OFF( (void far *) &request_buffer);_DI = FP_OFF( (void far *) &reply_buffer);_BX = 0x0002;ipx_spx();_AH = 0;temp_ax = _AX;memcpy(bridge_address, reply_buffer.local_target, 6);return temp_ax;}void let_ipx_breath(void){_BX = 0x000A;ipx_spx();}void ipx_listen_for_packet(struct ECB *ecb_ptr){_ES = FP_SEG( (void far *) ecb_ptr);_SI = FP_OFF( (void far *) ecb_ptr);_BX = 0x0004;ipx_spx();}void ipx_send_packet(struct ECB *ecb_ptr){_ES = FP_SEG( (void far *) ecb_ptr);_SI = FP_OFF( (void far *) ecb_ptr);_BX = 0x0003;ipx_spx();}int get_internet_address(unsigned char connection_number,unsigned char *network_number,unsigned char *physical_node){union REGS regs;struct SREGS sregs;struct {unsigned int len;unsigned char buffer_type;unsigned char connection_number;} request_buffer;struct {unsigned int len;unsigned char network_number (4);unsigned char physical_node (6);unsigned int server_socket;} reply_buffer;regs.h.ah = 0xe3;request_buffer.len = 2;request_buffer.buffer_type = 0x13;request_buffer.connection_number = connection_number;reply_buffer.len = 12;regs.x.si = FP_OFF( (void far *) &request_buffer);sregs.ds = FP_SEG( (void far *) &request_buffer);regs.x.di = FP_OFF( (void far *) &reply_buffer);sregs.es = FP_SEG( (void far *) &reply_buffer);int86x(0x21, ®s, ®s, &sregs);memcpy(network_number, reply_buffer.network_number, 4);memcpy(physical_node, reply_buffer.physical_node, 6);regs.h.ah = 0;return regs.x.ax;}unsigned int get_1st_connection_num (char *who){union REGS regs;struct SREGS sregs;struct {unsigned int len;unsigned char buffer_type;unsigned int object_type;unsigned char name_len;unsigned char name (47);} request_buffer;struct {unsigned int len;unsigned char number_connections;unsigned char connection_num (100);} reply_buffer;regs.h.ah = 0xe3;request_buffer.len = 51;request_buffer.buffer_type = 0x15;request_buffer.object_type = 0x0100;request_buffer.name_len = (unsigned char) strlen(who);strcpy(request_buffer.name, who);reply_buffer.len = 101;regs.x.si = FP_OFF( (void far *) &request_buffer);sregs.ds = FP_SEG( (void far *) &request_buffer);regs.x.di = FP_OFF( (void far *) &reply_buffer);sregs.es = FP_SEG( (void far *) &reply_buffer);int86x(0x21, ®s, ®s, &sregs);if (regs.h.al != 0) return 0;if (reply_buffer.number_connections == 0) return 0;regs.h.ah = 0;regs.h.al = reply_buffer.connection_num(0);return regs.x.ax;}unsigned char get_connection_number(void){_AH = 0xDC;geninterrupt(0x21);return _AL;}void get_user_id(unsigned char connection_number,unsigned char *user_id){union REGS regs;struct SREGS sregs;struct {unsigned int len;unsigned char buffer_type;unsigned char connection_number;} request_buffer;struct {unsigned int len;unsigned char object_id(4);unsigned char object_type(2);char object_name(48);char login_time(7);} reply_buffer;regs.h.ah = 0xe3;request_buffer.len = 2;request_buffer.buffer_type = 0x16;request_buffer.connection_number = connection_number;reply_buffer.len = 61;regs.x.si = FP_OFF( (void far *) &request_buffer);sregs.ds = FP_SEG( (void far *) &request_buffer);regs.x.di = FP_OFF( (void far *) &reply_buffer);sregs.es = FP_SEG( (void far *) &reply_buffer);int86x(0x21, ®s, ®s, &sregs);strncpy(user_id, reply_buffer.object_name, 48);}2.6. Протокол последовательного обмена пакетами NetWare (SPX)Протокол обмена последовательными пакетами (SPX) строится наоснове IPX и предлагает дополнительные услуги Xerox's SequencedPacket Protocol (SPP). SPX дает возможность прикладным программамрабочей станции NetWare получать некоторые преимущества при ис-пользовании сетевых драйверов при прямых коммуникациях с другимирабочими станциями, серверами и устройствами интерсети с дополни-тельной гарантией достоверности и последовательности пакетов.Внутренне SPX построен на дейтаграммных примитивах IPX и даетпростой интерфейс, ориентированный на установление соединения.В дополнение к структуре IPX, SPX включает 12 байтов блока уп-равления соединения.2.7. Программный интерфейс SPXВ дополнение к программному интерфейсу IPX, SPX предоставляетследующие функции:a. проверка установки SPX;b. установка соединения;c. прослеживание соединения;d. окончание соединения;e. разрыв соединения;f. получение состояния соединения;g. посылка последовательного пакета;h. прослушивание (ожидание) последовательного пакета.Эти функции управляют установкой, поддержанием, cбросом соеди-нения. Прикладные системы, использующие SPX не обязаны организовы-вать свои собственные схемы тайм-аутов для гарантирования воста-новления по обрыву установленного соединения, посылки последова-тельного пакета или по запросу об окончании соединения.Формат пакета протокола SPX0 1 15 ¦г====================¦¦ контрольная сумма ¦¦¦--------------------¦¦¦ длина ¦¦¦---------T----------¦¦¦упр.транс¦тип пакетদ¦---------+----------¦¦¦- сеть доставки -¦¦¦--------------------¦¦Сетевой адрес ¦- -¦¦доставки ¦- хост доставки -¦¦¦--------------------¦¦Уровень 1¦ порт доставки ¦+---------¦--------------------¦¦адресация¦- сеть отправителя-¦¦¦--------------------¦¦Сетевой адрес ¦ -¦¦отправителя ¦- хост отправителя -¦¦¦- -¦¦¦--------------------¦¦¦ порт отправителя ¦¦L====================-¦-+г==========T=========¦¦упр.соедин¦тип потоꦦ¦----------+---------¦¦¦идент.источ.соединен¦¦¦--------------------¦¦¦идент. приемника ¦¦Уровень 2¦--------------------¦+---------¦ номер пакета ¦¦протокол¦--------------------¦¦последова-¦номер подтверждения ¦¦тельных¦--------------------¦¦пакетов¦ номер размещения ¦¦L====================-¦--г====================¦¦ 0 - 546 байтов ¦¦Уровень 3¦ ¦+---------¦ прозрачных данных ¦¦управление¦ -----------¦¦¦ ¦доп.байт ¦¦L=========¦==========-¦--гTTT======T==========¦¦¦¦резерв¦тип потока¦L+++======¦==========-¦¦¦¦конец сообщения¦¦¦внимани妦посылка подтверждений¦системный пакетРис.2.42.8. Управление потоком SPXУправление потоком является средством, позволяющим уменьшитьколичество повторных передач пакетов. В таких случаях, когда про-исходит тайм-аут без успешного подтверждения, SPX выполняет опти-мальное количество повторов, прежде чем декларирует обрыв соедине-ния. SPX автоматически выбирает оптимальный тайм-аут и значениеколичества повторов, которые наиболее подходят к физическим харак-тетистикам соответствующих сетевых устройств. SPX использует эв-ристический алгоритм тайминга для вычисления оптимального коли-чества повторов, адаптируясь под время задержки пакетов.Протокол SPX предназначен для использования в качестве фунда-мента для всевозможных сложных прикладных систем, включая коммуни-кационные серверы, шлюзы и системы пересылки сообщений рабочихстанций интерсети.2.9. Протокол объявления услугСоздавая открытую архитектуру, фирма Novell открывает разработ-чикам возможность добавлять к существующему набору сетевых услугновые сервисы и услуги. Для облегчения таких разработок среда ин-терсети NetWare включает в себя протокол и механизм, который поз-воляет сетевым сервисным программам объявлять свои услуги по имении типу интерсети NetWare.Серверы, использующие этот протокол, имеют свое имя, тип серви-са и адрес интерсети, та же самая информация существует в маршру-тизаторах NetWare.Данный механизм позволяет рабочей станции издать широковеща-тельный пакет запроса в локальную сеть для получения идентификациивсех серверов любого типа, всех серверов специфического типа илитолько ближайшего сервера конкретного типа услуг. Дополнительнорабочая станция может запросить любой сервер для получения имен иадресов всех серверов данного конкретного типа.Весь этот механизм известен как протокол объявления услуг(SAP). Каждый сервер определенного типа имеет заданное уникальноеимя, которое позволяет клиенту выбирать среди серверов определен-ный тип и определять желаемый сервер по имени, а не по адресу ин-терсети.3. ПРОТОКОЛЫ TCP/IPСоотношение пpотоколов TCP/IP и Модели Откpытых СистемУpовни МОС Пpотоколы TCP/IP------------------ --------T----T-----T-----T---------¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦¦Пpикладной ¦ ¦Telnet ¦FTP ¦TFTP ¦SMTP ¦ DNS ¦¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦+-----------------+ ¦ ¦ ¦ ¦ +---------+¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦¦Пpедставительный ¦ ¦ ¦ ¦ ¦ ¦ Дpугие ¦¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦+-----------------+ +-------+----+---T-+-----+---------+¦ ¦ ¦ ¦ ¦¦Сеансовый ¦ ¦ TCP ¦ UDP ¦¦ ¦ ¦ ¦ ¦¦ ¦ ¦ ¦ ¦¦ ¦ ¦ ¦ ¦¦Тpанспоpтный ¦ ¦ ¦ ¦¦ ¦ ¦ ¦ ¦+-----------------+ +-------T--------+T----------------+¦ ¦ ¦ IP ¦ ICMP ¦ ---------------+¦Сетевой ¦ ¦ L---------- ¦ ARP RARP ¦¦ ¦ ¦ ¦ ¦+-----------------+ +----------T--------+--T-----------+¦ ¦ ¦ ¦ ¦ ¦¦Канальный ¦ ¦ ¦ ¦ ¦¦ ¦ ¦Ethernet ¦Token Ring ¦ Дpугие ¦+-----------------+ ¦ ¦ ¦ ¦¦ ¦ ¦ ¦ ¦ ¦¦Физический ¦ ¦ ¦ ¦ ¦¦ ¦ ¦ ¦ ¦ ¦L------------------ L----------+-----------+------------Рис.3.1.Уровневая структура модели позволяет разработчикам сетей сосре-доточиться на функциях конкретного уровня. Другими словами, нетнеобходимости создавать все механизмы для посылки информации посети. Разработчикам нужно знать сервисы, которые должны быть обес-печены вышележащему уровню, какие сервисы нижележащего уровня дос-тупны, и какие протоколы модели обеспечивают эти сервисы.Сумму уровней протокольного набора часто называют протокольнымстеком (protocol stack) - см. pис .3.2.Таблица иллюстрирует некоторые из наиболее общих протоколовTCP/IP и сервисы, обеспечиваемые ими.Каждый уровень протокольного стека исходного компьютера взаимо-действует с соответствующим уровнем компьютера-адресата как равныйс равным. С точки зрения программного обеспечения или пользователяпередача данных имеет место так, словно равноправныеПpотоколы TCP/IPХост-ЭВМ - источник Хост-ЭВМ - адpесат--------------- --------------¦ Пpикладной ¦ ¦ Пpикладной ¦¦ ¦ ¦ ¦L-------T------- сообщения или L------T-------¦ ---------- потоки -----------¦-------+------ -------+------¦Тpанспоpтный ¦ ¦Тpанспоpтный ¦¦ ¦ ¦ ¦L------T------- дейтагpаммы (UDP) L------T-------¦ --------- или сегменты (TCP) ------¦-------+------ -------+------¦Межсетевой ¦ ¦ Межсетевой ¦¦(Интеpсеть) ¦ ¦ (Интеpсеть)¦L------T------- L------T-------¦ ---------- дейтагpаммы IP ------- ¦-------+------ -------+------¦Сетевой ¦ ¦ Сетевой ¦¦интеpфеис ¦ ¦ интеpфейс ¦L------T------- L------T-------¦ ---------- кадpы сети ------------ ¦¦ ¦¦ ¦¦ ----------------------- ¦L-------+ Сетевая аппаpатуpа +------L-----------------------Рис.3.2.уровни посылают свои пакеты непосредственно друг другу.Например, прикладная программа, посылающая файлы с использова-нием TCP, выполняет следующие операции:- прикладной уровень передает поток байтов транспортному уровнюна исходном компьютере; - транспортный уровень делит поток на сег-менты TCP, добавляя заголовок с последовательным номером сегментаи передает сегмент межсетевому уровню (Internet-IP);- уровень IP создает пакет с порцией данных, содержащий сегментTCP. Уровень добавляет заголовок пакета, содержащий адреса источ-ника и получателя IP. Уровень определяет также физический адрескомпьютера - адресата или промежуточных компьютеров на пути к узлу- адресату и передает пакет уровню логической связи;- уровень звена данных передает пакет IP в порции данных кадрауровня звена данных компьютеру - адресату. Здесь может иметь местонаправление пакета IP промежуточными системами;- на компьютере - адресате уровень звена данных удаляет заголо-вок уровня звена данных и передает пакет IP уровню IP;- уровень IP проверяет заголовок пакета IP. Если контрольнаясумма, содержащаяся в заголовке, не совпадает с контрольной сум-мой, вычесленной уровнем IP, пакет уничтожается;- если контрольные суммы совпадают, уровень IP удаляетНабоp пpотоколов TCP/IP------------------------T---------------------------------¦ Пpотокол ¦ Сеpвис ¦+-----------------------+---------------------------------+¦ ¦ ¦¦Internet Protocol (IP) ¦ Межсетевой пpотокол обеспечивает¦¦ ¦ сеpвис доставки пакетов между ¦¦ ¦ узлами ¦¦ ¦ ¦¦Internet Control ¦ Межсетевой пpотокол упpавления ¦¦Message Protocol (ICMP)¦ сообщениями упpавляет пеpедачей ¦¦ ¦ упpавляющих сообщений и сообще- ¦¦ ¦ ний об ошибках между хост-ЭВМ и ¦¦ ¦ шлюзами ¦¦ ¦ ¦¦Address Resolution ¦ Пpотокол pазpешения адpесов ¦¦Protokol (ARP) ¦ мапиpует межсетевые адpеса в ¦¦ ¦ физические ¦¦ ¦ ¦¦Reverse Address ¦ Обpатный пpотокол pазpешения ¦¦Resolution Protocol ¦ адpесов мапиpует физические ¦¦(RARP) ¦ адpеса в интеpсетевые ¦¦ ¦ ¦¦Transmission Control ¦ Пpотокол упpавления пеpедачей ¦¦Protocol (TCP) ¦ обеспечивает сеpвис надежной ¦¦ ¦ доставки потока между клиен- ¦¦ ¦ тами ¦¦ ¦ ¦¦User Datagram ¦ Пользовательский дейтагpаммный ¦¦Protocol (UDP) ¦ пpотокол обеспечивает ненадеж- ¦¦ ¦ ный сеpвис доставки пакетов без ¦¦ ¦ установления соединения между ¦¦ ¦ клиентами ¦¦ ¦ ¦¦File Transfer ¦ Пpотокол тpанспоpта файлов ¦¦Protocol (FTP) ¦ обеспечивает услуги тpанспоpта ¦¦ ¦ файлов пользовательского уpовня ¦¦ ¦ ¦¦Telnet ¦ Эмуляция теpминала ¦¦ ¦ ¦L-----------------------+----------------------------------заголовок пакета IP и передает сегмент TCP уровню TCP. УровеньTCP проверяет последовательный номер для определения - является лиданный сегмент корректным в последовательности;- уровень TCP подсчитывает контрольную сумму для заголовка TCPи данных. Если вычесленная и принятая в заголовке контрольные сум-мы не совпадают, уровень TCP уничтожает сегмент. Если контрольнаясумма корректна и номер сегмента соответствует последовательности,уровень TCP посылает положительное подтверждение на компьютер -источник;- на компьютере - адресате уровень TCP удаляет заголовок TCP ипередает полученные байта из сегмента прикладной программе;- прикладная программа на компьютере - адресате получает потокбайтов так, словно она была связана непосредственно с прикладнойпрограммой на компьютере - испточнике.3.1. Физические адреса и межсетевые адреса.На уровне звена данных узлы в сети взаимодействуют с другимиузлами сети, используя адреса, специфичные для данной сети. Каждыйузел имееет физический адрес для аппаратуры выхода в сеть. Физи-ческие адреса имеют различные формы в различных сетях. Например,физический адрес в Ethernet является 6-байтным числовым значением,таким как 08-00014-57-69-69. Это значение назначается производите-лем аппаратуры. Сети X.25 используют стандарт X.121 физических ад-ресов длиной в 14 цифр. Сети LocalTalk используют 3байтовые адре-са, состоящие из 2-байтового номера сети и 1-байтового номера уз-ла. В сети LocalTalk номер сети статический, а номер узла назнача-ется динамически при запуске узла.Адрес Межсетевого Протокола (адрес IP) для узла является логи-ческим адресом - он не зависит от аппаратуры или конфигурации сетии имеет одну и туже форму независимо от типа сети. Это 4байтное(32 бита) числовое значение, которое идентифицирует как сеть, таки локальный узел (компьютер или другое устройство) в данной сети.4-байтовый адрес IP обычно представляется десятичными числами(каждый байт), разделяемыми точками, например, 129.47.6.17. Иногдаадреса представляются шестнадцатеричными цифрами.Узлы, использующие протоколы TCP/IP, транслируют адреса назна-чения IP в физические адреса аппаратуры подуровня доступа к пере-дающей среде для того, чтобы посылать пакеты к другим узлам сети.Каждая посылающая прикладная программа посылает свой адрес IP впакете. Принимающая программа может послать ответ источнику, ис-пользуя адрес IP источника из пакета.Поскольку адреса IP не зависят от конкретного типа сети, онимогут использоваться для посылки пакета из сети одного типа в дру-гую сеть. В каждом типе сети программное обеспечение TCP/IP ставитв соответствие физические адреса сети и адреса IP. Если пакет пе-редается в другую сеть, адрес IP получателя транслируется в физи-ческий адрес соответствующей сети.Сетевой адрес может быть определен одним из следующих способов:- если Вы хотите соединить Вашу сеть с Интерсетью DARPA, Выдолжны получить зарегистрированный адрес Интерсети в следующейорганизации: DDN Network Information Center SRI International333 Ravenswood Avenue, Room EJ291 Menlo Park, CA 94025 USA - еслиВаша сеть не является частью Интерсети DARPA, Вы можетевыбрать произвольный сетевой адрес. При этом для всех узлов всети должны быть выполнены следующие требования:- сетевая часть каждого адреса должна соответствовать адресусети, например, все узлы в сети 129.47 должны использовать адресасети 129.47;- адрес IP для каждого узла должен быть уникальным внутри Вашейсети.3.2. Трансляция межсетевых адресов в физическиеКогда пакет IP передается по сети, он прежде всего включается вфизический кадр, используемый в данной сети, например, на рис.3.3.показан пакет IP, включенный в кадр Ethernet. Пакет IP содержитмежсетевой адрес узла, но кадрEthernet должен иметь физический адрес узла, чтобы быть достав-ленным по сети. Следовательно, посылающий узел должен быть в сост-оянии определить какой физический адрес в сети соответствует адре-су IP, содержащемуся в пакете IP.Адрес IP отображается в физический адрес с использованием Про-токола Разрешения Адресов (ARP) на широковещательных сетях, такихкак Ethernet, Token Ring, ARCnet. Когда узел должен послать пакетIP он должен определить какой физический адрес в сети соответству-ет адресу получателя IP, заданному в пакете IP. Для нахождения фи-зического адреса узел посылает широковещательный пакет ARP, содер-жащий адрес IP получателя. После этого пакета ожидается ответ отузла с данным адресом IP получателя. Узел с этим адресом посылаетсвой физический адрес назад запрашивающему узлу.Для быстрой передачи пакетов и уменьшения числа широковеща-тельных запросов, каждый узел поддерживает кеш разрешения адресов.Каждый раз когда узел посылает широковещательный запрос ARP и по-лучает ответ, он создает вход в кеш-памяти разрешения адресов.Вход отображает адрес IP в физический адрес. Когда узел нуждаетсяв посылке следующего пакета IP, он ищет адрес IP в кешпамяти. Еслиданный адрес IP находится, узел использует соответствующий физи-ческий адрес для пакета. Широковещательный запрос IP посылаетсятолько если соответствующий адрес IP не обнаруживается в кеш-памя-ти.Включение дейтагpаммы IP в кадp Ethernet¦дейтаграмма ¦¦ IP ¦г=======T========T========T========T=============T========¦ Пpеам-¦ адрес ¦ адрес ¦ тип ¦ данные ¦контр. ¦¦ була ¦ получа-¦ источ-¦ пакета¦ пакета ¦сумма ¦¦ ¦ теля ¦ ника ¦ ¦ ¦Ethernet¦L=======¦========¦========¦========¦=============¦========-¦ ¦¦------- заголовок кадра-----------¦--- данные---¦ ¦¦ ¦ кадра ¦ ¦¦ ¦¦-------------------- кадр Ethernet-----------------------¦Рис.3.3.3.3. Ненадежный сервис доставки пакетовВ наборе протоколов TCP/IP все пакеты доставляются ненадежнымсервисом доставки пакетов неориентированным на соединение Межсете-вого Протокола. Сервис ненадежен, поскольку доставка пакета не га-рантируется. Сервис не ориентирован на соединение, поскольку всепакеты передаются независимо друг от друга. Приложения TCP/IP ис-пользующеее этот сервис должны заботиться о состоянии достаки,например, ожиданием ответов от узла получателя. Кроме того,маршрутизаторы (routers) в Интерсети могут посылать сообщения обошибках (ICMP) для информирования узлов о проблемах. Термин"маршрутизация" относится к передаче дейтаграммы от одного узла кдругому на той же или другой сети. Термин относится также к путям,которые выбираются для передачи дейтаграммы IP от источника к по-лучателю на базе адреса IP, содержащегося в дейтаграмме. Существу-ет два способа маршрутизации: прямая и непрямая.Прямая маршрутизация имеет место при передаче дейтаграммы врамках одной сети. Узел, посылающий дейтаграмму IP, может прямозапросить другие узлы в сети о физическом адресе, соответствующемадресу IP, включить дейтаграмму IP в физический кадр с данным фи-зическим адресом и послать его непосредственно узлу назначения всети.Непрямая маршрутизация связана спередачей дейтаграммы из однойсети в другую через узел, называемый маршрутизатором. Когда дей-таграмма посылается к узлу другой сети, сетевая часть адреса IPисточника и адреса IP получателя различны. Посылающий узел распоз-нает эту разницу и посылает пакет к маршрутизатору, который соеди-няет исходную сеть с другими сетями.Посылающий узел имеет таблицу адресов IP для одного или большекомпьютеров в сети, которые функционируют в качестве маршрутизато-ров к другим сетям. Узел ищет адрес IP маршрутизатора в своей таб-лице и посылает широковещательный запрос ARP к маршрутизатору дляполучения его физического адреса. Затем пакет, содержащий дейтаг-рамму IP, посылается по физическому адресу маршрутизатора. Когдамаршрутизатор получает дейтаграмму IP, он использует адрес IP вдейтаграмме для посылки получателю аналогичным образом. Если адресIP принадлежит к сети, подключенной непосредственно к маршрутиза-тору, последний посылает дейтаграмму непосредственно узлу назначе-ния. Для всех других адресов сетей маршрутизатор имеет только ад-рес другого маршрутизатора, который может направить пакет к полу-чателю.3.4. Межсетевой Протокол IPМежсетевой протокол определяет форму пакетов и способы под-держки пакетов при передаче и приеме. Форма пакета называется дей-таграммой IP. Дейтаграмма IP аналогична физическому кадру, переда-ваемому по сети. Дейтаграмма имеет секцию заголовка, содержащуюадреса IP отправителя и получателя и секцию данных.Структура дейтаграммы IP¦ Заголовок дейтаграммы IP ¦ Данные дейтаграммы IP ¦¦ ¦ ¦г=============T=============+==============T==============¦ Информация ¦ Адрес ¦ Адрес ¦ Данные ¦¦ заголововка¦ источника IP¦ получателя IP¦ ¦L=============¦=============¦==============¦==============-Рис.3.4.В отличие от кадра сети, имеющего физическую длину, установлен-ную в соответствии с характеристиками физической сети, длина дей-таграммы устанавливается сетевым программным обеспечением. Прог-раммное обеспечение IP на узле создает дейтаграмму, которая поме-щается внутрь кадра сети. Двигаясь к узлу назначения, однако, дей-таграмма может пройти по многим сетям различных типов с различнымидлинами физических кадров. Для поддержки передачи пакета протоколIP задает метод разбиения дейтаграмм на фрагменты на каждом узле,который должен передавать дейтаграммы и соответствующий метод ре-ассемблирования пакетов на узле назначения. Так маршрутизатор,связывающий две сети, будет должен фрагментировать пакеты IP, по-лучаемые из одной сети, если вторая сеть имеет меньший размер фи-зического кадра, чем первая. Будучи однажды фрагментированными,пакеты не реассемблируются до достижения точки назначения.3.5. Сообщения об ошибках и управляющие сообщенияДругой протокол набора TCP/IP это Межсетевой Протокол Управляю-щих Сообщений (ICMP). Пакеты ICMP содержат информацию об авариях всети: нефункционирующих узлах и шлюзах, проблемах с пакетами вшлюзах и т.д. Программное обеспечение IP интерпретирует сообщениеICMP и затем предпринимает соответствующие действия в соответствиис сообщением независимо от прикладной программы. Поскольку сообще-ние ICMP может передаваться через несколько сетей для достиженияназначения, оно помещается в порцию данных дейтаграммы IP.3.6. Протоколы транспортного уровня: UDP и TCPДва протокола составляют транспортный уровень набора TCP/IP: мПользовательский Дейтаграммный Протокол (UDP) и Протокол Управле-ния Передачей (TCP). UDP обеспечивает ненадежный сервис доставкибез соединений для посылки и получений сообщений. TCP добавляетнадежные потоковые сервисы доставки над ненадежным сервисом доста-ки пакетов без соединений IP.В наборе TCP/IP UDP позволяет приложениям обмениваться индиви-дуальными пакетами сообщений через сеть. Протокол UDP определяетнабор назначений как протокольные порты. При этом определяются дватипа протокольных портов: хорошо известное назначение портов и ди-намически связанные порты. В первом случае,TCP/IP резервирует соответствующие номера портов для соответст-вующих приложений. Порты сномерами от 1 до 255 являются хорошо из-вестными номерами портов и назначаются соответствующим широко из-вестным приложениям. В случае динамически связанных портов прило-жение, запрашивающее сервисы у процесса, должны прежде всего зап-росить узел для идентификации порта, который использует процесс.Он может в дальнейшем направлять дейтаграммы UDP этому порту.Дейтаграмма UDP включается в одну или более дейтаграмм IP, ко-торые в свою очередь включаются в кадр сети, например, Ethernetкак показано на рис. 3.5. В этом примере адрес IPВключение дейтаграммы UDP¦ Заголовок ¦ Данные ¦¦ UDP ¦ UDP ¦г======T=====T=+==========¦Порт ¦Порт ¦ ¦ Данные ¦¦источн¦назн ¦ ¦ UDP ¦L======¦=====¦=¦==========-¦ ¦¦--- Дейтаграмма UDP ---- ¦¦г=========+=========================¦Заголовок¦ ¦¦ IP ¦ ¦L=========¦=========================-¦ ¦¦--------- Дейтаграмма IP ----------¦¦ ¦г==========+===================================+==========¦Заголовок ¦ ¦ Контр. ¦¦кадра ¦ ¦ сумма ¦L==========¦===================================¦==========-¦ ¦¦------------------- Кадр Ethernet -----------------------¦¦ ¦Рис.3.5.направляет дейтаграмму IP к соответствующему узлу, на которомпрограммное обеспечение IP извлекает дейтаграмму UDP и доставляетее программному обеспечению уровня UDP. Программное обеспечениеуровня UDP доставляет данные UDP и управляющую информацию к задан-ному протокольному порту назначения. Процесс на этом порту ис-пользует данные из дейтаграммы UDP. Дейтаграмма UDP также содержитпротокольный порт источника, позволяющий процессу назначения отве-тить корректно.Для приложений, которые нуждаются в посылке значительныхобъемов данных, ненадежная передача может создать трудности. Прик-ладные программисты будут должны разрабатывать дорогие процедуры имодули обеспечения надежной передачи. Набор протоколов TCP/IP об-ходит эти проблемы через использование Протокола Управления Пере-дачей (TCP) - надежного протокола с потоковой доставкой. Он уста-навливает виртуальный канал между двумяприложениями и посылает поток байтов получателю в том же поряд-ке, в котором он покидает отправителя. Перед началом передачи при-ложения на обоих концах получают порты TCP от своих операционныхсистем. Эти порты аналогичны тем, что использует протокол UDP.Приложение, начинающее передачу, известно как активная сторона,обычно получает порт динамически. Приложение, товечающее на запроспередачи, известное как пассивная сторона, обычно использует широ-ко известный порт TCP на пассивной стороне. Подобно дейтаграммамUDP, сегменты TCPвключаются в дейтаграммы IP. TCP буферизует потокожиданием достаточного количества данных для заполнения большойдейтаграммы перед ее посылкой. Поток неструктурирован, что означа-ет, что посылающая и принимающая стороны (приложения) до передачидолжны установить соглашения относительно содержимого потока. TCPиспользует полнодуплексную передачу.Протокол TCP присваивает каждому сегменту последовательный но-мер. На приемном конце виртуального канала приложение проверяеетпоследовательность намеров для определения того, все ли сегментыполучены и обработаны в порядке последовательных номеров. Когдаприемный конец получает следующий сегмент последовательности, онпосылает квитанцию - подтверждение узлу - источнику. Когда узел -источник получает подтверждение, он индицирует приложению то, чтосегмент успешно передан. Если узел - источник в течение определен-ного таймаута не получает подтверждения, он повторно передает со-ответствующий сегмент. Эта схема, называемая "положительноеподтверждение с повторной передачей", обеспечивает надежность пе-редачи.3.7. Транспортная система TCP/IP в NetWare версии 3.11Транспортная система TCP/IP обеспечивает возможности подключе-ния к сетям с этими протоколами для сетей фирмы Novell. На файло-вом сервере TCP/IP включает в себя набор NLM для поддержки возмож-ностей маршрутизации IP и построения интерсетей, поддержки функци-онирования приложений, таких как NetWare NFS, возможность проклад-ки туннелей IPX через интерсети IP. Дополнительно TCP/IP обеспечи-вает транспортный интерфейс, используемый как NFS, так и другимиприложениями, написанными для интерфейсов типа сокет 4.3BSD UNIXили AT&T Streams Transport Layer Interface (TLI). NetWare v3.11TCP/IP включает следующие загружаемые модули и файлы базы данных:NLM NetWare TCP/IP (TCPIP.NLM)The Simple Network Management Protocol NLM(SNMP.NLM)The SNMP event logger NLM (SNMPLOG.NLM)The TCP/IP Console NLM (TCPCON.NLM)The IP configuration NLM (IPCONFIG.NLM)The IPX/IP Tunnel module (IPTUNNEL.LAN)Sample Internet database files (GATEWAYS, HOSTS,NETWORKS, PROTOCOL, and SERVICES)Архитектура TCP/IP приведена на рис.3.6.Архитектура TCP/IP в NetWare-----------------------------------------------------------¦ ¦+----------------------------------------------------------+¦------------ ---------- ----------- --------------¦¦¦ Другие ¦ ¦ TCPCON ¦ ¦ SNMPLOG ¦ ¦ Другие ¦¦¦¦ приложения¦ ¦ ¦ ¦ ¦ ¦ приложения ¦¦¦¦ TLI ¦ ¦ ¦ ¦ ¦ ¦ для сокетов ¦¦¦L-----T------ L----T----- L-----T----- L------T-------¦¦ ¦ L--------------+--------------+ ¦¦ ¦ ¦ ¦¦ ¦ г============ ¦ ¦¦ \¦/ ¦ ¦ \¦/ ¦¦-------------- ¦ ¦ -------+------¦¦¦ Интерфейс ¦ ¦ NetWare ¦ ¦ Сокеты ¦¦¦¦ транспортн ¦ ¦ NFS ¦ ¦ BSD ¦¦¦¦ уровня TLI ¦ ¦ ¦ ¦ ¦¦¦L-----T-------- L======T=====- L------T-------¦¦ ¦ ¦ ¦ ¦¦ \¦/ \¦/ \¦/ ¦¦------+----------------------+--------------------+------¦¦¦ Транспортная система TCP/IP NetWare ¦¦¦L--------------------------T------------------------------¦¦ ¦ ¦¦ ----------------+---------------- ¦¦ ¦Открытый интерфейс ODI ¦ ¦¦ L----T----------T----------T------ ¦¦ ----------- \¦/ L----------- ¦¦ -----+---- -------+------ ------+---- ¦¦ ¦ Драйвер ¦ ¦ Драйвер ¦ ¦ Драйвер ¦ ¦¦ ¦ Ethernet¦ ¦ Token Ring ¦ ¦ ARCnet ¦ ¦¦ L----T----- L------T------- L-----T----- ¦¦ \¦/ \¦/ \¦/ ¦¦------+-------- --------+--------- -------+----- ¦¦¦ Адаптер ¦ ¦ Адаптер ¦ ¦ Адаптер ¦ ¦¦¦ ¦ ¦ ¦ ¦ ¦ ¦¦¦ Ethernet ¦ ¦ Token Ring ¦ ¦ Arcnet ¦ ¦¦L--------------- L------------------ L------------- ¦¦ ¦L-----------------------------------------------------------Рис.3.6.Программное обеспечение TCP/IP позволяет реализовать различныеконфигурации сетей IP IPX.Сеть IP (серверы и клиенты UNIX) могут взаимодействовать междусобой, используя протокол TCP/IP, в одной физической сети с серве-рами и клиентами NetWare. Пример такой сети Ethernet с адресом се-ти IP 129.1.0.0 и с адресом сети IPX 84404556 приведен на рисунке3.7.Совместная работа TCP/IP и SPX/IPXг================¦ NetWare Server ¦ ---------------¦ ¦ ¦ UNIX Server ¦L=========T======- L-------T-------129.1.0.3 ¦ ¦ 129.1.0.1¦ ¦¦IPX Net=84404556 ¦ IP Net=129.1.0.0------T---+------------T----+------------T-------------¦ ¦ ¦¦ ¦ ¦------+-------- -----+--------- ¦ 129.1.0.2¦NetWare Client¦ ¦NetWare Client¦ -----+-----------¦ ¦ ¦ ¦ ¦UNIX Workstation¦L--------------- L--------------- L-----------------Рис.3.7.Сети IP и IPX могут подключаться к одному серверу NetWare. Кли-енты UNIX могут использовать файловое пространство сервера с по-мощью Netware NFS (рис.3.8.).Подключение сетей TCP/IP и SPX/IPX к серверу--------------------- --------------¦Рабочая станция UNIX¦ ¦ Сервер UNIX ¦L---------T----------- L-----T--------¦129.1.0.2 ¦129.1.0.1¦ ¦¦ ¦Сеть IP=129.1.0.0-----------+----------------T------+-------------------129.1.03 ¦г========¦=========¦ Сервер NetWare ¦L=========T========-¦Сеть IPX = 84404556 ¦ Сеть Token Ring------------------------+-----------------------L------T------------------------------------T----¦ ¦-------+------- -------+-------¦Клиент NetWare¦ ¦Клиент NetWare¦L--------------- L---------------Рис.3.8.Есть возможность маршрутизации пакетов IP через сервер NetWare.На рис.3.9. TCP/IP в сервере Netware 1 обеспечивают маршрутизациюпакетов IP, давая возможность клиентам UNIX из сети IP Ethernetработать с сервером Netware 2.Маршрутизация пакетов IP через сервер NetWare--------------------- --------------¦Рабочая станция UNIX¦ ¦ Сервер UNIX ¦L---------T----------- L-----T--------¦129.1.0.2 ¦129.1.0.1¦ ¦¦ ¦Сеть IP=129.1.0.0-----------+----------------T------+-------------------129.1.03 ¦г========¦=========¦ Сервер NetWare 1¦L=========T========-¦Сеть IPX = 84404556 ¦ Сеть Token Ring------------------------+-----------------------L----T------------------T-----------------T------¦ ¦ ¦-------+------- г=======¦======== -------+-------¦Клиент NetWare¦ ¦Сервер NetWare 2¦ ¦Клиент NetWare¦L--------------- L================- L---------------Рис.3.9.Включив в состав сети IP, изображенной на рис.3.10.-, маршрути-затор IP можно обеспечить выход в глобальную интерсеть IP.Средства прокладки туннелей IP обеспечивают прозрачное взаимо-действие сетей IPX через интерсеть IP. Туннель IP представляетстандартный интерфейс драйвера локальной сети для системы NetWare.Сама интерсеть IP является средой передачи. В этом смысле адрес IPвыполняет в среде IP ту же функцию, что физический адрес в физи-ческой среде. Пример использования туннеля IP для взаимодействиясетей IPX через интерсеть IP приведен на рис.3.10.Взаимодействие сетей NetWare через туннель IPТуннель IP г============¦ ¦ Сеть IPX ¦¦ L======T=====-¦ ¦----------------- ¦ г============ ----------+------¦ Сервер NetWare +-+-¦Интерсеть IP¦---+ Сервер NetWare ¦¦ +---¦ ¦-T-+ ¦L--------T-------- L============- ¦ L-----------------¦ ¦¦ ¦г========¦======= Туннель IP¦ Сеть IPX ¦L================-Рис.3.10.4. ОБМЕН СООБЩЕНИЯМИ В СЕТИ.Две программы, работающие на разных узлах сети, могут обмени-ваться данными двумя способами: пересылка пакетов через низкоуров-невый драйвер сети и пересылка сообщений через общий файл-сервер.Пример программы, посылающей сообщение на консоль сервера :Uses Dos;var k : integer;sendString : string;Procedure SendToCon(Message : string);varreg : registers;s : array (0..64) of byte;i : integer;begins(0) := 0;s(1) := 4;s(2) := $09;s(3) := length(Message);for i := 1 to Length(Message) dos(i+3) := ord(Message(i));reg.ah := $0E1;reg.bx := reg.ds;reg.ds := seg(s);reg.si := ofs(s);intr($21,reg);reg.ds := reg.bx;end;beginIf ParamCount = 0 thenbeginWriteln('Send message to console utility by S.Perevoznik, 1993');Writeln('Usage : ssend ');halt;end;for k := 1 to paramcount dobeginSendString := SendString + Paramstr(k) + ' ';end;SendToCon(sendString);Writeln('Message send to console ...');end.Для передачи сообщения конкретному пользователю можно использоватьследующие функции :{$F+,O+}Unit UICNet;InterfaceUses Dos;Function GetUserName(ConnectionNumber : byte;Var ObjectFree : boolean) : string;Function LocalDisk : boolean;Procedure SendBroadcastMessage(Message:string;ConnectionNumber:byte);ImplementationFunction GetUserName(ConnectionNumber : byte;Var ObjectFree : boolean) : string;varWordPtr:^Word;r : registers;SendPacket : array(0..4) of byte;ReplyPacket : array(0..64) of byte;UserName : string;ObjectType : word;function GetWord(P: pointer): word;varWordPtr :^word;beginWordPtr := P;GetWord := swap(WordPtr^);end;beginSendPacket(2) := $16;SendPacket(3) := ConnectionNumber;WordPtr := addr(SendPacket);WordPtr^:=2;WordPtr := addr(SendPacket);WordPtr^ := 62;r.ah := $e3;r.ds := seg(SendPacket);r.si := ofs(SendPacket);r.es := seg(ReplyPacket);r.di := ofs(ReplyPacket);intr($21,r);if r.al = 0thenbeginObjectType := GetWord(addr(ReplyPacket(6)));if ObjectType = 0 then ObjectFree := trueelseObjectFree := false;move(ReplyPacket(8),UserName(1),48);UserName(0) := chr(48);GetUserName := Username;end;end;Function LocalDisk : boolean;var r : registers;beginr.ah := $19;intr($21,r);r.dl := r.al+1;r.ah := $e9;r.al := 0;r.dh := 0;intr($21,r);if r.ah = 128 then localdisk := trueelse localdisk := false;end;Procedure SendBroadcastMessage(Message:string; ConnectionNumber:byte);varr : registers;WordPtr : ^word;SendPacket : array (0..160) of byte;ReplyPacket : array (0..103) of byte;beginSendPacket(2) := 0;SendPacket(3) := 1;SendPacket(4) := ConnectionNumber;SendPacket(5) := length(Message);move(Message(1),SendPacket(6),length(Message));WordPtr := addr(SendPacket);WordPtr^ := Length(Message) + 4;r.ah := $e1;r.ds := seg(SendPacket);r.si := ofs(SendPacket);r.es := seg(ReplyPacket);r.di := ofs(ReplyPacket);intr($21,r);end;end.Следующая программа демонстрирует возможность получения списка поль-зователей, подключенных к сети:uses Dos;function GetWord(P: pointer): word;varWordPtr :^word;beginWordPtr := P;GetWord := swap(WordPtr^);end;Function GetLong(P:Pointer): longint;type long= recordcase integer of1:(Long1: Longint);2:(Word1,Word2:word);end;var LongPtr :^Long;L : long;beginLongPtr := P;L.Word1 := swap(LongPtr^.Word2);L.Word2 := swap(LongPtr^.Word1);GetLong:= L.Long1;end;Function GetConnectionInformation(ConnectionNumber:byte;Var ObjectName : string; var ObjectType : word;var ObjectID : longint; var LoginTime : string): byte;varWordPtr:^Word;r:registers;SendPacket : array(0..4) of byte;ReplyPacket : array(0..64) of byte;beginSendPacket(2) := $16;SendPacket(3) := ConnectionNumber;WordPtr := addr(SendPacket);WordPtr^:=2;WordPtr := addr(SendPacket);WordPtr^ := 62;r.ah := $e3;r.ds := seg(SendPacket);r.si := ofs(SendPacket);r.es := seg(ReplyPacket);r.di := ofs(ReplyPacket);intr($21,r);if r.al = 0thenbeginObjectID := GetLong(addr(ReplyPacket(2)));ObjectType := GetWord(addr(ReplyPacket(6)));move(ReplyPacket(8),ObjectName(1),48);ObjectName(0) := chr(48);move(ReplyPacket(56),LoginTime(1),7);LoginTime(0) := chr(7);end;GetConnectionInformation := r.al;end;varObjectName,LoginTime : string;ObjectType : word;ObjectID : longint;ConnectionNumber, CCode : byte;beginConnectionNumber := 1;CCode := GetConnectionInformation(ConnectionNumber,ObjectName,ObjectType,ObjectID,LoginTime);while (CCode 0thenwriteln('Cod ',CCode,ConnectionNumber)else if ObjectType <>0 then beginWriteln(ConnectionNumber,' ',ObjectType,' ',ObjectID);Writeln(ObjectName);end;inc(ConnectionNumber);CCode := GetConnectionInformation(ConnectionNumber,ObjectName,ObjectType,ObjectID,LoginTime);end;end.5. РАБОТА С ФАЙЛАМИ В ЛВС.Ниже приводятся тексты процедур, используемых при работе в ЛВСдля обслуживания файловой системы:; Данная библиотека процедур разработана для использования в прог-; раммах, написанных на Турбо-Паскале версии 4.0 и выше.; Joe R. Doupnik and Sergey V. Perevoznik, 1988 - 1993lprog equ 1 ; 0 for small memory, 1 for large memory model; Modify lprog to match the memory modelif lprogx equ 6 ; prologue overhead for large memory modelelsex equ 4 ; ditto, small memory modelendifbegin macro name ; begin a function, near or farpublic nameif lprogname proc farelsename proc nearendifendm; define Borland Pascal segments; use neither Group nor Classdata segment word publicdata endscseg segment byte publicassume cs:cseg, ds:data, es:nothing;--------------------------------; Extended Open a File func(61) (3DH);; var; Mode, Handle, RetCode : Integer;; Filename : String(n);;; RetCode := xtndopn(Mode, Handle, Filename);;begin xtndopnpush bpmov bp,sppush dslds si,(bp+x+8) ; put the mode in axmov ax,(si)mov ah,03Dh ; put the function in ahlds dx,(bp+x) ; ptr to ASCIIZ stringinc dx ; add 1 to get to the beginning of the stringint 21hjc xtndopx ; carry set means failurelds di,(bp+x+4) ; put the handle into the variablemov (di),ax ; if there is no error andxor ax,ax ; return a 0xtndopx:pop dspop bpret 14xtndopn endp;--------------------------------; Get or Set File Attributes(handle) func(67) (43H);; var; Func, Attribute, ErrCode : Integer;; Filename : String(n);;;ErrCode := setattr(Func, Attribute, Filename);;begin setattrpush bpmov bp,sppush dslds si,(bp+x+8) ; put the subfunction in axmov ax,(si)mov ah,043h ; put the function in ahlds dx,(bp+x) ; ptr to var desc block for ASCIIZ stringinc dx ; add 1 to get the address of the stringlds si,(bp+x+4) ; put the attribute to set in cxmov cx,(si)int 21hjc setattx ; carry set means failurelds di,(bp+x+4) ; put the returned attributes in themov (di),cx ; variable if there is no errorxor ax,ax ; and return zerosetattx:mov ah,0pop dspop bpret 14setattr endp;--------------------------------; End of Job Flag Status func(187) (BBH);; var; Flag : Integer;;;ErrCode := eojstat(Flag);;begin eojstatpush bpmov bp,sppush dslds si,(bp+x) ; put the flag in axmov ax,(si)mov ah,0BBh ; put the function in ahint 21hmov ah,0lds di,(bp+x)mov (di),axpop dspop bpret 6eojstat endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Physical Record Lock: Log Record BCH;; var; ErrCode,FileHandle,HiByteOffset,LoByteOffset : Integer; HiLockLen,LoLockLen,Flags,TimeOut : Integer;;ErrCode := PRLH_Log(FileHandle,HiByteOffset,LoByteOffset,HiLockLen,; LoLockLen,Flags,TimeOut);;begin PRLH_Logpush bpmov bp,sppush dslds si,(bp+x+24) ; FileHandlemov bx,(si)lds si,(bp+x+20) ; ByteOffsetmov cx,(si)lds si,(bp+x+16)mov dx,(si)lds si,(bp+x+4) ; AL = Log Flagsmov ax,(si)lds si,(bp+x+12) ; LockLenmov si,(si)lds di,(bp+x+8)mov di,(di)lds bp,(bp+x) ; time outmov bp,(bp)mov ah,0BCHint 21Hmov ah,0 ; clear the high byte of the returnpop dspop bpret 30PRLH_Log endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Physical Record Lock: Release Rec BDH;; var; FileHandle,HiByteOffset,LoByteOffset,ErrCode,; HiWordLen,LoWordLen : integer;; ErrCode := PRLH_Rel(FileHandle,HiByteOffset,LoByteOffset,HiWordLen,; LoWordLen:integer);begin PRLH_Relpush bpmov bp,sppush dslds si,(bp+x+16) ; FileHandlemov bx,(si)lds si,(bp+x+12) ; HiByteOffsetmov cx,(si)lds si,(bp+x+8) ; LoBytemov dx,(si)lds si,(bp+x+4) ; HiWordLenmov si,(si)lds di,(bp+x) ; LoWordLenmov di,(di)mov ah,0BDHint 21Hmov ah,0pop dspop bpret 22PRLH_Rel endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Physical Record Lock: Release Clr BEH;; var; FileHandle,HiByteOffset,LoByteOffset,ErrCode,; HiWordLen,LoWordLen : integer;; ErrCode := PRLH_Rel(FileHandle,HiByteOffset,LoByteOffset,HiWordLen,; LoWordLen:integer);;begin PRLH_Clrpush bpmov bp,sppush dslds si,(bp+x+16) ; FileHandlemov bx,(si)lds si,(bp+x+12) ; ByteOffsetmov cx,(si)lds si,(bp+x+8)mov dx,(si)lds si,(bp+x+4) ; HiWordLenmov si,(si)lds di,(bp+x) ; LoWordLenmov di,(di)mov ah,0BEHint 21Hmov ah,0pop dspop bpret 22PRLH_Clr endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Physical Record Lock: Log Rec FCB BFH;; var; ErrCode,fcb,HiByteOffset,LoByteOffset : Integer;; HiLockLen,LoLockLen,Flags,TimeOut : Integer;;; ErrCode := PRLF_Log(fcb,HiByteOffset,LoByteOffset,HiLockLen,LoLockLen,Flags,TimeOut);;begin PRLF_Logpush bpmov bp,sppush dslds si,(bp+x+24) ; FCBmov dx,(si)lds si,(bp+x+20) ; ByteOffsetmov bx,(si)lds si,(bp+x+16)mov cx,(si)lds si,(bp+x+4) ; AL = Log Flagsmov ax,(si)lds si,(bp+x+8) ; low lock lengthmov di,(si)lds si,(bp+x+12) ; hi lock lengthmov si,(si)mov bp,(bp+x) ; timeout valuemov bp,(bp)mov ah,0BFHint 21Hmov ah,0pop dspop bpret 28PRLF_Log endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Physical Record Lock: Rel Rec FCB C0H;; var; ErrCode,fcb,HiByteOffset,LoByteOffset : Integer;;; ErrCode := PRLF_Rel(fcb,HiByteOffset,LoByteOffset);;begin PRLF_Relpush bpmov bp,sppush dslds dx,(bp+x+8) ; FCBlds si,(bp+x+4) ; ByteOffsetmov bx,(si)lds si,(bp+x)mov cx,(si)mov ah,0C0Hint 21Hmov ah,0pop dspop bpret 12PRLF_Rel endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Physical Record Lock: Clr Rec FCB C1H;; var; ErrCode,fcb,HiByteOffset,LoByteOffset : Integer;;; ErrCode := PRLF_clr(fcb,HiByteOffset,LoByteOffset);;begin PRLF_Clrpush bpmov bp,sppush dslds dx,(bp+x+8) ; FCBlds si,(bp+x+4) ; ByteOffsetmov bx,(si)lds si,(bp+x)mov cx,(si)mov ah,0C0Hint 21Hmov ah,0pop dspop bpret 12PRLF_Clr endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lock Record Set C2H;; var; ErrCode, Flags, TimeOut : Integer;;; ErrCode := PRLS_Lck(Flags,TimeOut);;begin PRLS_Lckpush bpmov bp,sppush dslds si,(bp+x+4) ; AL = Lock flag bitsmov ax,(si)lds si,(bp+x) ; TimeOut Valuemov bp,(si)mov ah,0C2hint 21hmov ah,0pop dspop bpret 10PRLS_Lck endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Release Record Set C3H;; var; ErrCode : Integer;;; ErrCode := PRLS_Rel;;begin PRLS_Relmov ah,0C3hint 21hmov ah,0retPRLS_Rel endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Clear Record Set C4H;; var; ErrCode : Integer;;; errcode := PRLS_Clr;;begin PRLS_Clrmov ah,0C4hint 21hmov ah,0retPRLS_Clr endp;--------------------------------; Semaphores func(197) (C5H) subfunction 00h;; var; RetCode,SemaValu,HiHandle,LoHandle,OpenCnt : Integer;; Sema4 : String(n);;; RetCode := OpenSem(Sema4,SemaValu,HiHandle,LoHandle,OpenCnt);;begin OpenSempush bpmov bp,sppush dslds dx,(bp+x+16) ; ptr to Semaphore string; inc dx ; add 1 to get the address of the stringlds si,(bp+x+12) ; set semaphore valuemov cx,(si)mov ax,0C500h ; set the functionint 21hmov bh,00hlds di,(bp+x) ; return the open countmov (di),bxlds di,(bp+x+4) ; return low handlemov (di),cxlds di,(bp+x+8) ; return high handlemov (di),dxmov ah,00hpop dspop bpret 22OpenSem endp;--------------------------------; Semaphores func(197) (C5H) subfunction 01h;; var; RetCode,HiHandle,LoHandle,SemaValu,OpenCnt : Integer;;; RetCode := ExamSem(HiHandle,LoHandle,SemaValu,OpenCnt);;begin ExamSempush bpmov bp,sppush dslds si,(bp+x+12) ; hi handlemov dx,(si)lds si,(bp+x+8) ; lo handlemov cx,(si)mov ax,0C501h ; set functionint 21hlds di,(bp+x+4) ; return semaphore valuemov (di),cxmov dh,00hlds di,(bp+x)mov (di),dx ; return open countmov ah,00hpop dspop bpret 16ExamSem endp;--------------------------------; Semaphores func(197) (C5H) subfunction 02h;; var; RetCode,HiHandle,LoHandle,TimeOut : Integer;;; RetCode := WaitSem(HiHandle,LoHandle,TimeOut);;begin WaitSempush bpmov bp,sppush dslds si,(bp+x+8) ; hi handlemov dx,(si)lds si,(bp+x+4) ; lo handlemov cx,(si)lds si,(bp+x)mov bp,(si) ; set time outmov ax,0C502h ; set functionint 21hmov ah,00hpop dspop bpret 12WaitSem endp;--------------------------------; Semaphores func(197) (C5H) subfunction 03h;; var; RetCode,HiHandle,LoHandle : Integer;;; RetCode := SigSem(HiHandle,LoHandle);;begin SigSempush bpmov bp,sppush dslds si,(bp+x+4) ; hi handlemov dx,(si)lds si,(bp+x) ; lo handlemov cx,(si)mov ax,0C503h ; set functionint 21hmov ah,00hpop dspop bpret 8SigSem endp;--------------------------------; Semaphores func(197) (C5H) subfunction 04h;; var; RetCode,HiHandle,LoHandle : Integer;;; RetCode := ClosSem(HiHandle,LoHandle);;begin ClosSempush bpmov bp,sppush dslds si,(bp+x+4) ; hi handlemov dx,(si)lds si,(bp+x) ; lo handlemov cx,(si)mov ax,0C504h ; set functionint 21hmov ah,00hpop dspop bpret 8ClosSem endp;--------------------------------; Get or Set Lock Mode func(198) (C6H);; var; Mode,Func : Integer;;; Mode := setlck(Func);;begin setlckpush bpmov bp,sppush dslds si,(bp+x)mov ax,(si) ; set the subfunctionmov ah,0C6h ; set the functionint 21hmov ah,0pop dspop bpret 4setlck endp;--------------------------------; Transactional Backout func(199) (C7H);; var; RetCode, Func : Integer;;; RetCode := BakOuts(Func);;begin BakOutspush bpmov bp,sppush dslds si,(bp+x) ; set the subfunctionmov ax,(si)mov ah,0C7h ; set the functionint 21hmov ah,0pop dspop bpret 4BakOuts endp;--------------------------------; Begin transaction func(200) (C8H);; var; RetCode,Mode : Integer;;; RetCode := btrans(Mode);;begin btransmov ah,0C8hcall arg1tret 4btrans endp;--------------------------------; End Transaction func(201) (C9H);; var; RetCode : Integer;;; RetCode := etrans;;begin etransmov ah,0C9Hint 021hmov ah,00hretetrans endp;--------------------------------; Exc.log File (202) (CA);; var; RetCode, FcbAddr : Integer;;; RetCode := exclog(FcbAddr);;begin exclogmov ah,0CAHcall arg1fret 4exclog endp;--------------------------------; Exc Lock Set func(203) (CBH);; var; RetCode, Mode : Integer;;; RetCode := exclcks(Mode);;begin exclcksmov ah,0CBHcall arg1ret 4exclcks endp;--------------------------------; Exclusive file unlock (204) (CC);; var; RetCode, FcbAddr : Integer;;; RetCode := exculkf(FcbAddr);;begin exculkfmov ah,0CCHcall arg1fret 4exculkf endp;--------------------------------; Exclusive Unlock Set (205)(CD);; var; RetCode : Integer;;; RetCode := exculks;;begin exculksmov ah,0CDHint 21hmov ah,00hretexculks endp;--------------------------------; Exc Clear file func(206) (CEH);; var; RetCode, FcbAddr : Integer;;; RetCode := excclrf(FcbAddr);;begin excclrfmov ah,0CEHcall arg1fret 4excclrf endp;--------------------------------; Exc Clear Set func(207) (CFH);; var; RetCode : Integer;;; RetCode := excclrs;;begin excclrsmov ah,0CFHint 21hmov ah,00hretexcclrs endp;--------------------------------; Log Record(s) func(208) (D0H);; var; RetCode, Flag, Timeout : Integer ;; RecStr : String(n);;; RetCode := reclog(RecStr,Flag,Timeout);;begin reclogpush bpmov bp,sppush dslds si,(bp+x+4) ; load flagsmov ax,(si)lds si,(bp+x) ; get timeoutmov si,(si)lds dx,(bp+x+8) ; get ptr to string; inc dxmov bp,si ; move timeout to BPmov ah,0D0hint 21hmov ah,0pop dspop bpret 14reclog endp;--------------------------------; Record Lock func(209) (D1H);; var; RetCode, Mode : Integer;;; RetCode := reclck(Mode);;begin reclckpush bpmov bp,sppush dslds si,(bp+x)mov bp,(si)mov ah,0D1hint 21hmov ah,0pop dspop bpret 6reclck endp;--------------------------------; Record Unlock func(210) (D2H);; var; RetCode : Integer;; Semaphore : String(n);;; RetCode := reculk(Semaphore);;begin reculkmov ah,0D2Hcall arg1aret 4reculk endp;--------------------------------; Unlock Record Set func(211) (D3H);; var; RetCode : Integer;;; RetCode := reculks;;begin reculksmov ah,0D3Hint 21hmov ah,00hretreculks endp;--------------------------------; Record Clear func(212) (D4H);; var; RetCode : Integer;; Semaphore : String(n);;; RetCode := recclr(Semaphore);;begin recclrmov ah,0D4Hcall arg1aret 4recclr endp;--------------------------------; Clear record set func(213) (D5H);; var; RetCode : Integer;;; RetCode := recclrs;;begin recclrsmov ah,0D5Hint 21hmov ah,00hret 4recclrs endp;--------------------------------; End of Job func(214) (D6H);; var; RetCode : Integer;;; RetCode := eoj;;begin eojmov ah,0D6Hint 21hmov ah,00hret 4eoj endp;--------------------------------; Logout System func(215) (D7H);; var; RetCode : Integer;;; RetCode := sysout;;begin sysoutmov ah,0D7Hint 21hmov ah,00hret 4sysout endp;--------------------------------; Vol Statistics func(218) (DAH);; var; RetCode,volume : Integer;; reply : String(n);;; RetCode := volstat(volume, reply);begin volstatmov ah,0DAhpush bpmov bp,sppush dspush eslds si,(bp+x+4) ; addr for the volume numbermov dx,(si) ; get the volume numberles di,(bp+x) ; ptr to reply bufferinc di ; add 1 to get the address of the stringint 21hmov ah,00hpop espop dspop bpret 8volstat endp;--------------------------------; Local Disks func(219) (DBH);; var; NumDisks : Integer;;; NumDisks := locdrv;;begin locdrvmov ah,0DBHint 21hmov ah,00hretlocdrv endp;--------------------------------; WorkStation ID func(220) (DCH);; note: This routine returns the station number as an integer.; It can also be returned in ASCII with this call.;; var; StationNum : Integer;;; StationNum := wsid;;begin wsidmov ah,0DCHint 21hmov ah,00hretwsid endp;--------------------------------; Set Error mode func(221) (DDH);; var; mode : Integer;;; errmode(mode);;begin errmodemov ah,0DDHcall arg1ret 4errmode endp;--------------------------------; Broadcast Mode func(222) (DEH);; var; mode : Integer;;; bcsmode(mode);;begin bcsmodemov ah,0DEHcall arg1ret 4bcsmode endp;--------------------------------; Modify LST Device func(223) (DFH);; var; RetCode, Mode : Integer;;; RetCode := ctlspl(Mode);;begin ctlsplmov ah,0DFhcall arg1ret 4ctlspl endp;--------------------------------; Spool Request func(224) (E0H);; var; ErrCode : Integer;; RequestBlock, Reply : String(n);;; ErrCode := splreq(RequestBlock, Reply);;begin splreqmov ah,0E0hcall req_repret 8splreq endp;--------------------------------; Pipe Request func(225) (E1H);; var; ErrCode : Integer;; RequestBlock, Reply : String(n);;; ErrCode := pipreq(RequestBlock, Reply);;begin pipreqmov ah,0E1hcall req_repret 8pipreq endp;--------------------------------; Directory Path func(226) (E2H);; var; ErrCode : Integer;; RequestBlock, Reply : String(n);;; ErrCode := dpath(RequestBlock, Reply);;begin dpathmov ah,0E2hcall req_repret 8dpath endp;--------------------------------; Login system func(227) (E3H);; var; ErrCode : Integer;; RequestBlock, Reply : String(n);;; ErrCode := syslog(RequestBlock, Reply);;begin syslogmov ah,0E3hcall req_repret 8syslog endp;--------------------------------; Set File Attribute func(228) (E4H);; var; RetCode, FcbAddr, Attribute : Integer;;; RetCode := fattr(FcbAddr, Attribute);;begin fattrpush bpmov bp,sppush dslds si,(bp+x)mov cx,(si) ; cx = attributelds dx,(bp+x+4) ; dx = address of fcbmov ah,0E4hint 21hmov ah,0pop dspop bpretfattr endp;--------------------------------; Update file size func(229) (E5H);; var; ErrCode,FcbAddr : Integer;;; ErrCode := updfcb(FcbAddr);;begin updfcbmov ah,0E5Hcall arg1fret 4updfcb endp;--------------------------------; Copy File to File func(230) (E6H);; var; RetCode,FcbSource,FcbDest : Integer;; CountLow, CountHigh : Integer;;; RetCode := cpyfile(FcbSource, FcbDest, CountLow, CountHigh);;begin cpyfilemov ah,0E6hpush bpmov bp,sppush dspush eslds si,(bp+x) ; addr of the high byte cntmov dx,(si) ; dx=high word of byte cntlds si,(bp+x+4) ; addr low word of byte cntmov cx,(si) ; cx=low 16 bits of countles di,(bp+x+8) ; address of dest fcblds si,(bp+x+12) ; address of the source fcbint 21hmov ah,0pop espop dspop bpret 16cpyfile endp;--------------------------------; get time / date string func(231) (E7H);; var; time : String(n);;; nettod(time);;; where time is a string of the form Y M D H M S;begin nettodmov ah,0E7hcall arg1aret 4nettod endp;--------------------------------; Set Close mode func(232) (E8H);; var; mode : Integer;;; clsmode(mode);;begin clsmodemov ah,0E8Hcall arg1worret 4clsmode endp;--------------------------------; Shell Base Status func(233) (E9H);; var; RetFlags, drive : Integer;;; RetFlags := drvmap(drive);;begin drvmapmov ax,0E900hcall arg1ret 4drvmap endp;--------------------------------; Return Shell Version func(234) (EAH);; var; RetCode, Mode : Integer;; EnvirStr : String(n);;; RetCode := retshl(EnvirStr, Mode);;begin retshlpush bpmov bp,sppush dspush esles di,(bp+x+4) ; set es:di to point at the bufferinc di ; point di at the start of the data arealds si,(bp+x) ; put the mode into almov ax,(si)mov ah,0EAhint 21hmov ah,00hpop espop dspop bpret 8retshl endp;--------------------------------; ascii log File (235) (EB);; var; RetCode, Flags, TimeOut : Integer;; Asciiz : String(n);;; RetCode := asclog(Flags, TimeOut, Asciiz);;begin asclogpush bpmov bp,sppush dslds si,(bp+x+8)mov ax,(si) ; flags into allds dx,(bp+x) ; pointer to the asciiz stringlds si,(bp+x+4)mov bp,(si) ; time out into bpmov ah,0EBHint 21hmov ah,00hpop dspop bpret 12asclog endp;--------------------------------; ASCIIZ file unlock (236) (EC);; var; RetCode : Integer;; Asciiz : String(n);;; RetCode := asculkf(Asciiz);;begin asculkfmov ah,0ECHcall arg1aret 4asculkf endp;--------------------------------; ASCIIZ Clear file func(237) (EDH);; var; RetCode : Integer;; Asciiz : String(n);;; RetCode := ascclrf(Asciiz);;begin ascclrfmov ah,0EDHcall arg1aret 4ascclrf endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Get Physical Station Number EEH;; var; StationNo : Integer;;; StationNo := Get_PSN;;begin Get_PSNmov ah,0EEhint 21hmov ah,0retGet_PSN endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Get Shell Table Addresses (239) EFH;; var; Mode,Segment,Offset : Integer;;; Get_STA(Mode,Segment,Offset);;begin Get_STApush bpmov bp,sppush espush dsmov si,(bp+x+8) ; get the modemov ax,(si)mov ah,0EFh ; set the functionint 21hlds di,(bp+x+4) ; store the segment locationmov (di),eslds di,(bp+x) ; store the offset locationmov (di),sipop dspop espop bpret 12Get_STA endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Set Preferred File Server (240) F0H;; var; RetServer, Mode, NewServ : Integer;;; RetServer := SetServ(Mode,NewServ);;begin SetServpush bpmov bp,sppush dsmov si,(bp+x+4) ; get the modemov ax,(si)mov di,(bp+x) ; set the preferred server numbermov dx,(di)mov ah,0F0h ; set the functionint 21hmov ah,0pop dspop bpret 6SetServ endp;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Attach/Detach To File Server (241) F1H;; var; RetCode, Mode, NewServ : Integer;;; RetCode := ModServ(Mode,NewServ);;begin ModServpush bpmov bp,sppush dslds si,(bp+x+4) ; get the modemov ax,(si)lds di,(bp+x) ; set the preferred server numbermov dx,(di)mov ah,0F1h ; set the functionint 21hmov ah,0pop dspop bpret 6ModServ endp;-------------------------------; Place a single integer argument into dx; with a return codearg1 proc nearpush bpmov bp,sppush dslds si,(bp+x+2)mov dx,(si) ; dx gets the argumentint 21hmov ah,0 ; clear ah for al return codepop dspop bpretarg1 endp;--------------------------------; Place a single integer argument into bp; for use with time outs - with a return codearg1t proc nearpush bpmov bp,sppush dslds si,(bp+x+2)mov bp,(si) ; dx gets the argumentint 21hmov ah,0 ; clear ah for al return codepop dspop bpretarg1t endp;--------------------------------; Process an fcb address in a; function call with a return codearg1f proc nearpush bpmov bp,sppush dslds dx,(bp+x+2) ; dx gets the argumentint 21hmov ah,0 ; clear ah for al return codepop dspop bpretarg1f endp;--------------------------------; Process a single string argument in a; function call with a return codearg1a proc nearpush bpmov bp,sppush dslds dx,(bp+x+2) ; ptr to parameter string; inc dx ; add 1 to get the address of the stringint 21hmov ah,0 ; clear ah for al return codepop dspop bpretarg1a endp;----------------------------; Perform a single integer argument; but without a return codearg1wor proc nearpush bpmov bp,sppush dslds si,(bp+x+2)mov dx,(si) ; dx gets the arg (or ptr)int 21hpop dspop bpretarg1wor endp;----------------------------; Perform a single string argument; but without a return codearg1awor proc nearpush bpmov bp,sppush dslds dx,(bp+x+2)inc dx ; add 1 to get the start of the stringint 21hpop dspop bpretarg1awor endp;----------------------------; Handle a request$ and reply$ function; with error codereq_rep proc nearpush bpmov bp,sppush dspush eslds si,(bp+x+6) ; ptr to req. stringinc si ; add 1 to get the address of the stringles di,(bp+x+2) ; ptr to var desc block for reply bufinc di ; add 1 to get the address of the stringpushf ; save the direction flagint 21hpopfmov ah,0pop espop dspop bpretreq_rep endpcseg endsend6. В И Р У С Ы И N E T W A R EПри работе сети NetWare фирмы Novell для совместного использо-вания сетевого дискового пространства используется "прозрачный ре-жим". Пользователь за комьютером видит сетевые диски в виде допол-нительных винчестеров (F: G: ...). Особенностью этих винчестеровявляется то, что для них поддерживаются все операции над файлами ине поддерживаются операции пямого доступа к секторам диска. Драй-вера устойств для этих дополнительных букв не существуют и всеоперации над ними иммитируются путем перехвата различных прерыва-ний.Проблема поведения вирусов на сетевых дисков сразу же распада-ется на две в зависимости от ответа на вопрос: выполняется ли ви-рус на машине управляющей сетью (и содержащей сетевые диски) илинет.Если вирус выполняется на управляющей машине, то он имеет дост-уп в MBR, BOOT и к секторам диска. Пока нет подтвержденной инфор-мации о существовании вирусов знакомых со структурой дискаNetWare. Попытка "не грамотного" вируса записаться на диск NetWareи в MBR скорее всего окончится плачевно. И не сколько для вируса,сколько для NetWare. Поэтому для защиты от BOOT-вирусов рекоменду-ется сохранять 0-ю дорожку. На этой дорожке содержется не толькоMBR, но и начало раздела NetWare. Восстановление 0-й дорожки изкопии не всегда, наверное, возможно, но в ряде случаев это помога-ет. В случае неуспеха еще остается тонкий анализ содержимого ста-рой и поврежденной 0-й дорожки. Если такой анализ удастся провес-ти, то возможно ручное восстановление потеянной информации.Если на управляющей машине вместе с сетью работает DOS, то воз-можно нарушение работы NetWare в памяти и, как следствие, разнооб-разные курьезы. Поэтому к чистоте от вирусов управляющей машинылокальной сети следует относится особенно серьезно.Если вирус выполняется на другой машине, то он не имеет физи-ческого доступа к диску. Разговор в этом случае может идти толькоо файловых вирусах. При этом нужно учесть, что пользователь сетиобычно не имеет доступа на запись ко всем файлам (особенно систем-ным). Возможность превысить права доступа практически не возможна.Покрайней мере пока в системе защиты нет явных проколов админист-ратора сети и не известны "люки" в защите NetWare.Поведение вирусов в NetWare распадается на три группы: - те ктоуспешно функционирует в сети; - те кто заражает файлы на локальныхдисках, но отказывается заpажать файлы в сети (среди них есть та-кие которые самоочищаются при копировании в сеть зараженного файлапри активном вирусе); - и те кто теряет работоспособность при ак-тивной сети.Распределение вирусов по этим группам можно обьяснить следующи-ми обстаятельствами. В первую группу попадают наиболее примитивныефайловые вирусы котоые законно используют функции DOS для своихцелей. Такие фирусы довольно легко отлавливаются различными сторо-жевыми средствами. Во вторую группу попадают вирусы которые пыта-ются бороться с антивирусными средствами. Сеть при этом они такжеобходят и поэтому работа с сетью для них не видна. В эту группупопадает наверное большинство "СТЕЛС"-вирусов. Третью группу сост-авляют неудачно написанные вирусы из второй группы. Они перестаютработать из-за конфликтов с оболочкой NetWare.Список литературы.1. Aнгло-русский словарь терминов NetWare. (13 cтр.) Чусов В.Е.2. Англо-русский глоссарий терминов NetWare. (66 стр.) Чусов В.Е.3. Введение в локальные вычислительные сети. (45 стр.) Груздев А.Ю.4. Texничecкиe cpeдcтвa лoкaльныx ceтeй. (27 стр.) Гaвpилoв A.B.5. Введение в сетевые операционные системы NetWare фирмы Novell. (55 стр.) Груздев А.Ю.6. Концепции построения и основные особенности системы NetWare 386. (49 стр.) Груздев А.Ю.7. Установка NetWare 386. (86 стр.) Гордеев В.В. 8. Установка рабочей станции DOS ODI в сети NetWare 386. (26 стр.) Гордеев В.В.9. Cтpyктypa кaтaлoгa, cтpyктypa пoльзoвaтeлeй и cиcтeмa зaщиты ceти NetWare (62 cтp.) Чycoв B.E.10. Интерфейс пользователя с системой. Утилиты меню и утилиты командной строки NetWare 386.(152 стр.) Шабалин А.Р.11. Печать в сетевой операционной системе NetWare 386. (83 стр.) Милентьев А.Д12. Оперативное управление работой сетевой ОС NetWare 386.(51 стр.) Поваров А.В.13. Средства построения гетерогенных комплексов фирмы Novell. (42 стр.) Коровкин С.Д.14. Коммуникационные средства фирмы Novell. (47 стр.) Коровкин С.Д.15. Проектирование, создание и использование баз данных, реализованных с применением продуктов фирмы Novell.(79 стр.) Зимин В.В.16. Практическое сравнение различных средств управления данными в среде сетевой ОС NetWare фирмы Novell.(41 стр.) Зимин В.В.17. Использование FoxBase+ и Clipper в локальной сети. (17 стр.) Нестеренко Ю.П.18. Барри Нанс, Программирование в локальных сетях