На бирже курсовых и дипломных проектов можно найти образцы готовых работ или получить помощь в написании уникальных курсовых работ, дипломов, лабораторных работ, контрольных работ, диссертаций, рефератов. Так же вы мажете самостоятельно повысить уникальность своей работы для прохождения проверки на плагиат всего за несколько минут.

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


дипломная работа Кэширующий прокси-сервер

Информация:

Тип работы: дипломная работа. Добавлен: 10.05.2012. Сдан: 2011. Страниц: 17. Уникальность по antiplagiat.ru: < 30%

Описание (план):


Введение 

     Глобальная  сеть обладает гигантским объемом информации, к которой ежедневно обращаются миллионы пользователей, как работники  компаний, так и обычные пользователи. Пользователям домашних сетей проще, так как, в большинстве своем, они обладают достаточно широким интернет-каналом и не ограничены в использовании траффика.
     Пользователи  же, которые работают на предприятии (особенно если предприятие достаточно крупное) не имеют всех этих преимуществ. Узкий канал передачи данных существенно снижает скорость работы в Интернете. А если учесть что в офисах находятся десятки, сотни работников, между которыми делится этот канал, то можно представить, как много времени уходит на открытие небольшой веб-страницы. К тому же их рабочие станции содержат в себе коммерческую информацию, которую необходимо сохранить втайне от конкурентов. Для того чтобы решить эти задачи в предприятиях устанавливаются серверные приложения, которые будут заниматься тем что будут позволять выходить в интернет пользователям с одного и того же IP-адреса (в этом случае злоумышленнику будет непросто отследить, на какой именно рабочей станции находится искомая информация); сохранять полученные данные из сети на локальном сервере и выдавать их клиентским рабочим станциям в случае повторных обращений (это существенно повысит  скорость обращения к веб-страницам (до 60%) и снизит расход траффика). Такие программы называются кэширующими прокси-серверами.
     Данный  вид прокси-серверов так же используется и провайдерами. Как говорилось выше, Интернет состоит из большого количества серверов. Некоторые из них содержат веб-сайты, а некоторые являются лишь транспортными узлами, перенаправляющими трафик от пользователя к веб-сайту и обратно. Провайдеры заинтересованы в уменьшении объема трафика. Для этого они применяют технологию кэширования на своих серверах, чтобы отвечать на часть пользовательских запросов, не пересылая их дальше внутренней сети. Данный метод описан в RFC 2616, позволяющий сообщить прокси-серверам, что содержимое желательно кэшировать (Cache-Control: public).
     Основное  назначение программы «кэширующий прокси-сервер»: сохранить полученные из Интернета данные на локальном диске сервера и при повторном обращении клиентских рабочих станций к ним взять их не с удаленного сервера, а с локального.
     Существенные преимущества использования кэширования:
    из Интернета будут загружаться только новые и изменённые файлы;
    уменьшается количество запросов, посылаемых браузером серверу в Интернет;
    локальный кэш - общий кэш на все браузеры, установленные на компьютере;
    все ранее посещённые страницы можно будет просмотреть, не подключаясь к Интернету.
     Данный  прокси-сервер реализует кэширование  по протоколу HTTP 1.1. и описывается в RFC 2616, в 13 разделе «Кэширование HTTP».
 

    Постановка задачи
 
       Необходим программный продукт, который будет являться шлюзом  доступа в Интернет для рабочих станций пользователей и будет обеспечивать сохранение полученных данных из глобальной сети.
       Программа должна быть рассчитана на использование  в локальных сетях малого офиса  и предприятия (до 50 рабочих станций).
    Требования  к программному продукту:
    Работа в среде семейства ОС «Windows».
    Снижение расходов на ежемесячный трафик.
    Увеличение скорости работы в интернете.
 


    Обзор сетей и прокси-серверов
    2.1 Локальная сеть 

    Локальная сеть – это группа связанных между собой компьютеров, серверов, принтеров, расположенных в пределах здания, офиса или комнаты. Локальная сеть  дает возможность получать совместный доступ к общим папкам, файлам, оборудованию, различным программам и т.д. Использование ресурсов локальной сети дает возможность существенно снизить финансовые затраты предприятия, повысить уровень безопасности хранения важных данных, сократить временные затраты сотрудников компании на решение различного вида задач, а так же повышение общей эффективности работы. Локальная сеть состоит из следующего оборудования и технологий:
    - концентраторы  (HUB) – соединяет сетевые кабели  и обеспечивает взаимодействие  между подключенными к ним  устройствами (компьютеры, принт-серверы  и т.д.);
    - управляемый  коммутатор – концентратор, который предоставляет возможности начального администрирования конфигурации локальной сети;
    - принт-сервер  – специальное устройство, которое  обеспечивает подключение принтера  к компьютерной  сети и дает  возможность печати всем пользователям локальной сети;
    - файл-сервер  – один компьютер локальной  сети, предоставляющий дисковое  пространство для хранения информации  с возможностью непрерывного  доступа к ней пользователям;
    - устройство  беспроводного доступа – радиосигнал,  позволяющий соединять локальные сети, расположенные в пределах прямой видимости на расстоянии до 25 км;
    - сервер  авторизации и доступа – основной  сервер локальной сети, на котором  происходит регистрация всех  пользователей сети и организация  доступа к ресурсам. Сервер выполняет следующие задачи: хранение используемых данных, распределение доступа к ресурсам, обеспечение работы выхода в сеть Интернет, защита сети от внешних вторжений. 

    
                                  Рисунок 2.1 Локальная  сеть. 

    Локальная сеть малого офиса (до 15 рабочих мест) предполагает создание одной рабочей группы пользователей с подключением к сети Интернет. Сетевой принтер используется для печати. Основная функция такой локальной сети – авторизация пользователей для выхода в сеть Интернет, защита локальной сети от внешних атак, тарификация Интернет трафика.
    Локальная сеть масштаба предприятия (20-50 рабочих мест) базируется на основе проведения сети малого офиса. В такой локальной сети реализуется решение разграничения доступа между пользователями разных подразделений компании. В каждом подразделении пользователи объединены в отдельную подсеть. Так же рабочая группа может иметь собственный сервер. Коммутатор контролирует возможность доступа пользователей одной подсети в другую. 

      2.2 Функции различных прокси-серверов
     В компьютерных сетях под прокси-сервером (компьютерной системой или приложением) понимается сервер, который выступает в роли промежуточного звена для запросов клиентами различных ресурсов с других серверов. Клиент подключается к прокси-серверу, запрашивая какие-либо ресурсы, такие как файл, соединение, веб-страница или другие виды ресурсов, доступных на удаленном сервере. Прокси-сервер обрабатывает запрос согласно правилам фильтрации. Например, он может фильтровать трафик по IP-адресу или протоколу. Если запрос был одобрен фильтром, прокси предоставляет ресурс, предварительно запрашивая его как клиент у соответствующего сервера. Дополнительно, прокси-сервер может изменять запросы клиента или ответы сервера, также он может предоставить запрашиваемый ресурс без подключения к какому-либо серверу вообще. В этом случае, прокси-сервер "кэширует" ответы от удаленных серверов и предоставляет сохраненную информацию в ответ на все последующие запросы.
       Два основных назначения прокси-сервера  заключаются в следующем:
     Сохранить анонимность своих клиентов (в основном для безопасности),
     Ускорить  доступ к ресурсу (посредством кэширования). Обычно это функция используется для ускорения доступа к веб-страницам.
       Прокси-сервер, который передает  запросы и ответы в неизменном  виде обычно называется шлюзом или, иногда, "туннелирующим прокси".
       Прокси-сервер может быть расположен  как на локальном компьютере  пользователя, так и в других  точках между пользователем и  серверами в Интернет. Обратный  прокси-сервер это прокси, использующийся  в качестве front-end сервера для ускорения и кэширования ресурсов, предоставляемых по требованию (таких как веб-страницы).
       Далее попробуем раскрыть функции  основных типов прокси-серверов.
     Обратный  прокси - это прокси-сервер, который ставится по соседству с одним или несколькими веб-серверами. Весь трафик, приходящий из Интернета в их направлении проходит через прокси-сервер. Причин для установки обратного прокси-сервера несколько:
    Шифрование, ускорение SSL: часто, при создании защищенных веб-сайтов, SSL-шифрование осуществляется не веб-сервером, а обратным прокси-сервером, снабженным специальным оборудованием для ускорения SSL. Кроме того, один "SSL-прокси" можно использовать для организации шифрования на нескольких веб-серверах, без необходимости получения отдельного сертификата на каждый из них. Недостатком такого способа является необходимость того, чтобы все сервера обладали одним и тем же доменным именем или IP-адресом для SSL подключений.
    Балансировка нагрузки: обратный прокси-сервер может распределять нагрузку между несколькими веб-серверами, при этом веб-сервера могут обслуживать различные области веб-приложения. В таком случае у обратного прокси-сервера может возникнуть потребность в переформировании адресов каждой веб-страницы (преобразование имен ресурсов, доступных снаружи, в имена, доступные во внутренней сети).
    Выдача/кэширование статического содержимого: обратный прокси-сервер может снять нагрузку с веб-серверов за счет кэширования статического содержимого, такого как фотографии или статические графические изображения.
    Сжатие: прокси-сервер может оптимизировать и сжимать передаваемую информацию и, таким образом, увеличивать скорость ее загрузки.
    "Кормление с ложки" уменьшает количество ресурсов, используемых "медленными" клиентами путем кэширования передаваемого веб-сервером содержимого, а затем медленной передачей его клиенту. Весомый выигрыш в экономии ресурсов наблюдается для динамически создаваемых страниц.
    Безопасность: обратный прокси-сервер представляет из себя дополнительный слой безопасности и может защитить некоторые операционные системы, веб-сервера и приложения от специфических атак. Однако, возможности прокси-сервера по защите веб-приложений (а именно веб-приложения подвергаются атакам чаще всего), весьма ограничены.
    Публикация внутренних ресурсов во внешней сети: обратный прокси-сервер, имеющий выход в Интернет, можно использовать для предоставления доступа к закрытым брандмауэрам внутренним серверам компании, без необходимости выведения серверов из под его защиты. При использовании обратного прокси-сервера таким образом следует предпринять дополнительные меры безопасности для того, чтобы защитить внутреннюю инфраструктуру сети, в том случае если сервер будет взломан в результате атаки из Интернет.
     Кэширующий  прокси-сервер ускоряет обработку запросов путем предоставления данных, сохраненных во время предыдущего запроса от того же самого или других клиентов. Кэширующие прокси сохраняют локальные копии часто запрашиваемых ресурсов, позволяя большим организациям существенно снизить расходы на доступ в Интернет и уменьшить потребление полосы пропускания при значительном увеличении быстродействия. Большинство провайдеров и крупных организаций имеют собственный кэширующий прокси. Эти сервера настроены так, чтобы обеспечить максимальную производительность файловой системы (обычно используется RAID с журналированием) и используют "разогнанные" версии протокола TCP. Кэширующие прокси были первым типом прокси-серверов.
 Некоторые  недоработанные прокси-серверы обладают  существенными недостатками (например, не поддерживают аутентификацию пользователя). Некоторые проблемы, связанные с прокси-серверами, описаны в RFC 3143 (Известные проблемы HTTP-прокси/Проблемы кэширования).
 Другим  важным преимуществом использования  прокси-сервера является снижение  общей стоимости необходимого оборудования и программного обеспечения. Организация может контролировать множество узлов при помощи одного прокси-сервера, запрещающего прямое подключение к Интернет каждому из них. В этом случае, отдельные узлы подключаются к единому прокси-серверу, который, в свою очередь, подключен к основному серверу организации.
     Прокси-сервер, который работает с WWW трафиком, называется "веб прокси-сервером". Типичное использование веб-прокси - кэширование страниц. Большинство программных прокси-серверов (например, Squid) предоставляют средства для блокировки доступа к определенным адресам, находящимся в черном списке, таким образом предоставляя возможности фильтрации содержимого. Эта возможность часто используется как в корпоративной, образовательной и библиотечной среде, так и в других местах. Некоторые веб-прокси переформатируют страницы с учетом специфических нужд или аудитории (например, для мобильных телефонов или КПК).
     Веб-прокси, фильтрующий содержимое. Данный тип прокси-сервера предоставляет административный контроль за передаваемым через него содержимым. Обычно, фильтрующий прокси используется в коммерческих и некоммерческих организациях (особенно часто - в школах) для обеспечения того, что использование Интернет соответствует принятым в организации нормам. Однако, в некоторых случаях, несогласные с данными нормами пользователи могут найти способы обхода ограничений, накладываемых прокси-сервером (особенно это касается программных прокси-серверов).
       Наиболее распространенными методами, используемыми для фильтрации содержимого, являются: черные списки URL и DNS, фильтрация по регулярным выражениям, фильтрация по типам MIME и ключевым словам. Некоторые продукты используют специализированные техники для поиска содержимого, обычно предоставляемого определенными типами контент-провайдеров.
       Веб-прокси, фильтрующий содержимое, обычно поддерживает аутентификацию  пользователей для контроля доступа  к веб-ресурсам. Также он ведет  файлы журналов для того, чтобы  предоставить детальную информацию  о ссылках, посещенных пользователями, или для того, чтобы отслеживать статистику использования полосы пропускания. Фильтрующий веб-прокси может взаимодействовать с антивирусной службой, либо с антивирусом, поддерживающим протокол ICAP, для того, чтобы обеспечить защиту от вирусов и других вредоносных программ. Данный вид фильтрации содержимого осуществляется путем сканирования всех входящих данных в реальном времени и их блокировки до того, как они попадут во внутреннюю сеть.
     Анонимный прокси-сервер (иногда называемый веб-прокси) применяется для анонимизации веб-серфинга, т.е. для сокрытия информации о серфере. Существует множество различных вариантов анонимизаторов, наиболее типичным из которых является открытый прокси-сервер. Благодаря тому, что их весьма трудно отследить, открытые прокси особенно полезны тем, кому необходима анонимность в онлайне - от политических диссидентов до кибер-преступников. Некоторые пользователи принципиально соблюдают анонимность, например для обеспечения конституционных прав на свободу слова. Сервер в Интернет получает запросы от анонимного прокси-сервера и таким образом не получает информации об адресе конечного пользователя. Однако, запросы к анонимизирующему прокси-серверу не являются анонимными, поэтому необходима определенная степень доверия прокси-серверу со стороны пользователя. Множество анонимных прокси-серверов финансируются рекламой, демонстрируемой пользователю на протяжении всего сеанса работы.
       Некоторые прокси-серверы требуют  входа. В больших организациях, пользователи должны войти на прокси-сервер прежде чем получить доступ в Интернет. Исходя из этих данных, организация может установить личность, совершившую тот или иной запрос.
       В заголовок запроса некоторые  анонимизирующие прокси-серверы  включают такие строки как  HTTP_VIA, HTTP_X_FORWARDED_FOR или HTTP_FORWARDED, содержащие информацию об IP-адресе клиента. Другие анонимизирующие прокси, также называемые прокси-серверами высокой анонимности, включают в заголовок только одну строку, содержащую IP-адрес прокси-сервера - REMOTE_ADDR. Таким образом серверу в Интернет передается информация о том, что его клиент использует прокси-сервер. Сайт может также заподозрить использование прокси-сервера в том случае, если клиент передает серверу cookie своих предыдущих визитов, во время которых он не использовал прокси-сервер высокой степени анонимности. Очистка cookies и кэша решит эту проблему.
     Враждебный  прокси-сервер. Прокси-сервер можно установить для того, чтобы перехватить поток данных между клиентами и Интернет. Все полученные веб-страницы или отправленные формы данных могут быть сохранены и проанализированы оператором прокси-сервера. По этой причине, пароли к онлайн-сервисам (к электронной почте или клиент-банку) следует передавать по шифрованному каналу связи, например используя SSL.
     Прозрачный прокси (также известный как перехватывающий прокси-сервер) сочетает в себе функции прокси-сервера и шлюза. Соединения, устанавливаемые браузерами клиентов проходят через шлюз, где перенаправляются на прокси-сервер без какой-либо необходимости в настройке клиентских программ (часто, клиентам даже не известно то, что все их запросы проходят через прокси-сервер).
       Прозрачные прокси часто используются  бизнесом для предотвращения  обхода ограничений на использование  Интернет, а также для облегчения  администрирования сети - снимается необходимость настройки браузеров сотрудников.
       Часто можно определить наличие  прозрачного прокси-сервера, сравнив  внешний IP-адрес, с IP-адресом,  определяемым внешними веб-серверами,  либо изучив доступные внешнему  веб-серверу заголовки HTTP.
     Принудительный  прокси-сервер. Термин "принудительный прокси" является двусмысленным. С одной стороны он похож на прозрачный прокси-сервер (так как фильтрует весь трафик, проходящий через шлюз, который запрещает доступ к ресурсам Интернет минуя прокси-сервер), а с другой стороны - прямо противоположен ему, так как требует обязательной настройки со стороны пользователя, которому необходимо получить доступ в Интернет.
       Принудительный прокси-сервер иногда  необходим из-за некоторых проблем  с HTTP, возникающих при перехвате TCP-сессий. Например, перехват HTTP запросов может сильно повлиять на эффективность кэша прокси-сервера, а также на некоторые механизмы аутентификации. В основном, эти проблемы возникают как следствие уверенности клиента в том, что он работает с сервером напрямую и вытекающей из этого невозможности отделить заголовки запроса, необходимые прокси-серверу от заголовков, необходимых вышестоящему серверу (особенно это касается авторизационных заголовков). Кроме того, спецификации HTTP, запрещают кэширование ответов, содержащих авторизационные заголовки.
     Суффиксный  прокси-сервер позволяет получить доступ к веб-страницам приписывая имя прокси-сервера к их адресу (например, "ru.wikipedia.org.statoscope.ru"). Суффиксные прокси-серверы проще в использовании, чем другие виды прокси-серверов.
     Открытый  прокси-сервер отличается от прочих тем, что доступ к ресурсам Интернет при помощи этого прокси-сервера может получить любой желающий. Часто открытые прокси-сервера появляются в результате неверной конфигурации программного обеспечения системным администратором. Открытый прокси-сервер часто используется с враждебными целями, и именно поэтому системные администраторы разработали ряд способов отказать в обслуживании клиенту, работающему через открытый прокси. Множество IRC-сетей автоматически тестируют клиентскую систему на известные типы открытых прокси-серверов. Схожим образом, почтовый сервер может быть настроен на блокировку сообщений, отправленных через открытые прокси.
      IRC группы и операторы электронной почты поддерживают черные списки IP-адресов открытых прокси-серверов (DNSBL). В качестве примеров таких списков можно привести AHBL, CBL, NJABL и SORBS.
       Этика автоматического тестирования  клиентов на работу через открытые  прокси противоречива. Некоторые эксперты полагают, что такое тестирование является аналогом сканирования атакующим портов клиентского компьютера. Другие считают, что клиент одобряет такое сканирование, если подключается к сервису, условия использования которого содержат информацию о наличии такого сканирования.
     SOCKS proxy – прокси сервер передающий абсолютно все данные от клиента к серверу, не изменяя и не добавляя ничего. С точки зрения web-сервера SOCKS proxy является клиентом, т.е. SOCKS proxy анонимны по определению. Имеет подтипы SOCKS4, SOCKS4a, SOCKS5. Чаще всего SOCKS proxy имеют 1080, 1081 номер порта.
     HTTP-прокси — самый распространенный. Он предназначен для организации работы браузеров и других программ, использующих протокол HTTP. Браузер передает прокси-серверу URL ресурса, прокси-сервер получает его с запрашиваемого веб-сервера (или с другого прокси-сервера) и отдает браузеру. У HTTP-прокси широкие возможности при выполнении запросов:
       Можно сохранять полученные файлы  на диске сервера. Впоследствии, если запрашиваемый файл уже скачивался, то можно выдать его с диска без обращения в интернет — увеличивается скорость и экономится внешний трафик (который может быть платным). Эта опция называется кэшированием — именно её очень любят администраторы и пользователи — настолько, что считают её главной функцией прокси. Однако приводимые оценки экономии (в описаниях встречалось от 30 до 60%) слишком оптимистичны, не верьте им. На деле получается не более 10-15% — современный интернет очень динамичен, страницы часто меняются, зависят от работающего с ними пользователя и т.д. — такие данные кэшировать нельзя, веб-серверы обычно вставляют в HTTP-заголовки специальные указания об этом, чтобы браузеры и прокси имели это в виду. Хотя многие прокси-серверы можно настроить так, чтобы эти указания частично игнорировались — например, перечитывать страницу не чаще одного раза в день.
       Можно ограничивать доступ к  ресурсам. Например, завести "черный  список" сайтов, на которые прокси  не будет пускать пользователей  (или определенную часть пользователей, или в определенное время и т.д.). Ограничения можно реализовать по-разному. Можно просто не выдавать ресурс — например, выдавая вместо него страницу "запрещено администратором" или "не найдено". Можно спрашивать пароль и авторизованных пользователей допускать к просмотру. Можно, не спрашивая пароля, принимать решение на основании адреса или имени компьютера пользователя. Условия и действия в принципе могут быть сколь угодно сложными (не во всех прокси, но в нашем точно .
       Можно выдавать не тот ресурс, который запрашивается браузером. Например, вместо рекламных баннеров и счетчиков показывать пользователям прозрачные картинки, не нарушающие дизайн сайта, но существенно экономящие время и трафик за счет исключения загрузки картинок извне.
       Можно ограничивать скорость работы для отдельных пользователей, групп или ресурсов. Например, установить правило, чтобы файлы *.mp3 качались на скорости не более 1кб/сек, чтобы предотвратить забивание вашего интернет-канала трафиком меломанов, но не лишать их полностью этого удовольствия. Эта возможность, к сожалению, есть не во всех прокси. В Eproxy эта возможность есть. Она реализуется дополнением TrafC, который кроме ограничения пропускной способности (скорости) может ограничивать и суммарный трафик.
       Ведутся журналы работы прокси — можно подсчитывать трафик за заданный период, по заданному пользователю, выяснять популярность тех или иных ресурсов и т.д.
       Можно маршрутизировать веб-запросы  — например, часть направлять  напрямую, часть через другие  прокси (прокси провайдера, спутниковые прокси и т.д.). Это тоже помогает эффективнее управлять стоимостью трафика и скоростью работы прокси вцелом.
     HTTPS-прокси – фактически часть HTTP-прокси. S в названии означает “secure”, т.е. безопасный. Не смотря на то, что программно это часть HTTP-прокси, обычно HTTPS выделяют в отдельную категорию (и есть отдельное поле для него в настройке браузеров). Обычно этот протокол – безопасный HTTP – применяют, когда требуется передача секретной информации, например, номеров кредитных карт. При использовании обычного HTTP-прокси всю передаваемую информацию можно перехватить средствами самого прокси (т.е. это под силу администратору ЛС) или на более низком уровне, например, tcpdump (т.е. и администратор провайдера и любого промежуточного узла и вообще любой человек, имеющий физический доступ к маршрутам передачи ваших данных по сети, может при большом желании узнать ваши секреты). Поэтому в таких случаях применяют secure HTTP – всё передаваемое при этом шифруется. Прокси-серверу при этом дается только команда «соединится с таким-то сервером», и после соединения прокси передает в обе стороны шифрованный трафик, не имея возможности узнать подробности (соответственно и многие средства управления доступом – такие как фильтрация картинок – не могут быть реализованы для HTTPS, т.к. прокси в этом случае неизвестно, что именно передается). Собственно в процессе шифрации/дешифрации прокси тоже участия не принимает – это делают клиентская программа и целевой сервер. Наличие команды «соединиться с таким-то сервером» в HTTPS-прокси приводит к интересному и полезному побочному эффекту, которым все чаще пользуются разработчики клиентских программ. Так как после соединения с указанным сервером HTTPS-прокси лишь пассивно передает данные в обе стороны, не производя никакой обработки этого потока вплоть до отключения клиента или сервера, это позволяет использовать прокси для передачи почти любого TCP-протокола, а не только HTTP. То есть HTTPS-прокси одновременно является и простым POP3-прокси, SMTP-прокси, IMAP-прокси, NNTP-прокси и т.д. – при условии, что соответствующая клиентская программа умеет так эксплуатировать HTTPS-прокси (увы, далеко не все еще это умеют, но есть вспомогательные программы, «заворачивающие» трафик обычных клиентов через HTTPS-прокси). Никаких модификаций целевого сервера не требуется. Фактически HTTPS-прокси является программируемым mapping-proxy, как и Socks-proxy.
     FTP-прокси бывает двух основных видов в зависимости от протокола работы самого прокси. С ftp-серверами этот прокси, конечно, всегда работает по протоколу FTP. А вот с клиентскими программами – браузерами и ftp-клиентами (CuteFTP, FAR, и др.) прокси может работать как по FTP, так и по HTTP. Второй способ удобнее для браузеров, т.к. исторически является для них «родным». Браузер запрашивает ресурс у прокси, указывая протокол целевого сервера в URL – http или ftp. В зависимости от этого прокси выбирает протокол работы с целевым сервером, а протокол работы с браузером не меняется – HTTP. Поэтому, как правило, функцию работы с FTP-серверами также вставляют в HTTP-прокси, т.е. HTTP-прокси, описанный выше, обычно с одинаковым успехом работает как с HTTP, так и с FTP-серверами. Но при «конвертации» протоколов FTP<->HTTP теряется часть полезных функций протокола FTP. Поэтому специализированные ftp-клиенты предпочитают и специальный прокси, работающий с обеими сторонами по FTP. В различных приложениях это называется этот прокси FTP-gate, чтобы подчеркнуть отличие от FTP-прокси внутри HTTP-прокси. Хотя встречаются и вносящие путаницу названия. Например, в программе CuteFTP FTP-gate называют firewall, хотя FireWall в общем случае – это вообще не прокси, а фактически программа обратного назначения – не для подключения к интернету, а для изоляции от него Для прокси в FireWall оставляют специальные «дыры». FTP-gate поддерживают различные способы указания в FTP-протоколе целевого сервера, с которым FTP-клиент хочет работать, в настройке FTP-клиентов обычно предлагается выбор этого способа.
     Здесь USER user@site, OPEN site, и т.д. – способ указания сервера, с которым производится работа. Такое многообразие связано с тем, что нет общепринятого стандарта на этот вид прокси, и применяются такие хитрые добавки к стандартным командам FTP-протокола.
     Mapping-прокси — способ заставить работать через прокси те программы, которые умеют работать с интернетом только напрямую. При настройке такого прокси администратор создает как бы "копию" целевого сервера, но доступную через один из портов прокси-сервера для всех клиентов локальной сети — устанавливает локальное "отображение" заданного сервера. Например, пользователи локальной сети хотят работать с почтовым сервером mail.ru не через браузер, а с использованием почтовой программы Outlook Express или TheBat. Эти программы не умеют работать через прокси (кроме случая, когда Outlook получает почту по HTTP с hotmail.com — тогда он, как и браузер, пользуется HTTP-прокси). Простейший способ работать с mail.ru по POP3 через прокси — установить локальное отображение сервера pop.mail.ru. И в Outlook'ах вместо pop.mail.ru написать имя прокси-сервера и порт отображения. Outlook будет соединяться с прокси-сервером ("думая", что это почтовый сервер), а прокси при этом будет соединяться с pop.mail.ru и прозрачно передавать всю информацию между Outlook и pop.mail.ru, таким образом "превращаясь" на время соединения в POP3-сервер. Неудобство mapping-прокси в том, что для каждого необходимого внешнего сервера нужно вручную устанавливать отдельный порт на прокси. Но зато не требуется модификация ни серверов, ни клиентов. Особенно это помогает в случае необходимости "проксирования" многочисленных "доморощенных" протоколов, реализованных в играх или финансовых программах. Почему-то они часто игнорируют существование прокси и стандартных протоколов. Такие программы можно "обмануть" и направить через прокси практически всегда, если они не делают другой глупости — передачи клиентского IP-адреса внутри протокола и пытаются с ним соединяться напрямую еще раз (что невозможно, т.к. локальные адреса недоступны извне).
 


2.3 Сравнение «Кэширующего прокси-сервера» с другими прокси-серверами.
         2.3.1. Squid
      Squid — программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и (в случае соответствующих настроек) HTTPS. Разработан сообществом как программа с открытым исходным кодом (распространяется в соответствии с GNU GPL). Все запросы выполняет как один неблокируемый процесс ввода/вывода.
     Используется  в UNIX-like системах и в ОС семейства Windows NT. Имеет возможность взаимодействия с Active Directory Windows Server путём аутентификации через LDAP, что позволяет использовать разграничения доступа к интернет ресурсам пользователей, которые имеют учётные записи на Windows Server, также позволяет организовать «нарезку» интернет трафика для различных пользователей. Используется вместе с движками Mediawiki на wiki хостингах. Использование кэширующего прокси-сервера становится выгодно примерно с 2000 посетителей в сутки.
     Squid имеет возможность переписывать  запрашиваемые URL. Squid может быть  сконфигурирован так, чтобы пропускать входящие URL через процесс редиректора выполняемого как внешний процесс (подобно dnsserver), который возвращает новый URL или пустую строку, обозначающую отсутствие изменений. Редиректор не является стандартной частью пакета Squid. Редиректор предоставляет администратору контроль за передвижениями пользователей. Использование редиректора в сочетании с прозрачным проксированием дает простой, но эффективный контроль, над доступом к нежелательным ресурсам (например к развлекательным ресурсам и социальным сетям в корпоративной сети, порнографии). Программа-редиректор должна читать URL (один на строку) со стандартного входа и записывать измененные URL или пустые строки на стандартный выход. Нужно заметить, что программа-редиректор не может использовать буферизированный ввод/вывод. Squid дописывает дополнительную информацию после URL, которую редиректор может использовать для принятия решения.
      Главным достоинством squid является его модульность. Существует множество надстроек, которые существенно повышают степень надежности соединения и безопасности.
    SQUID Account Management System(SAMS) - программное средство для администрирования доступа пользователей к прокси-серверу SQUID, сбора статистики и генерации отчетов о потреблении трафика.
    SAMS - это система для управления доступа пользователей через прокси сервер к ресурсам интернет. Она идеально подходит для использования как в частных фирмах так и в госудаственных учереждениях. Всю работу по проксированию, перенаправлению запросов, кэшированию и авторизации берет на себя proxy-сервер  Squid а SAMS занимается учетом трафика и управлением пользователями.
    NeTAMS позволяет контролировать расходы на использование сети Интернет сотрудниками, получать статистику по трафику, устанавливать ограничения.
И многие другие… 
 

К недостаткам  SQUID можно отнести:
    Отсутствие полной функциональности в среде ОС семейства Windows, т.е. многие компоненты невозможно установить.
    Негибкие настройки. В случае внесения изменений в конфигурацию необходимо перезапускать службу (а в отдельных случаях и весь сервер)
    Усложненная настройка правил.
     В программе «Кэширующий прокси-сервер»  файлы правил достаточно просты для  понимания.
         2.3.2. DeleGate
DeleGate - Многоцелевой прокси-сервер, работающий с различными TCP-, UDP-протоколами, такими как HTTP, HTTPS, FTP, NNTP, SMTP, SOCKS, IMAP, ICP и т. д. Delegate работает как прокси уровня приложения (application-level), который пропускает через себя различные протоколы, производя необходимые изменения в данных. Также Delegate может быть использован как прокси для передачи любых данных между клиентом и сервером по протоколам TCP, UDP. Являясь прокси уровня приложения, Delegate обеспечивает виртуальное представление ресурсов, расположенных на различных серверах. В случаях HTTP, FTP, NNTP, Delegate может выступать самостоятельным сервером. Поддерживается фильтрация данных. Для фильтрации используется собственный интерфейс CFI (Common Filtering Interface). В качестве фильтров могут быть использованы как внутренние средства Delegate, так и обычные внешние приложения (sed, awk...), работающие со стандартным вводом/выводом. В случае когда Delegate выступает в качестве HTTP прокси-сервера, для хранения объектов может быть использован постоянный кэш, размещенный на диске. Поддержка протокола ICP позволяет эффективнее взаимодействовать с другими кэш-серверами. Авторизация пользователей, если она необходима, происходит через PAM и собственную службу авторизации DGAuth.
     Для ограничения загрузки сервера поддерживается ограничение по количеству соединений, тайм-ауту. Если взглянуть на Delegate, создается ощущение, что он представляет собой гигантский запутанный конструктор, из которого можно смастерить практически любой прокси-сервис.
     Тем не менее функциональности для кэширующего  прокси недостаточно.
     Прозрачное HTTP-проксирование поддерживается не полностью, поскольку реализация опирается только на данные «Host:» HTTP-заголовка, а он не всегда присутствует. Не поддерживаются протоколы WCCP, CARP. Вместо стандартного протокола ICAP поддерживается свой собственный интерфейс фильтрации, что затрудняет встраивание стандартных сервисов фильтрации и аудита. Не поддерживаются схемы авторизации NTLM, MSNT, что затрудняет интеграцию в сеть, построенную на технологии Windows.
     Скажем  несколько слов об архитектуре Delegate. Сервер каждого протокола работает в отдельном процессе и при каждом соединении с пользователем порождает новый процесс.
     Для пересылки информации по каналу данных в протоколе FTP создаются дополнительные процессы. Фильтры также создают  дополнительные процессы для запуска внешних программ фильтрации. Скорость работы таких фильтров оставляет желать лучшего. Когда количество клиентов достигает хотя бы тысячи, создается большое количество процессов, что ведет к неразумному расходу ресурсов и большой загрузке системы.
     Несмотря  на все перечисленные недостатки, Delegate может быть весьма полезен в  небольших сетях для решения  простых задач, поскольку весьма прост в конфигурации. В таких  сетях загрузка прокси будет небольшой, и проблемы с производительностью  не возникнут.
     Большинство офисных ПК работают под управлением  ОС семейства Windows(как правило, Windows XP SP3), именно поэтому данный продукт не подойдет для данных сетей. «Кэширующий прокси-сервер» способен  обслуживать как ПК под управлением Windows, так и UNIX-подобных систем.
         2.3.3. WinGate
WinGate - один из популярных прокси-серверов, позволяющий нескольким пользователям локальной сети получить доступ в Интернет.
 К  положительным сторонам Wingate относятся  его стабильность и простота  установки, настройки и использования. Реализована поддержка всех новейших протоколов и возможностей.
     К недостаткам можно отнести:
    Невозможность работы в корпоративных сетях.
    Слабая защищенность пользователей от внешних угроз
     Данный  прокси-сервер не может корректно работать с запросами более чем  25 машин и число коллизий возрастает до 10%. В «Кэширующем прокси-сервере» эта проблема решена путем расширения таблиц кэширования. 
 
 

     2.3.4. UserGate
UserGate - это комплексное решение для подключения пользователей к сети Интернет, обеспечивающее полноценный учет трафика, разграничение доступа и предоставляющее встроенные средства сетевой защиты.
UserGate позволяет  тарифицировать доступ пользователей  к сети Интернет, как по трафику,  так и по времени работы  в сети. Администратор может добавлять различные тарифные планы, осуществлять динамическое переключение тарифов и регулировать доступ к ресурсам Интернет. Встроенный межсетевой экран и антивирусный модуль позволяют защищать сервер UserGate и проверять проходящий через него трафик на наличие вредоносного кода.
      UserGate состоит из нескольких частей: сервер, консоль администрирования  («UserGate Administrator») и несколько дополнительных  модулей. Сервер UserGate (процесс usergate.exe) - это основная часть прокси - сервера,  в которой реализованы все его функциональные возможности. Сервер UserGate предоставляет доступ в сеть Интернет, осуществляет подсчет трафика, ведет статистику работы пользователей в сети и выполняет многие другие задачи. Консоль администрирования UserGate - это программа, предназначенная для управления сервером UserGate. Консоль администрирования UserGate связывается с серверной частью по специальному протоколу поверх TCP/IP, что позволяет выполнять удаленное администрирование сервера.
      UserGate включает четыре дополнительных  модуля: «Статистика UserGate», «Веб-статистика», «Клиент авторизации UserGate» и модуль «Контроль приложений».
     Данный  прокси-сервер является весьма популярным программным продуктом на IT-рынке
     К недостаткам можно отнести:
    Достаточно высокая стоимость программного продукта.
    Сложность настройки NAT.
     UserGate является отличным решением для однородных сетей Windows. Однако его стоимость достаточно высока, и не каждый руководитель может себе позволить себе оплатить расходы на ее эксплуатацию. «Кэширующий прокси сервер» задумывался как бесплатное ПО с открытым кодом.
         2.3.5. Traffic Inspector
Traffic Inspector  - позволяет решить большинство задач, возникающих при подключении к Интернет по выделенному каналу: обеспечение доступа в сеть Интернет из внутренней сети; авторизация и разграничение доступа пользователей; билинг ( тарификация пользователей, подсчет трафика и блокировка доступа при перерасходе); обеспечение пользователей средствами экономии трафика и предоставление возможности самостоятельно контролировать свою работу в Интернет; сетевая защита (Firewall), позволяющая закрыть сервер доступа и внутреннюю сеть от несанкционированного доступа извне; подробный анализ сетевого трафика, потребляемого у провайдера; динамическое ограничение скорости работы пользователей или их групп; Advanced Routing (Policy Routing или Source Routing) — возможность гибкой настройки перенаправления разных пользователей и видов трафика на разные каналы доступа; отключение пользователей от сети Интернет при заражениях сетевыми вирусами и др. 

 

   Основным недостатком данного  прокси-сервера является его низкая устойчивость к сбоям даже в сетях малого офиса. В случае внезапной остановки службы сервера необходимо перезапускать все машины в локальной сети за минимальный промежуток времени.  
 

 

      Архитектура приложения.
 
      Обоснование выбора языка программирования
     Программный продукт «Кэширующий прокси-сервер» был разработан в среде Code::Blocks на языке программирования C. Так же были использованы сторонние библиотеки POSIX для реализации некоторых функций присущих только UNIX-подобным системам.
     Язык  С - это универсальный язык программирования, для которого  характерны  экономичность  выражения,  современный набор операторов и типов данных.  Язык  С  не  является  ни языком  "очень  высокого  уровня", ни "большим" языком, и не предназначается для некоторой специальной  области  применения,  но  отсутствие ограничений и общность языка делают его для многих задач более удобным  и  эффективным,  чем  языки, предположительно более мощные. 
       Язык С не связан с какими-либо определенными аппаратными средствами или  системами,  и на  нем легко писать программы, которые можно пропускать без изменений на любой ЭВМ, имеющей С-компилятор.
       Язык С является универсальным языком программирования. Он  первоначально  появился  в  операционной системе UNIX, и развивался как основной язык систем, совместимых с ОС  UNIX. Сам язык, однако, не связан с какой-либо одной операционной системой или машиной; и хотя его называют языком  системного программирования, так как он удобен для написания операционных систем, он может использоваться  для написания любых больших  вычислительных  программ,  программ  для  обработки текстов и баз данных.
     Язык  С - это язык относительно "низкого  уровня".   Это означает,  что Си имеет дело с объектами того же вида, что и большинство ЭВМ, а именно, с символами, числами и адресами. Они  могут  объединяться  и пересылаться посредством обычных арифметических и логических операций, осуществляемых  реальными ЭВМ.
          В языке Си отсутствуют операции,  имеющие  дело  непосредственно   с составными объектами, такими как строки символов, множества, списки или с массивами, рассматриваемыми как целое. Здесь, например, нет никакого аналога операциям PL/1, оперирующим с массивами и строками.  Язык  не  предоставляет никаких других возможностей распределения памяти, кроме статического определения и  механизма  стеков,  обеспечиваемого локальными переменных функций.  Сам по себе язык С не обеспечивает никаких возможностей ввода-вывода.  Все  эти  механизмы высокого уровня должны обеспечиваться явно вызываемыми функциями.
          Аналогично, язык Си предлагает  только простые, последовательные  конструкции управления: проверки, циклы, группирование и подпрограммы, но не  мультипрограммирование,  параллельные операции, синхронизацию или сопрограммы.
          Удержание языка в скромных размерах дает реальные преимущества.  Так как С относительно мал, он не требует много места для  своего  описания  и  может  быть  быстро  выучен.
      Протокол TCP
    Transmission Control Protocol (TCP) (протокол управления  передачей) — один из основных сетевых протоколов Интернета, предназначенный для управления передачей данных в сетях и подсетях TCP/IP.Выполняет функции протокола транспортного уровня модели OSI.
    
                Рисунок 3.2.1 Структура  заголовка TCP пакета
    TCP — это транспортный механизм, предоставляющий поток данных, с предварительной установкой соединения, за счёт этого дающий уверенность в достоверности получаемых данных, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета (см. также T/TCP). В отличие от UDP гарантирует, что приложение получит данные точно в такой же последовательности, в какой они были отправлены, и без потерь.
    Реализация TCP, как правило, встроена в ядро системы, хотя есть и реализации TCP в контексте приложения.
    Когда осуществляется передача от компьютера к компьютеру через Интернет, TCP работает на верхнем уровне между двумя  конечными системами, например, веб-обозреватель и веб-сервер. Также TCP осуществляет надежную передачу потока байтов от одной программы на некотором компьютере к другой программе на другом компьютере. Программы для электронной почты и обмена файлами используют TCP. TCP контролирует длину сообщения, скорость обмена сообщениями, сетевой трафик.
    В отличие от традиционной альтернативы — UDP, который может сразу же начать передачу пакетов, TCP устанавливает соединения, которые должны быть созданы перед передачей данных. TCP соединение можно разделить на 3 стадии:
    Установка соединения
Процесс начала сеанса TCP называется «тройным рукопожатием».
     1. Клиент, который намеревается установить  соединение, посылает серверу сегмент  с номером последовательности  и флагом SYN.
     Сервер  получает сегмент, запоминает номер  последовательности и пытается создать  сокет (буферы и управляющие структуры памяти) для обслуживания нового клиента.
     В случае успеха сервер посылает клиенту  сегмент с номером последовательности и флагами SYN и ACK, и переходит в  состояние SYN-RECEIVED.
     В случае неудачи сервер посылает клиенту  сегмент с флагом RST.
     2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK.
     Если  он одновременно получает и флаг ACK (что обычно и происходит), то он переходит  в состояние ESTABLISHED.
     Если  клиент получает сегмент с флагом RST, то он прекращает попытки соединиться.
     Если  клиент не получает ответа в течение 10 секунд, то он повторяет процесс  соединения заново.
     3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние  ESTABLISHED.
     В противном случае после тайм-аута он закрывает сокет и переходит в состояние CLOSED.
    Передача данных
При обмене данными приемник использует номер  последовательности, содержащийся в  получаемых сегментах, для восстановления их исходного порядка. Приемник уведомляет передающую сторону о номере последовательности, до которой он успешно получил данные, включая его в поле «номер подтверждения». Все получаемые данные, относящиеся к промежутку подтвержденных последовательностей, игнорируются. Если полученный сегмент содержит номер последовательности больший, чем ожидаемый, то данные из сегмента буферизируются, но номер подтвержденной последовательности не изменяется. Если впоследствии будет принят сегмент, относящийся к ожидаемому номеру последовательности, то порядок данных будет автоматически восстановлен исходя из номеров последовательностей в сегментах.
Для того, чтобы передающая сторона не отправляла данные интенсивнее, чем их может  обработать приемник, TCP содержит средства управления потоком. Для этого используется поле «окно». В сегментах, направляемых от приемника передающей стороне в поле «окно» указывается текущий размер приемного буфера. Передающая сторона сохраняет размер окна и отправляет данных не более, чем указал приемник. Если приемник указал нулевой размер окна, то передача данных в направлении этого узла не происходит, до тех пор, пока приемник не сообщит о большем размере окна.
В некоторых  случаях передающее приложение может  явно затребовать протолкнуть данные до некоторой последовательности принимающему приложению, не буферизируя их. Для этого используется флаг PSH. Если в полученном сегменте обнаруживается флаг PSH, то реализация TCP отдает все буферизированные на текущий момент данные принимающему приложению. «Проталкивание» используется, например, в интерактивных приложениях. В сетевых терминалах нет смысла ожидать ввода пользователя после того, как он закончил набирать команду. Поэтому последний сегмент, содержащий команду, обязан содержать флаг PSH, чтобы приложение на принимающей стороне смогло начать её выполнение.
    Завершение соединения
    Завершение  соединения можно рассмотреть в  три этапа:
     - Посылка серверу от клиента флагов FIN и ACK на завершение соединения.
     - Сервер посылает клиенту флаги ответа ACK , FIN, что соединение закрыто.
     - После получения этих флагов клиент закрывает соединение и в подтверждение отправляет серверу ACK , что соединение закрыто.
    3.3 Формат заголовка HTTP
    Заголовки HTTP (HTTP Headers) — это строки в HTTP-сообщении, содержащие разделённую двоеточием пару имя-значение. Формат заголовков соответствует общему формату заголовков текстовых сетевых сообщений ARPA (см. RFC 822). Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.
    Примеры заголовков:
    Server: Apache/2.2.11 (Win32) PHP/5.3.0
    Last-Modified: Sat, 16 Jan 2010 21:16:42 GMT
    Content-Type: text/plain; charset=windows-1251
    Content-Language: ru
    В примере выше каждая строка представляет собой один заголовок. При этом то, что находится до первого двоеточия, называется именем (name), а что после неё — значением (value).
    Все заголовки в протоколе HTTP разделяются на четыре основных группы:
    General Headers (Основные заголовки) — должны включаться в любое сообщение клиента и сервера.
    Request Headers (Заголовки запроса) — используются только в запросах клиента.
    Response Headers (Заголовки ответа) — только для ответов от сервера.
    Entity Headers (Заголовки сущности) — сопровождают каждую сущность сообщения.
    Именно  в таком порядке рекомендуется  посылать заголовки получателю.
    В отдельный класс заголовки сущности выделены для того, чтобы не путать их с заголовками запроса или заголовками ответа при передаче множественного содержимого. Заголовки запроса и ответа, как и основные заголовки, описывают всё сообщение в целом и размещаются только в начальном блоке заголовков, в то время как заголовки сущности характеризуют содержимое каждой части в отдельности, располагаясь непосредственно перед её телом.
    Все необходимые для функционирования HTTP заголовки описаны в основных RFC. При этом если не будет хватать существующих, то можно смело вводить свои. Традиционно к именам таких дополнительных заголовков добавляют префикс «X-» для избежания конфликта имён с возможно существующими. Например, как в заголовках X-Powered-By или X-Cache. Некоторые разработчики используют свои индивидуальные префиксы. Примерами таких заголовков могут служить Ms-Echo-Request и Ms-Echo-Reply, введённые корпорацией Microsoft для расширения WebDAV.
Общий формат  Название: Значение
    Название  параметра должно состоять минимум  из одного печатного символа (ASCII-коды от 33 до 126). Регистр символов в названиях не имеет значения. Заголовки с неизвестными именами должны игнорироваться. После названия сразу должен следовать символ двоеточия.
    Значение  может содержать любые символы ASCII кроме перевода строки (код 10) и возврата каретки (код 13). Пробельные символы в начале и конце значения обрезаются. Последовательность нескольких пробельных символов внутри значения может восприниматься как один пробел. Регистр символов также не имеет значения (если иное не предусмотрено форматом поля).
    Предусматривается размещение значения на нескольких строках (перенос строки). Для указания переноса в начале следующей строки должен находиться хотя бы один пробельный символ.
    Заголовки с одинаковыми названиями параметров, но разными значениями могут объединяться в один, только если значение поля представляет собой разделённый запятыми список. Во всех остальных случаях значения более дальних заголовков должны перекрывать предыдущие. Поэтому прокси-серверы не должны менять порядок следования заголовков в сообщении. При этом порядок элементов списка обычно значения не имеет.
    Пример  с многострочными значениями и одинаковыми  именами заголовков:
    content-type: text/html;
    charset=windows-1251
    Allow: GET, HEAD
    Content-Length: 356
    ALLOW: GET, OPTIONS
    Content-Length:   1984
    Правильный  компактный вариант преобразования и интерпретации:
    Content-Type: text/html;charset=windows-1251
    Allow: GET,HEAD,OPTIONS
    Content-Length: 1984
    В этом случае не допустимо принимать  значение Content-Length равное 356. При объединении значений Allow чтобы не потерять семантический смысл была добавлена запятая в конец первого поля и убран бессмысленно дублирующийся элемент «GET».
    Язык  разметки HTML позволяет задавать необходимые  значения заголовков HTTP внутри <HEAD> с помощью тега <META>. При этом название заголовка указывается  в атрибуте http-equiv, а значение — в content. Почти всегда выставляется значение заголовка Content-Type с указанием кодировки чтобы избежать проблем с отображением текста браузером. Так же не лишним является указание значения заголовка Content-Language.
     3.4. Сокеты
     BSD-сокеты (разработанные сотрудниками Калифорнийского университета в Беркли) – это программный интерфейс для межпроцессорных коммуникаций (IPC). Именно этот интерфейс чаще всего используется для реализации сетевого взаиможействия между компьютерами. Протоколы Internet Protocol версии 4(IPv4), User Datagram Protocol (UDP), Transmission Control Protocol (TCP) и другие, в совокупности именуемые TCP/IPv4, - это стандарт де-факто для обмена данными между процессами, работающими на разных компьютерах в сети. А для доступа к этим протоколам из программы применяются BSD-сокеты.
     Сокеты  позволяют реализовать различные  модели межпроцессного взаимодействия: один с одним, один с многими, многие с многими. Их называют еще двухточечной моделью, широковещанием и групповым  вещанием.
     Интерфейс BSD-сокетов – это набор функций и типов данных. Впервые он появился в операционной системе BSD UNIX в начале 1980-х годов, а теперь включен почти во все варианты системы UNIX и поддерживается также на платформе Microsoft Windows (Winsock).
     API сокетов широко применяется в программах на языке C для реализации взаимодействия по протоколам TCP и UDP. Существует два основных вида приложений, в котрых используются сокеты: клиент и сервер. Клиентские приложения создают оконечную точку коммуникации и инициируют сеанс связи с удаленным серверным приложением. Напротив, серверное приложение пассивно ожидает запросов от клиента.
     И для клиента, и для сервера  важна идея оконечной точки коммуникации, которая называется «сокетом». Сокет  однозначно идентифицирует соединение м помощью функции socket(). Роль сокета затем уточняется с помощью функций connect() или accept(). Так или иначе, клиентская оконечная оконечная точка соединяется с серверной, после чего может начаться обмен данными. В случае протоколов UDP и TCP сокет представляет собой комбинацию адреса и порта локального компьютера с адресом и портом удаленного компьютера.
     Типичная  последовательность создания клиентского  сокета начинается с вызова функции  socket(), которая запрашивает ресурсы у операционной системы и получает от нее, в частности, дескриптор сокета и номер локального порта. Затем надлежит определить адрес и номер порта удаленного хоста, с которым требуется установить соединение. Само соединение устанавливается путем вызова функции connect(). Если операция выполнилась успешно, то можно передавать данные. Для чтения из локального порта служат функции read() и recv(), а для записи в удаленный порт – функции write() и send(). 

3.5. Разработка структуры приложения 

     Для корректного функционирования приложения и отсутствия простоев в ожидании освобождения канала необходимо разделить приложение на два потока: серверный и клиентский. Так для каждого нового подключения программа будет создавать новый экземпляр.
     Так же нам понадобятся сокеты. Точнее Winsock. Сокеты определяют конечные точки взаимодействия (обычно через сеть). Они поддерживают целый ряд протоколов, самыми популярными из которых сегодня являются User Datagram Protocol (UDP) и Transmission Control Protocol (TCP).
     Потоку  сервера понадобится информация о том, на каком порте ему работать, какой каталог будет выбран для кэширования, таймаут и количество записей в кэше. Эта информация будет помещена в отдельный файл.
     При запуске приложения серверный поток  создает сокет и запускается  прослушивание подключений на порте, указанном пользователем. А бесконечный цикл  будет принимать все входящие соединения. Если получен корректный сокет, то создается еще один клиентский поток. В этом потоке будет происходить непосредственное общение между клиентом и сервером. Поток будет выступать для клиента посредником для доступа к веб-страницам.
     Когда клиент подключается к прокси-серверу, он посылает стандартный HTTP-запрос на получение какого-либо файла. Далее происходит считывание заголовка. На этом этапе также происходит обращение к таблицам для проверки совпадений. Если найдется запись соответствующая запросу, то клиенту отправятся данные, которые хранятся в кэше сервера. Если же эти данные не будут обнаружены, либо файл будет поврежден, то запрос будет отправлен веб-серверу.
и т.д.................


Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.