© Copyright Дмитрий Леонов
Email: web@hackzone.ru
WWW: http://www.hackzone.ru
Date: 09 Sep 2001
Теоретическая часть
Введение в internet/intranet-технологии
серверов и клиентских компьютеров, использующее для связи единый набор
протоколов TCP/IP. Основная черта Интернет -- предоставление глобального
доступа к информации и ресурсам. Информация, размещенная на
интернет-сервере, становится доступной из любой точки земного шара,
подключенной к интернет. Использование общих протоколов семейства TCP/IP и
единого адресного пространства позволяет говорить об Интернет как о единой
глобальной "метасети". Наряду с интернет выделяют понятие интранет. Интранет
-- это локальная сеть предприятия, основанная на тех же протоколах, что и
интернет. Эта технология позволяет широко использовать в рамках сети
предприятия все возможности и наработки глобальной сети, эффективно решая
при этом задачу ограничения доступа к информации. В то же время часть
интранет может быть открыта для внешнего доступа, становясь таким образом
частью Интернет.
Протоколы и адресация
Под протоколами в данном контексте понимаются правила, определяющие
последовательность действий, необходимых для обмена данными. Для доставки
информации на какой-либо компьютер он должен иметь уникальный идентификатор,
или адрес. Роль такого идентификатора в tcp/ip играет ip-адрес узла,
представляющий собой 32-разрядное число, записываемое тетрадой вида
216.122.167.55 (четыре десятичных числа от 0 до 255, разделенные точками). С
каждым ip-адресом связана 32-разрядная маска подсети, разбивающая адрес на
две части - на уникальный идентификатор сети, к которой принадлежит
компьютер, и на уникальный идентификатор узла в пределах этой сети. Маска
эта имеет вид 255.255.255.0, и при побитном умножении нашего ip-адреса из
примера мы получим сеть 216.122.167 и узел 55. Разбиение адреса на две части
обеспечивает большую управляемость сети. Компании, имеющей парк из
нескольких сотен машин, нет необходимости регистрировать адрес для каждой из
них - достаточно зарегистрировать на себя отдельную подсеть и раздавать
адреса внутри нее уже самостоятельно.
При простом подключении узла к сети, он получает уникальный адрес в
пределах всей Internet, что дает возможность обмениваться информацией с
другими узлами. Знание адреса компьютера, подключенного к сети, дает
возможность воспользоваться сервисами, на нем запущенными - с любого другого
компьютера, подключенного к сети.
Достаточно часто используется схема отсечения локальной сети от
"большой Internet", когда компьютеры локальной сети не получают прямого
доступа к внешнему миру. В этом случае между локальной сетью и Internet
ставится отдельный сервер, доступный как из внешней, так и из внутренней
сети. Такой сервер носит название прокси-сервера (proxy, посредник).
Возможны различные способы реализации этой схемы - на уровне отдельных
служб, как это происходит в случае традиционных прокси, либо на уровне
пакетов tcp/ip, в случае использования NAT, Network Address Translator, но
идея в обоих случаях одна и та же: компьютер из локальной сети обращается к
прокси-серверу с просьбой передать запрос некоторому внешнему серверу.
Получив ответ от внешнего сервера, прокси переправляет ее локальному
компьютеру.
Подобная схема имеет несколько преимуществ перед прямым подключением к
сети. Во-первых, экономятся "настоящие" ip-адреса, которых через некоторое
время просто перестанет хватать (как выяснилось, 32 разряда, выбранные для
представления ip-адреса -- это вовсе не так уж и много, и в настоящее время
готовится к внедрению новая версия ip-адресации, ipv6). Во-вторых, из
внешней сети можно получить доступ только к промежуточному серверу, что
повышает защищенность всей сети. Наконец, если несколько компьютеров по
очереди обращаются к одному и тому же ресурсу, прокси может сохранить
результат первого обращения на своем жестком диске и выдавать его в ответ на
повторные запросы.
Доменная система имен
Ip-адресация позволяет точно идентифицировать компьютеры, подключенные
к сети. Однако, запоминать адреса вида 216.122.167.55 не слишком удобно.
Поэтому с самого начала развития сети каждый узел помимо цифрового ip имел
еще и символьное имя. Сперва все узлы были перечислены в одном текстовом
файле, но по мере роста сети возникла необходимость в механизме,
обеспечивающем, во-первых, уникальность имен, во-вторых, средства извещения
всех подключенных узлов об изменениях.
В настоящее время соответствие между цифровыми и символьными адресами
обеспечивается серверами имен (Domain Name Servers, DNS). Под доменом
понимается множество машин, которые администрируются и поддерживаются как
единое целое. Вся сеть представляет собой одну большую иерархию доменов,
позволяющую разграничить полномочия между администраторами разных сетей.
Иерархия доменов Интернет растет от корневого (root) домена, не
имеющего имени. Далее идет ограниченное количество доменов верхнего уровня,
в которых может быть зарегистрировано практически неограниченное количество
доменов второго уровня и т.д.
К доменам верхнего уровня относятся домены .com (предназначенный для
коммерческих организация), .edu (образовательные учреждения), .net (сетевые
провайдеры, узловые компьютеры), .org (организации, не попадающие ни в одну
из прочих категорий), администрированием которых до недавнего времени
занимался только InterNIC, .gov (изначально предназначался для любых
государственных учреждений, позднее было принято решение о регистрации в нем
только федеральных правительственных учреждений США, регистрируются US
Federal Government civilian agency), .mil (военные учреждения США,
регистрируются US military agency), .int (международные организации). В
настоящее время ведется работа по введению дополнительных доменов верхнего
уровня. Кроме того, к доменам верхнего уровня относятся национальные домены
с двухбуквенными именами (например, .ru, .de), администрированием которых
занимаются национальные институты.
Порты и службы
Ip-адрес позволяет точно идентифицировать компьютер, но этого
недостаточно. Дело в том, что на каждом узле могут быть запущены самые
разные службы Internet - обеспечивающие передачу электронной почты, файлов,
гипертекстовой информации и т.п. Каждая служба использует в своей работе тот
или иной протокол прикладного уровня. Для передачи файлов - это протокол FTP
(File Transfer Protocol), передачи web-страниц - протокол передачи
гипертекстовой информации HTTP(HyperText Transfer Protocol), для работы с
электронной почтой - протоколы SMTP, POP3, IMAP и т.д.
Для каждой службы отведен отдельный порт, представляющий собой число от
0 до 65534. Для наиболее популярных служб зарезервированы стандартные номера
портов. Так, для FTP это 21, для HTTP - 80, SMTP - 25, POP3 - 110. Впрочем,
это лишь значения по умолчанию, никто не мешает владельцу узла настроить эти
службы на работу с другими портами. Иногда это просто необходимо - как,
например, в случае с поддержкой различных кодировок кириллицы в WWW. Как
известно, одни и те же символы кириллицы в различных операционных системах
обозначаются разными кодами, и существует по крайней мере четыре популярные
кодировки: Windows-1251, KOI8, Mac, DOS. Поскольку одна и та же страница
может быть загружена пользователями различных систем, перед ее разработчиком
встает непростая задача -- как сделать ее читаемой для всех. Существует три
подхода к решению этой задачи. Во-первых, можно просто проигнорировать
существование нескольких кодировок и готовить страницу в самой популярной,
каковой на сегодня является Win1251. Во-вторых, готовить несколько копий
страниц - во всех кодировках. Недостатки этих подходов очевидны. Наиболее
популярным на сегодняшний день является решение, предусматривающее
автоматическую перекодировку документа на сервере -- в зависимости от того,
с каким портом общается клиентское приложение: например, на 8080 -- Win1251,
8083 -- Koi8 и т.п.
URL
Унифицированные указатели ресурсов (Uniform Resource Locator, URL)
предназначены для адресации сетевых ресурсов - документов, файлов и т.п. В
самом общем виде URL записывается следующим образом:
<протокол>://<имя><:пароль>@<адрес><:порт>путь/><документ>информация>
Содержимое квадратных скобок является необязательным, любая часть URL
может быть опущена. Здесь
протокол - символьное обозначение протокола, используемого для доступа
к ресурсу (например, ftp, http);
имя - имя пользователя;
пароль - в сочетании с именем пользователя используется при работе с
ресурсами, доступ к которым ограничен;
адрес - адрес узла, в доменной или цифровой форме;
порт - номер порта, если он отсутствует, используется порт по умолчанию
для данного протокола;
путь - путь на сервере от его корневого каталога, либо относительно
текущего каталога;
документ - имя документа;
дополнительная информация - используется при работе с серверными
приложениями.
Средства разработки web-приложений
Обмен информацией в Интернет осуществляется с помощью протоколов
прикладного уровня, реализующих тот или иной прикладной сервис (пересылку
файлов, гипертекстовой информации, почты и т.д.). Одним из наиболее молодых
и популярных сервисов Интернет, развитие которого и привело к всплеску
популярности самой Интернет, стала World Wide Web (WWW), основанная на
протоколе HTTP (Hyper Text Transfer Protocol -- протокол передачи
гипертекстовой информации). Гипертекстовые документы, представленные в WWW,
имеют одно принципиальное отличие от традиционных гипертекстовых документов
-- связи, в них использующиеся, не ограничены одним документом, и более
того, не ограничены одним компьютером. Для подготовки гипертекстовых
документов используется язык HTML (Hyper Text Markup Language -- язык
разметки гипертекстовых документов), предоставляющий широкие возможности по
форматированию и структурной разметке документов, организации связей между
различными документами, средства включения графической и мультимедийной
информации. HTML-документы просматриваются с помощью специальной программы
-- броузера. Наибольшее распространение в настоящее время получили броузеры
Navigator компании Netscape (NN) и Internet Explorer компании Microsoft
(MSIE). Реализации NN доступны практически для всех современных программных
и аппаратных платформ, реализации MSIE доступны для всех Windows платформ,
Macintosh и некоторых коммерческих Unix-систем.
HTML-документ состоит из текста, представляющего собой содержание
документа, и тегов, определяющих его структуру и внешний вид при отображении
броузером. Простейший html-документ выглядит следующим образом:
Тело документа
Данный код отображается в броузере следующим образом:
Рис. 2. Пример html-документа
Как видно из примера, тег представляет собой ключевое слово,
заключенное в угловые скобки. Различают одинарные теги, как, например,
,
и парные, как , в последнем случае действие тега
распространяется только на текст между его открывающей и закрывающей
скобкой. Теги также могут иметь параметры -- например, при описании страницы
можно задать цвет фона, цвет шрифта и т.д.: text="black">.
Текст всего документа заключается в теги , сам документ
разбивается на две части -- заголовок и тело. Заголовок описывается тегами
, в которые могут быть включены название документа (с помощью тегов
документа. Тело документа заключено в теги и содержит собственно
информацию, которую видит пользователь. При отсутствии тегов форматирования
весь текст выводится в окно броузера сплошным потоком, переводы строк,
пробелы и табуляции рассматриваются как пробельные символы, несколько
пробельных символов, идущих подряд, заменяются на один. Для форматирования
используются следующие основные теги:
-- начало нового абзаца, может иметь параметр, определяющий
выравнивание:
;
-- перевод строки в пределах текущего абзаца;
-- выделение текста полужирным шрифтом;
-- выделение текста курсивом;
-- выделение текста подчеркиванием
Ссылка на другой документ устанавливается с помощью тега href="URL">..., где URL -- полный или относительный адрес документа. При
этом текст, заключенный в тег , обычно выделяется подчеркиванием и
цветом, и после щелчка мышью по этой ссылке броузер открывает документ,
адрес которого указан в параметре href. Графические изображения вставляются
в документ с помощью тега .
Средства разработки клиентских приложений
Использование приложений для броузеров позволяет широко использовать
все возможности WWW, поскольку приложение фактически становится составной
частью гипертекстового документа. Это приводит к существенному упрощению
системы поддержки -- клиентское ПО автоматически обновляется при подключении
к серверу, документация и система помощи легко реализуется с помощью
стандартных средств HTML, а некоторые учебные курсы, к примеру, могут быть
реализованы практически полностью средствами HTML.
Рис. 3. Схема взаимодействия пользователя, сервера
и серверных приложений
Пользователь взаимодействует с броузером (1), который запрашивает (2) и
получает (2) от веб-сервера страницу с включенным приложением. После этого
начинается взаимодействие пользователя с приложением (4), которое при
необходимости может связаться с серверным приложением (5,6) для
взаимодействия с СУБД и т.п.
В то же время средств HTML недостаточно для реализации более-менее
сложных клиентских приложений, что приводит к необходимости использования
дополнительных средств, написания вспомогательных программ.
Можно выделить следующие основные проблем в разработке клиентских
средств для WWW:
Проблема многоплатформенности. Поскольку к WWW подключены системы,
основанные на различных аппаратных и программных платформах, возникает
необходимость разработки для каждой платформы, которую предполагается
поддерживать, специализированной версии ПО. Что приводит либо к ограничению
поддерживаемых платформ, либо к возрастанию затрат на разработку и поддержку
ПО. Для корпоративных закрытых систем с однородной архитектурой аппаратных и
программных средств аппаратной эта проблема менее актуальна.
Проблема безопасности. Существует две стороны проблемы -- возможные
сбои в системе из-за ошибок в программном обеспечении и целенаправленные
действия программного обеспечения, направленные на нарушение
функционирования системы, копирование конфиденциальной информации и т.д.
Отсутствие в традиционных языках встроенных средств для выполнения
наиболее часто встречающихся при работе с Web операций -- взаимодействия с
удаленными серверами, загрузка файлов, работа с изображениями и т.д.
Значительный размер исполняемых файлов, генерируемых традиционными
средствами разработки, что затрудняет их передачу по сети.
Наибольшую популярность завоевали следующие подходы к реализации
вспомогательных приложений для клиентской стороны:
Реализация подключаемых модулей (plug-ins) Netscape;
Использование элементов ActiveX;
Использование Java-приложений;
Средства подготовки сценариев JavaScript, VBScript.;
Macromedia Flash.
Рассмотрим их более подробно.
Использование подключаемых модулей получило широкое распространение в
связи с популярностью броузера Netscape Navigator, предоставляющим такую
возможность. В настоящее время это путь является тупиковым, поскольку не
предоставляет адекватного решения ни одной из перечисленных проблем.
К достоинствам использования элементов ActiveX относится реализация на
основе OLE/COM-технологии, что позволяет достаточно легко перевести в эту
форму традиционное ПО, реализованное для Win32-платформ. Среди недостатков
-- поддержка в настоящее время только Win32-платформы и поддержка только
броузером Internet Explorer, хотя для Netscape Navigator существует plug-in,
позволяющий использовать элементы ActiveX. Размер элементов ActiveX
минимизирован за счет использования разделяемых динамических библиотек,
поставляемых вместе с броузером Internet Explorer, которые также
предоставляют все необходимые для сетевого взаимодействия функции. Проблема
безопасности решается с помощью введения института сертификатов -- при
загрузке пользователю предъявляется сертификат производителя, заверенный
независимой организацией (например, VeriSign Inc.), после чего он может
решить, доверять или нет этому компоненту. Защита от сбоев не предусмотрена.
Таким образом, проблема безопасности решается административными средствами.
Данная технология наиболее пригодна для разработки корпоративных
приложений для внутреннего пользования -- особенно в случае существования
готовых наработок в этой области.
Основным достоинством Java-приложений является их независимость от
клиентской платформы. В отличие от традиционных приложений, транслирующихся
в исполняемые коды процессора, Java-приложения транслируются в так
называемый байт-код, интерпретируемый в дальнейшем виртуальной Java-машиной.
При этом байт-код независим от платформы, на которой он в дальнейшем будет
выполняться -- достаточно, чтобы для этой платформы была реализована
Java-машина. Поскольку большая часть основных функций реализована на уровне
виртуальной Java-машины, это приводит к существенному уменьшению размеров
байт-кода. Это является как достоинством, так и недостатком Java-приложений
-- поскольку байт-код интерпретируются виртуальной машиной,
производительность Java-приложений уступает производительности традиционных
откомпилированных программ. Частично с этим удается бороться, применяя
компиляторы времени исполнения (JIT -- just in time compilers),
осуществляющие компиляцию приложения при его загрузке в "родной" для данного
процессора код. Также возможен вызов функций, реализованных на других языках
программирования (таких как С, С++) и откомпилированных для данной платформы
-- так называемый native code. Это применяется при реализации наиболее
критичных к времени исполнения фрагментов кода.
Другим достоинством Java-приложений является их защищенность -- как с
точки зрения программирования (из языка исключены средства, наиболее часто
приводящие к ошибкам при программировании -- такие как указатели, перегрузка
операторов и т.д., язык является строго объектно-ориентированным, в него
встроена "сборка мусора" и т.д.), так с точки зрения исполнения (значительно
ограничена возможность работы с файлами на локальных машинах, с
установлением сетевых соединений и т.д., программа выполняется в отдельном
адресном пространстве), что позволяет спокойно работать с приложениями,
полученными из сети, не опасаясь наличия в них опасного кода. Таким образом,
проблема безопасности полностью решена на уровне архитектуры.
Второй недостаток -- необходимость существования для данной платформы
виртуальной Java-машины. Java-машины реализованы для всех наиболее
распространенных платформ, но они остаются достаточно ресурсоемкими и
зачастую довольно нестабильными системами. Кроме того, остаются проблемы
несовместимости -- поскольку язык Java изначально проектировался для
написания многоплатформенных приложений, в него преимущественно входили
элементы, доступные на всех платформах, что привело к некоторой аскетичности
доступных средств. Некоторые разработчики виртуальных машин расширяли их
возможности для конкретной платформы, что может привести к тому, что
Java-приложение, использующее все эти возможности, утратит способность
запускаться на других платформах. Ошибки в реализации виртуальной машины
могут также привести к снижению безопасности системы, за последние несколько
лет тому было немало примеров.
Существенным достоинством Java является ее объектная ориентированность.
Программа на Java представляет собой набор взаимодействующих между собой
классов. С помощью классов осуществляется и доступ к основным сервисам
виртуальной машины. Стандартная библиотека классов достаточно обширна и
включает в себя классы для работы с сетевыми протоколами -- как на низком,
так и на прикладном уровне, с графикой, графическим пользовательским
интерфейсом, базами данных, строками и т.д.
Перечисленные достоинства делают Java-приложения лучшим выбором в
гетерогенных системах, для которых безопасность имеет большее значение чем
возможные потери в производительности.
JavaScript, VBScript и т.п. представляют собой упрощенные языки
подготовки сценариев, код которых встраивается непосредственно в html-файл и
выполняется броузером. Они непригодны для реализации серьезных приложений, в
них отсутствуют средства для работы с файлами, сетевого взаимодействия и
т.д. Но они широко используются во вспомогательных целях, в качестве
средства первоначальной обработки результатов, для оформления, "оживления"
html-документов (т.наз. Dynamic HTML) и т.д.
Macromedia Flash разрабатывалось как средство анимации, основанное на
векторной графике, и в последнее время практически заняло ту нишу в
web-дизайне, на которую еще несколько лет назад претендовала Java. Имеет
достаточно ограниченные возможности по программированию, но весьма широкие
-- по построению мультимедийных приложений в рамках заданной модели (реакция
на нажатие кнопок/движение мыши, анимация, векторная графика, слои). Для
работы flash-приложений необходимо наличие соответствующего проигрывателя,
существующего для большинства распространенных платформ (в том числе, в виде
ActiveX-модуля и Java-апплета).
Средства разработки серверных приложений
Клиентские приложения, лишенные серверной стороны, пригодны для решения
лишь ограниченного класса задач. Такие задачи как взаимодействие с базами
данных, централизованная обработка результатов и т.п. в большей или меньшей
степени требуют наличия серверной стороны.
Широкие возможности открываются при использовании комбинированных
систем с развитым пользовательским интерфейсом, реализованном средствами
клиентской стороны, и мощной серверной поддержкой.
В то же время определенный интерес представляют системы, основанные
преимущественно на серверных решениях. В этом случае все, что требуется от
клиентской стороны -- наличие средств для работы с WWW. Взаимодействие с
серверными приложениями осуществляется посредством динамически формирующихся
экранных HTML-форм.
В язык HTML включены базовые средства для взаимодействия с
пользователем -- кнопки, поля ввода, селекторные кнопки, списки. Они
группируются с помощью тега , в параметре action которого указывается
адрес приложения, обрабатывающего результаты формы. Параметр method
описывает метод передачи данных на сервер -- GET или POST.
HTML-код, описывающий форму с одним вопросом и тремя предлагаемыми на
выбор ответами, выглядит следующим образом:
Что приведет к отображению в броузере следующей страницы:
Рис. 4. Пример страницы с формой для взаимодействия с пользователем
Самый распространенный тег, используемый в формах -- . В его
параметре type указывается тип поля ввода:
submit/text/password/checkbox/radio/hidden, соответствующий кнопкам, простым
текстовым полям ввода, полям ввода пароля, селекторным кнопкам, спрятанным
полям.
В обязательном параметре name указывается имя поля ввода, в поле value
можно задать его стартовое значение.
Списки и выпадающие списки создаются с помощью тегов ,
описывающих характеристики всего списка, и тегов , описывающих
отдельные элементы списков.
В каждой форме должна присутствовать одна кнопка Submit, при нажатии
которой формируется http-запрос, включающий результаты заполнения формы, и
этот запрос направляется на вход приложения, указанного в параметре action.
Первым механизмом, обеспечивающим взаимодействие клиента с серверными
приложениями, стал CGI (Common Gateway Interface, общий шлюзовой интерфейс).
В ответ на действия пользователя, используя CGI, Web-сервер вызывает внешнюю
программу (CGI-приложение) и передает ей информацию, полученную от клиента
(например, переданную Web-браузером). Далее CGI-приложение обрабатывает
полученную информацию, и результаты ее работы передаются клиенту.
Рассмотрим эти этапы чуть подробнее. Взаимодействие между клиентом и
серверным приложением осуществляется по схеме, представленной на рис.1.
Рис. 1. Схема взаимодействия браузера, www-сервера и cgi-приложения
Пользователь заполняет экранную форму, описанную в html-файле с помощью
тега
Отзывы:
отзывов пока нет, ваш будет первым!
Смотрите также:
Вы читали "Введение в internet/intranet-технологии"

