
- •Лекции по курсу Сетевые операционные системы Введение.
- •Введение в типы операционных систем. Типы операционных систем.
- •Среда времени выполнения.
- •Сетевая операционная система Novell NetWare. Серверы.
- •Клиентская часть в NetWare.
- •Основные понятия nds.
- •Классификация объектов nds.
- •Классификация “листьев” nds.
- •Правила именования объектов nds.
- •Свойства объектов.
- •Особенности функционирования операционной системы Unix Введение
- •Базовые понятия ос unix.
- •Файловая система
- •Среда выполнения процессов.
- •Конструкционные блоки.
- •Функции ядра.
- •Предполагаемая аппаратная среда.
- •Прерывания и особые ситуации.
- •Уровни прерывания процессора
- •Распределение памяти
- •Архитектура операционной системы unix Общие положения.
- •Процессы
- •Контекст процесса
- •Состояния процесса
- •Переходы из состояния в состояние
- •“Сон” и пробуждение
- •Резюме.
- •Взаимодействие процессов в unix.
- •Сетевое взаимодействие в unix. Межмашинный интерфейс
- •Сокеты.
- •Windows nt
- •Архитектура WindowsNt
- •Исполняющая система Windows nt.
- •Диспетчер виртуальной памяти.
- •Средства вызова локальных процедур.
- •Диспетчер Кеша(CashManager)
- •Драйверы файловой системы.
- •Драйвер аппаратных устройств
- •Система безопасности Windows nt.
- •Сетевые драйверы
- •Модель сетевой архитектуры Windows nt.
- •Транспортные протоколы
- •Интерфейс драйвера транспорта
- •Рабочие станции и серверы Windows nt
- •Редиректоры
- •Серверы Windows nt
- •Провайдеры и интерфейс провайдера.
- •NetBios и Windows сокеты
- •NetBios
- •Tcp/ip дляWindows nt.
- •Tcp и сетевые возможности
- •Базовая поддержка протоколов tcp/ip.
- •Конфигурирование tcp/iPиSnmp. Маршрутизация и сетевые шлюзы.
- •Процесс межсетевой маршрутизации с использованием шлюзов.
- •Протокол динамической конфигурации хостов (dhcp).
- •Распознавание имен в сетях на базе WindowsNt.
- •NetBios поверхTcp
- •Сервис wins.
- •Wins в маршрутизируемой среде
- •Работа с сетями InternetилиIntranet
- •Общие проблемы работы с сетями
- •Программы маршрутизации и Устройства Защиты.
- •Типичные Сетевые Конфигурации Место Intranet
- •Место Internet
- •Интегрирование Вашего IntranetсInternet
- •Администрирование серверов с Internet Service Manager.
- •Обнаружение Других Компьютеров в Вашей Подсети.
- •Соединение с Internet
- •Как Выбирать Правильное Соединение Internet
- •Типы Соединений Internet.
- •Типы Соединений
- •Ip Адреса и dns
- •Другие Услуги Пользователя Internet
- •Публикации на Intranet
- •Имя разрешающей системы.
- •Использование Компьютерных Имен с wins server
- •Использование Компьютерных Имен и lmhosts
- •Использование Имен Домена с dns Станциями
- •Использование Доменных Имен и hosTs
- •Использование dhcp в Вашем Intranet
- •Использование urLs и Создание html Связей для Intranet
- •Snmp Текущий контроль.
- •Создание Виртуальных серверов
- •Использование ftp и Gopher Сервиса ftp сервис и Gopher сервис
- •Что такое ftp сервис?
- •Когда необходимо использовать ftp сервис?
- •Как работает ftp Сервис?
- •Конфигурирования Сеанса.
- •Просмотр Текущих Сеансов
- •Конфигурирование ftp Входа в систему
- •Управление Анонимными Соединениями Установка имени пользователя и пароля защиты:
- •Настройка Сообщений
- •Конфигурирование ftp Каталогов. Установка Исходного каталога
- •Установка, Стиля просмотра
- •Установка разрешения на чтение и запись.
- •Чтение.
- •Создание Файлов Аннотации
- •Аннотация файлов
- •Ошибки клиента броузера ftp, Directory Annotation Enabled
- •Специальные Каталоги в Home каталоге
- •Использование Имени Пользователя Directories
- •Использование Анонимного Каталога
- •Ftp Клиенты
- •Что такое Gopher сервис?
- •Конфигурирование Gopher сервиса
- •Управление Защитой через Имя Пользователя и Passord’s. Установка имени пользователя и пароля защиты.
- •Установка wais Индексные Запросы
- •Tag файлы
- •Создание tag Файлов. Создавать файл отметки
- •Резюме содержания файла.
- •Интерпретация элементов ввода
Какую работу нужно написать?
Сокеты.
В предыдущем разделе было показано, каким образом взаимодействуют между собой процессы, протекающие на разных машинах, при этом обращалось внимание на то, что способы реализации взаимодействия могут быть различаться в зависимости от используемых протоколов и сетевых средств.
Более того, эти способы не всегда применимы для обслуживания взаимодействия процессов, выполняющихся на одной и той же машине, поскольку в них предполагается существование обслуживающего (серверного) процесса, который при выполнении системных функций openилиreadбудет приостанавливаться драйвером.
В целях создания более универсальных методов взаимодействия процессов на основе использования многоуровневых сетевых протоколов для системы BSD был разработан механизм, получивший название “sockets”. В данном разделе рассматриваются некоторые аспекты применениясокетов(на пользовательском уровне представления).
Структура ядра имеет три уровня: сокет, протоколов и устройств см Рисунок ???. Уровень сокетов выполняет функции интерфейса между обращениями к операционной системе (системным функциям) и средствами низких уровней, уровень протоколов содержит модули, обеспечивающие взаимодействие процессов на рисунке упомянуты протоколы TCP и IP, а уровень устройств содержит драйверы, управляющие сетевыми устройствами. Допустимые сочетания протоколов и драйверов указываются при построении системы (в секции конфигурации); этот способ уступает по гибкости вышеупомянутому потоковому механизму. Процессы взаимодействуют между собой по схеме клиент-сервер: сервер ждет сигнала от сокета, находясь на одном конце дуплексной линии связи, а процессы-клиенты взаимодействуют с сервером через сокеты, находящееся на другом конце, который может располагаться на другой машине. Ядро обеспечивает внутреннюю связь и передает данные от клиента к серверу.
Сокеты, обладающие одинаковыми свойствами, например, опирающиеся на общие соглашения по идентификации и форматы адресов (в протоколах), группируются в домены (управляемые одним узлом). В системе BSD 4.2 поддерживаются домены: “UNIX system” - для взаимодействия процессов внутри одной машины иInternet- для взаимодействия через сеть с помощью протокола DARPA (Управление перспективных исследований и разработок Министерства обороны США). Сокеты бывают двух типов: потокориентированнный сокет (виртуальный канал, если пользоваться терминологией Беркли) и поток не ориентированный сокет - дейтаграмма.
Виртуальный канал обеспечивает надежную доставку данных с сохранением исходной последовательности. Дейтаграммы не гарантируют надежную доставку с сохранением уникальности и последовательности, но они более экономны в смысле использования ресурсов, поскольку для них не требуются сложные установочные операции; таким образом, дейтаграммы полезны в отдельных случаях взаимодействия.
Для каждой допустимой комбинации типа домен - сокет в системе поддерживается умолчание на используемый протокол. Так, например, для домена “Internet” услуги виртуального канала выполняет протокол транспортной связи TCP, а функции дейтаграммы - пользовательский дейтаграммный протокол UDP.
Существует несколько системных функций работы с сокетами. Функция socket
устанавливает оконечную точку линии связи.
sd = socket(format,type,protocol);
Formatобозначает домен (“UNIXsystem” или “Internet”),туре- тип связи через сокет (виртуальный канал или дейтаграмма), аprotocol- тип протокола, управляющего взаимодействием. Дескриптор сокетаsd, возвращаемый функциейsocket, используется другими системными функциями. Закрытие сокет выполняет функцияclose.
Функция bindсвязывает дескриптор сокета с именем:
bind(sd,address,length);
где sd - дескриптор сокета, address- адрес структуры, определяющей идентификатор, характерный для данной комбинации домена и протокола (в функцииsocket).Length- длина структурыaddress; без этого параметра ядро не знало бы, какова длина структуры, поскольку для разных доменов и протоколов она может быть различной. Например, для домена “UNIXsystem” структура содержит имя файла. Процессы-серверы связывают сокета с именами и объявляют о состоявшемся присвоении имен процессам-клиентам.
С помощью системной функции connectделается запрос на подключение к существующему сокету:
connect(sd,address,length);
Семантический смысл параметров функции остается прежним (см. функцию bind), ноaddressуказывает уже на выходной сокет, образующий противоположный конец линии связи. Оба сокета должны использовать одни и те же домен и протокол связи, и тогда ядро удостоверит правильность установки линии связи.
Если сокет - дейтаграммный, сообщаемый функцией connectядру адрес будет использоваться в последующих обращениях к функцииsendчерез данный сокет; в момент вызова никаких соединений не производится.
Пока процесс-сервер готовится к приему связи по виртуальному каналу, ядру следует выстроить поступающие запросы в очередь на обслуживание. Максимальная длина очереди задается с помощью системной функции listen:
listen(sd,qlength)
где sd - дескриптор сокета, а qlength- максимально-допустимое число запросов, ожидающих обработки.
Системная функция acceptпринимает запросы на подключение, поступающие на вход процесса-сервера:
nsd = accept(sd,address,addrlen);
где sd - дескриптор сокета,address- указатель на пользовательский массив, в котором ядро возвращает адрес подключаемого клиента,addrlen- размер пользовательского массива. По завершении выполнения функции ядро записывает в переменнуюaddrlenразмер пространства, фактически занятого массивом. Функция возвращает новый дескриптор сокета (nsd), отличный от дескриптораsd.
Процесс-сервер может продолжать слежение за состоянием объявленного сокета, поддерживая связь с клиентом по отдельному каналу.
Функции sendиrecvвыполняют передачу данных через подключенный сокет.
Синтаксис вызова функции send:
count = send(sd,msg,length,flags);
где sd- дескриптор сокета, msg - указатель на посылаемые данные, length -размер данных, count - количество фактически переданных байт. Параметр flags может содержать значение SOF_OOB (out-of-band - вставка служебной информации в данные), если посылаемые данные не учитываются в общем информационном обмене между взаимодействующими процессами. Программа удаленной регистрации, например, может послать out-of-band сообщение, имитирующее нажатие на клавиатуре терминала клавиши “delete”. Синтаксис вызова системной функции recv:
count = recv(sd,buf,length,flags);
где buf - массив для приема данных, length - ожидаемый объем данных, count -количество байт, фактически переданных пользовательской программе. Флаги (flags) могут быть установлены таким образом, что поступившее сообщение после чтения и анализа его содержимого не будет удалено из очереди, или настроены на получение данных out-of-band. В дейтаграммных версиях указанных функций, sendto и recvfrom, в качестве дополнительных параметров указываются адреса. После выполнения подключения к сокетам потокового типа процессы могут вместо функций send и recv использовать функции read и write. Таким образом, согласовав тип протокола, серверы могли бы порождать процессы, работающие только с функциями read и write, словно имеют дело с обычными файлами.
Функция shutdown закрывает сокетовую связь:
shutdown(sd,mode);
где mode указывает, какой из сторон (посылающей, принимающей или обеим вместе) отныне запрещено участие в процессе передачи данных. Функция сообщает используемому протоколу о завершении сеанса сетевого взаимодействия, оставляя, тем не менее, дескрипторы сокет в неприкосновенности. Освобождается дескриптор сокета только в результате выполнения функции close.
Системная функция getsockname получает имя сокетовой связи, установленной ранее с помощью функции bind:
getsockname(sd,name,length);
Функции getsockopt и setsockopt получают и устанавливают значения различных связанных с сокетом параметров в соответствии с типом домена и протокола.
Рассмотрим обслуживающую программу, представленную на Рисунке.
Процесс создает в домене “UNIX system” сокет потокового типа и присваивает ему имя sockname. Затем с помощью функции listen устанавливается длина очереди поступающих сообщений и начинается цикл ожидания поступления запросов.
Функция accept приостанавливает свое выполнение до тех пор, пока протоколом не будет зарегистрирован запрос на подключение к сокету с означенным именем; после этого функция завершается, возвращая поступившему запросу новый дескриптор сокета. Процесс-сервер порождает потомка, через которого будет поддерживаться связь с процессом-клиентом; родитель и потомок при этом закрывают свои дескрипторы, чтобы они не становились помехой для коммуникационного трафика другого процесса. Процесс-потомок ведет разговор с клиентом и завершается после выхода из функции read. Процесс-сервер возвращается к началу цикла и ждет поступления следующего запроса на подключение.
Ниже показан пример процесса-клиента, ведущего общение с сервером.
#include <sys/types.h>
#include <sys/socket.h>
main()
{
int sd, ns ;
char buf[256];
struct sockaddr sockaddr;
int fromlen;
sd = socket(AF_UNIX,SOCK_STREAM,0);
/* имя сокета - не может включать пустой символ */
bind(sd, ”sockname”, sizeof (“sockname”) - 1);
listen(sd,1);
for (;;)
{
ns = accept(sd, &sockaddr, &fromlen);
if (fork() == 0)
{
/* потомок */
close(sd);
read(ns, buf, sizeof(buf));
printf (“сервер читает ‘%s’\n” buf);
exit();
}
close(ns);
}
}
Рисунок ???. Процесс-сервер в домене “UNIX system”
Клиент создает сокет в том же домене, что и сервер, и посылает запрос на подключение к сокету с именем sockname. В результате подключения процесс-клиент получает виртуальный канал связи с сервером. В рассматриваемом примере клиент передает одно сообщение и завершается.
#include <sys/types.h>
#include <sys/socket.h>
main()
{
int sd, ns;
char buf[256];
struct sockaddr sockaddr;
int fromlen;
sd = socket(AF_UNIX,SOCK_STREAM,0);
// имя в запросе на подключение не может включать
// пустой символ
if (connect(sd, ”sockname”, sizeof(“sockname”) - 1) == -1)
exit();
write(sd, ”higuy”,6);
}
Рисунок. Процесс-клиент в домене “UNIX system”.
Если сервер обслуживает процессы в сети, указание о том, что сокет принадлежит домену “Internet”, можно сделать следующим образом:
socket(AF_INET,SOCK_STREAM,0);
и связаться с сетевым адресом, полученным от сервера. В системе BSD имеются библиотечные функции, выполняющие эти действия. Второй параметр вызываемой клиентом функции connect содержит адресную информацию, необходимую для идентификации машины в сети (или адреса маршрутов посылки сообщений через промежуточные машины), а также дополнительную информацию, идентифицирующую приемный сокет машины-адресата. Если серверу нужно одновременно следить за состоянием сети и выполнением локальных процессов, он использует два сокета и с помощью функции selectопределяет, с каким клиентом устанавливается связь в данный момент.