· Программа должна соответствовать стандарту POSIX и использовать только стандартные библиотеки, входящие в состав большинства UNIX-систем.
Протоколом передачи данных называется ряд правил и утверждений, предназначенных для создания унифицированного интерфейса между взаимодействующим программным обеспечением. Это позволяет разрабатывать приложения, взаимодействие между которыми определяется не операционной системой, под управлением которой они работают, а протоколами, учтенными при разработке.
Все современные протоколы передачи данных классифицированы организацией ISO на уровни, в результате чего появилось понятие модели OSI (opensystemsinterconnection – соединение открытых систем). Согласно этой модели, существует семь уровней рассмотрения передачи данных:
1. Физический (physical) – представлен линиями связи и коммуникационным оборудованием.
2. Связи (datalink) – представлен драйверами сетевого оборудования и программным обеспечением нижнего уровня.
3. Сетевой (network) – представлен протоколами IPv4 и IPv6.
4. Транспортный (transport) – представлен протоколами транспортного уровня, такими как TCP, UDP, ICMP и другими.
5. Сеансовый (session) – представлен программными средствами, поддерживающими сеансы связи.
6. Представления данных (presentation) – представлен программными средствами, обеспечивающими независимость интерпретации данных от используемой системы.
7. Прикладной (application) – представлен множеством протоколов, направленных на передачу определенных данных – файлов, гипертекстовых документов и т.д. К этим протоколам относятся HTTP, FTP, SMTP и др.
Приложения, как правило, не используют прямое обращение к программным средствам, реализующим протоколы нижних уровней – вплоть до сетевого. Для протоколов транспортного уровня в современных операционных системах предусмотрены специальный интерфейс – сокеты.
Наиболее распространенные протоколы и взаимосвязь между ними отображены на рисунке 2.1.
При разработке программы основным протоколом передачи информации был выбран протокол транспортного уровня – TCP (TransmissionControlProtocol – протокол контроля передачи). Этот протокол является надстройкой над протоколом IP и предоставляет некоторую дополнительную функциональность:
· Протокол обеспечивает надежную передачу данных, осуществляя, если необходимо повторную отправку или прием пакетов, делая это прозрачно для приложения, в отличие от протокола IP;
· Последовательность получения пакетов строго контролируется: пакеты приходят в том же порядке, в каком и были отправлены; эта особенность отличает TCP от дейтаграммных протоколов, таких как UDP;
· Протокол TCP имеет принятый в большинстве операционных систем программный интерфейс, называемый сокетами (sockets), что сильно упрощает его применение при разработке приложений.
Протокол TCP имеет долгую историю – он был разработан Министерством обороны США для создания ее внутренней оборонной сети ARPAnet и изначально предназначался для объединения приложений в составе разнородной вычислительной среды.Впервые протокол был реализован университетом Беркли в операционной системе BSD4.2. В силу популярности этой системы протокол быстро распространился на остальные UNIX-системы и фактически стал основой современной сети Интернет, а также большинства локальных сетей.Несмотря на свои преимущества по сравнению с протоколом IP, TCP имеет и свои негативные стороны – он крайне требователен к вычислительным ресурсам компьютера в силу того, что поток байтов, которым оперирует программа, при передачи посредством TCP разбивается на множество пакетов, каждый из которых может быть отправлен несколько раз, до тех пор, пока не будет получен ответ о его приеме. Кроме того, гибкая система адресации требует наличия в сети специализированных серверов, таких как DNS, DHCP и других.
Протокол HTTP (HyperTextTransferProtocol – протокол передачи гипертекста) – это протокол уровня приложения, осуществляющий связь приложений в пределах распределенных, совместных или разнородных информационных систем. Протокол позволяет приложениям обмениваться данными, представленными в понятном для восприятия человеком виде.
Как следует из его названия, первоначально HTTP предназначался для передачи между приложениями так называемого гипертекста (hypertext), представляющего собой особый вид данных, созданный в соответствии со стандартом HTML (HyperTextMarkupLanguage – язык разметки гипертекста). Гипертекстовый документ состоит из данных, размеченных с помощью тегов (tag) языка HTML, и представляет собой комбинацию текста, изображений, гиперссылок и прочих средств представления данных. Гиперссылки – одна из важнейших составляющих HTML-документа – представляют собой интерактивные области, воздействие на которые приводит к получению связанных с гиперссылкой данных. Это позволяет пользователю, работающему с гипертекстовой информацией, осуществлять навигацию в пределах набора документов или даже всей сети Интернет, получая интересующую его информацию с помощью контекстных гиперссылок.
Протокол HTTP является надстройкой над протоколом TCP и является средством контроля содержания передаваемых данных. В отличие от TCP, который не учитывал структуру передаваемых пакетов, HTTP внедряет в данные метаинформацию, позволяющую получателю корректно интерпретировать полученные данные. На основе HTTP функционирует глобальная сеть Интернет (называемая также WorldWideWeb или WWW). Первая версия протокола – HTTP/0.9 – обладала достаточно ограниченными возможностями, но с активным развитием всемирной сети появились новые версии: HTTP/1.0 и HTTP/1.1, позволяющие контролировать передачу по вычислительным сетям не только гипертекстовой информации, но и произвольные бинарные файлы: звуковые, графические, архивные и пр.
В силу того, что HTTP является надстройкой над протоколом TCP, при передачи данных также выделяются две стороны: клиент и сервер.
Клиент является инициатором соединения и запрашивает у сервера некоторые данные или услуги. Клиентом, как правило, является программа, называемая браузером (browser), позволяющая как отображать гипертекстовую информацию, так и принимать файлы иных форматов. Чтобы получить некоторую интересующую информацию, клиент посылает серверу запрос (request), содержащий описание запрашиваемой информации.
Сервер при передаче данных через HTTP называют веб-сервером (web-server). Эта программа осуществляет обработку запросов от клиентов, передавая запрошенные данные в виде ответов (response), содержащих помимо искомых данных метаинформацию, их описывающую.
Получение пользователем интересующих его данных состоит из следующих этапов:
1. Пользователь вводит в строке браузера адрес интересующего его ресурса.
2. Браузер на основе информации, полученной от пользователя, а также учитывая свои настройки и конфигурацию операционной системы, формирует запрос.
3. Браузер подключается к серверу, расположенном, возможно, на удаленном компьютере, и передает ему запрос.
4. Сервер, анализируя запрос, выполняет необходимые действия: формирует ответ, включая в него тело запрошенного документа. Если это гипертекстовый документ, он загружается из файла или же генерируется динамически посредством сценария. В ответ также включается информация о содержащихся в нем данных.
5. Сервер передает ответ браузеру.
6. Браузер анализирует ответ и либо сохраняет полученные данные в файл, либо, в случае гипертекстового документа, анализирует теги HTML и отображает документ на экране.
Следует заметить, что клиентской программой может быть не только браузер, тем не менее, все шаги, за исключением, может быть, первого, выполняются в любом случае.
Следует заметить, что здесь рассматривается непосредственное подключение клиента к серверу, содержащему интересующую информацию, однако, это не всегда возможно в силу различных обстоятельств. В таком случае подключение может осуществляться посредством одной или более промежуточных точек подключения. Можно разделить эти промежуточные точки на три группы:
· Прокси-серверы (proxy-server) – программа-посредник, выполняющая функции как клиента, так и сервера с целью создания запросов от имени других клиентов. Запросы обслуживаются прокси-сервером, или пересылаются им с внесением в них изменений (в этом случае прокси-сервер называется непрозрачным) или без изменений (в этом случае прокси-сервер называется прозрачным). Прокси-сервер позволяет группе компьютеров выступать в качестве одного клиента, что часто применяется при подключении к Интернету локальных сетей.
· Шлюз (gateway) – как и прокси-сервер, осуществляет трансляцию запросов, однако, не подвергаю их изменению. Шлюз получает от клиента запрос, как к серверу, содержащему искомый ресурс. Таким образом, клиент не может определить, подключается ли он через шлюз или непосредственно к содержащему ресурс серверу.
· Туннель (tunnel) – программа-посредник, поддерживающая соединение. Хотя после установки соединения туннель не рассматривается в качестве элемента передачи через протокол HTTP, соединение, как правило, инициируется именно HTTP-запросом. Туннель прерывает свою работу, если хотя бы один из участников обмена данными закрывает соединение.
Для сохранения функциональности передачи данных при подключении через промежуточные точки не требуется внесения изменений в запросы и ответы, за исключением случая прокси-сервера: в этом случае в клиентском запросе должны содержаться дополнительные поля. Однако, с точки зрения сервера, обмен данными производится непосредственно с клиентом, следовательно, никаких изменений в запросах не происходит. Поэтом при разработке программы возможность подключения через промежуточные точки не учитывалась.