Рефераты

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

физический кадр, используемый в данной сети, например, на рис.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.11

TCP/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);

var

reg : registers;

s : array [0..64] of byte;

i : integer;

begin

s[0] := 0;

s[1] := 4;

s[2] := $09;

s[3] := length(Message);

for i := 1 to Length(Message) do

s[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;

begin

If ParamCount = 0 then

begin

Writeln('Send message to console utility by S.Perevoznik, 1993');

Writeln('Usage : ssend ');

halt;

end;

for k := 1 to paramcount do

begin

SendString := SendString + Paramstr(k) + ' ';

end;

SendToCon(sendString);

Writeln('Message send to console ...');

end.

Для передачи сообщения конкретному пользователю можно использовать

следующие функции :

{$F+,O+}

Unit UICNet;

Interface

Uses Dos;

Function GetUserName(ConnectionNumber : byte;

Var ObjectFree : boolean) : string;

Function LocalDisk : boolean;

Procedure SendBroadcastMessage(Message:string;ConnectionNumber:byte);

Implementation

Function GetUserName(ConnectionNumber : byte;

Var ObjectFree : boolean) : string;

var

WordPtr:^Word;

r : registers;

SendPacket : array[0..4] of byte;

ReplyPacket : array[0..64] of byte;

UserName : string;

ObjectType : word;

function GetWord(P: pointer): word;

var

WordPtr :^word;

begin

WordPtr := P;

GetWord := swap(WordPtr^);

end;

begin

SendPacket[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 = 0

then

begin

ObjectType := GetWord(addr(ReplyPacket[6]));

if ObjectType = 0 then ObjectFree := true

else

ObjectFree := false;

move(ReplyPacket[8],UserName[1],48);

UserName[0] := chr(48);

GetUserName := Username;

end;

end;

Function LocalDisk : boolean;

var r : registers;

begin

r.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 := true

else localdisk := false;

end;

Procedure SendBroadcastMessage(Message:string; ConnectionNumber:byte);

var

r : registers;

WordPtr : ^word;

SendPacket : array [0..160] of byte;

ReplyPacket : array [0..103] of byte;

begin

SendPacket[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;

var

WordPtr :^word;

begin

WordPtr := P;

GetWord := swap(WordPtr^);

end;

Function GetLong(P:Pointer): longint;

type long= record

case integer of

1:(Long1: Longint);

2:(Word1,Word2:word);

end;

var LongPtr :^Long;

L : long;

begin

LongPtr := 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;

var

WordPtr:^Word;

r:registers;

SendPacket : array[0..4] of byte;

ReplyPacket : array[0..64] of byte;

begin

SendPacket[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 = 0

then

begin

ObjectID := 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;

var

ObjectName,LoginTime : string;

ObjectType : word;

ObjectID : longint;

ConnectionNumber, CCode : byte;

begin

ConnectionNumber := 1;

CCode := GetConnectionInformation(ConnectionNumber,

ObjectName,ObjectType,ObjectID,LoginTime);

while (CCode <> 253) and (ConnectionNumber 0

then

writeln('Cod ',CCode,ConnectionNumber)

else if ObjectType <>0 then begin

Writeln(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 - 1993

lprog equ 1 ; 0 for small memory, 1 for large memory model

; Modify lprog to match the memory model

if lprog

x equ 6 ; prologue overhead for large memory model

else

x equ 4 ; ditto, small memory model

endif

begin macro name ; begin a function, near or far

public name

if lprog

name proc far

else

name proc near

endif

endm

; define Borland Pascal segments

; use neither Group nor Class

data segment word public

data ends

cseg segment byte public

assume 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 xtndopn

push bp

mov bp,sp

push ds

lds si,[bp+x+8] ; put the mode in ax

mov ax,[si]

mov ah,03Dh ; put the function in ah

lds dx,[bp+x] ; ptr to ASCIIZ string

inc dx ; add 1 to get to the beginning of the string

int 21h

jc xtndopx ; carry set means failure

lds di,[bp+x+4] ; put the handle into the variable

mov [di],ax ; if there is no error and

xor ax,ax ; return a 0

xtndopx:pop ds

pop bp

ret 14

xtndopn endp

;--------------------------------

; Get or Set File Attributes(handle) func(67) (43H)

;

; var

; Func, Attribute, ErrCode : Integer;

; Filename : String[n];

;

;ErrCode := setattr(Func, Attribute, Filename);

;

begin setattr

push bp

mov bp,sp

push ds

lds si,[bp+x+8] ; put the subfunction in ax

mov ax,[si]

mov ah,043h ; put the function in ah

lds dx,[bp+x] ; ptr to var desc block for ASCIIZ string

inc dx ; add 1 to get the address of the string

lds si,[bp+x+4] ; put the attribute to set in cx

mov cx,[si]

int 21h

jc setattx ; carry set means failure

lds di,[bp+x+4] ; put the returned attributes in the

mov [di],cx ; variable if there is no error

xor ax,ax ; and return zero

setattx:mov ah,0

pop ds

pop bp

ret 14

setattr endp

;--------------------------------

; End of Job Flag Status func(187) (BBH)

;

; var

; Flag : Integer;

;

;ErrCode := eojstat(Flag);

;

begin eojstat

push bp

mov bp,sp

push ds

lds si,[bp+x] ; put the flag in ax

mov ax,[si]

mov ah,0BBh ; put the function in ah

int 21h

mov ah,0

lds di,[bp+x]

mov [di],ax

pop ds

pop bp

ret 6

eojstat 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_Log

push bp

mov bp,sp

push ds

lds si,[bp+x+24] ; FileHandle

mov bx,[si]

lds si,[bp+x+20] ; ByteOffset

mov cx,[si]

lds si,[bp+x+16]

mov dx,[si]

lds si,[bp+x+4] ; AL = Log Flags

mov ax,[si]

lds si,[bp+x+12] ; LockLen

mov si,[si]

lds di,[bp+x+8]

mov di,[di]

lds bp,[bp+x] ; time out

mov bp,[bp]

mov ah,0BCH

int 21H

mov ah,0 ; clear the high byte of the return

pop ds

pop bp

ret 30

PRLH_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_Rel

push bp

mov bp,sp

push ds

lds si,[bp+x+16] ; FileHandle

mov bx,[si]

lds si,[bp+x+12] ; HiByteOffset

mov cx,[si]

lds si,[bp+x+8] ; LoByte

mov dx,[si]

lds si,[bp+x+4] ; HiWordLen

mov si,[si]

lds di,[bp+x] ; LoWordLen

mov di,[di]

mov ah,0BDH

int 21H

mov ah,0

pop ds

pop bp

ret 22

PRLH_Rel endp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;

; Physical Record Lock: Release Clr BEH

Страницы: 1, 2, 3


© 2010 Современные рефераты