Сетевые модели, протоколы и архитектура «клиент – сервер»




 

Сеть – это структура, позволяющая вычислительным машинам взаимодействовать между собой, отправлять и принимать данные и команды. Сети включают в себя компьютеры, среду передачи информации и, как правило, дополнительное сетевое оборудование, делятся на локальные (LAN, Local Area Network) и глобальные (WAN, Wide Area Network) сети. Для того чтобы компьютеры и сетевое оборудование могли понимать друг друга, были разработаны протоколы компьютерных сетей.

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

Модель сети – теоретическое описание принципов работы набора сетевых протоколов, взаимодействующих друг с другом. Модель обычно делится на уровни, так, чтобы протоколы вышестоящего уровня использовали бы протоколы нижестоящего уровня (точнее, данные протокола вышестоящего уровня передавались бы с помощью нижележащих протоколов – этот процесс называют инкапсуляцией, процесс извлечения данных вышестоящего уровня из данных нижестоящего – деинкапсуляцией). Модели бывают как практические (использующиеся в сетях, иногда запутанные и/или не полные, но решающие поставленные задачи), так и теоретические (показывающие принципы реализации сетевых моделей, приносящие в жертву наглядности производительность/возможности).

Наиболее известные сетевые модели:

1. модель OSI – теоретическая, эталонная модель, описанная в международных стандартах;

2. модель DOD (Модель TCP/IP) – практически использующаяся модель, принятая для работы в Интернете.

3. модель AppleTalk – модель работы сетей с оборудованием фирмы Apple;

4. модель SPX/IPX – модель стека SPX/IPX (семейство протоколов для локальных вычислительных сетей).

Международная организация по стандартизации (International Organization for Standardization, ISO) приняла в качестве эталонной сетевой модели OSI (Open Systems Interconnection Basic Reference Model, базовая эталонная модель взаимодействия открытых систем; 1978 г.). Модель OSI предлагает взгляд на компьютерную сеть с точки зрения измерений. Каждое измерение обслуживает свою часть процесса взаимодействия. Благодаря такой структуре совместная работа сетевого оборудования и программного обеспечения становится гораздо проще и прозрачнее.

Состоит из семи уровней протоколов. Приложения обращаются с сетью с помощью седьмого уровня, называемого прикладным. Модель OSI заканчивается первым уровнем — физическим, на котором определены стандарты, предъявляемые независимыми производителями к средам передачи данных:

1. тип передающей среды (медный кабель, оптоволокно, радиоэфир и др.),

2. тип модуляции сигнала,

3. сигнальные уровни логических дискретных состояний (нуля и единицы).

Соответственно, информация последовательно передается от прикладного уровня к физическому при передаче и, наоборот, от физического к прикладному при приеме. Это можно сравнить с работой почты. Письмо – пакет информации самого высокого уровня, ближе всего к адресату и отправителю, вкладывается, то есть инкапсулируется, в конверт. Конверт с адресом и индексом – более низкий уровень, дальше от пользователей почты. Он упаковывается в контейнер, вместе с другими конвертами, которые уйдут в том же направлении. Затем контейнер помещается в почтовый вагон поезда. Поезд доставляет контейнер в нужный город, там его разгружают, вынимают из него конверт и доставляют по нужному адресу. А получатель может вынуть из конверта само письмо и прочесть. Примерно так же происходит с пакетами информации.

Любой протокол модели OSI должен взаимодействовать либо с протоколами своего уровня, либо с протоколами на единицу выше и/или ниже своего уровня. Взаимодействия с протоколами своего уровня называются горизонтальными, а с уровнями на единицу выше или ниже — вертикальными. Любой протокол модели OSI может выполнять только функции своего уровня и не может выполнять функций другого уровня, что не выполняется в протоколах альтернативных моделей.

Уровни модели OSI:

1. Физический (physical) – на этом уровне осуществляется работа со средой передачи, сигналами и двоичными данными;

2. Канальный (data link) – осуществляется физическая адресация устройств в сети;

3. Сетевой (network) – происходит определение маршрута и логическая адресация устройств;

4. Транспортный (transport) – осуществляется Прямая связь между конечными пунктами и обеспечивается надежность передачи данных;

5. Сеансовый (session) – происходит управление сеансом связи;

6. Представительский (presentation) – обеспечивается представление и шифрование данных;

7. Прикладной (application) – организуется доступ приложение к сетевым службам.

Каждому уровню с некоторой долей условности соответствует свой операнд — логически неделимый элемент данных, которым на отдельном уровне можно оперировать в рамках модели и используемых протоколов: на физическом уровне мельчайшая единица — бит, на канальном уровне информация объединена в кадры, на сетевом — в пакеты (датаграммы), на транспортном — в сегменты. Любой фрагмент данных, логически объединённых для передачи — кадр, пакет, датаграмма — считается сообщением. Именно сообщения в общем виде являются операндами сеансового, представительского и прикладного уровней.

К базовым сетевым технологиям относятся физический и канальный уровни.

Для запоминания названий 7-и уровней модели OSI на русском языке рекомендуют использовать фразу “ П росто п редставь с ебе т ачку, с тремящуюся к ф инишу”, в которой первые буквы слов соответствуют первым буквам названий уровней.

Несмотря на то, что эталонная модель OSI в настоящее время является общепризнанной, исторически и технически открытым стандартом сети Internet являются протокол управления передачей (Transmission Control Protocol — TCP) и Internet-протокол (IP), которые обычно рассматриваются как одно целое и обозначаются TCP/IP. Эталонная модель TCP/IP, разработанная ещё до принятия модели OSI и вне связи с ней, и стек протоколов TCP/IP позволяют организовать связь между двумя компьютерами, расположенными в любых точках земного шара, со скоростью, близкой к скорости света.

Министерство обороны США (Department of Defence — DoD) создало почву для разработки эталонной модели TCP/IP, поскольку оно требовало, чтобы сеть продолжала функционировать в любых условиях, даже в случае ядерной войны. Для более наглядной иллюстрации представим себе мир, находящийся в состоянии ядерной войны, и пронизанный самыми разными типами соединений, включая проводные, микроволновые соединения, оптоволоконные кабели и спутниковую связь.

Предположим далее, что требуется, чтобы информация и данные (в виде пакетов) надежно передавались по этой сети независимо от состояния любого конкретного узла этой сети или состояния другой сети (которая в данном случае может быть уничтожена в ходе военных действий). Министерство обороны требовало, чтобы в любых условиях его данные продолжали передаваться по сети между любыми точками. Эта весьма сложная задача проектирования устойчивой сети привела к созданию сетевой модели TCP/IP (модели DoD), которая с тех пор стала стандартом, на базе которого выросла глобальная сеть Internet. При изучении уровней модели TCP/IP следует помнить о первоначальных целях, которые ставились перед сетью Internet; это поможет понять некоторые, возможно, неясные аспекты проблемы.

Уровни сетевой модели TCP/IP (модели DoD)

Сетевая модель TCP/IP имеет четыре уровня:

Уровень 4 — прикладной уровень или уровень приложений (application);

Уровень 3 — транспортный уровень (transport);

Уровень 2 — межсетевой или Internet-уровень (network);

Уровень 1 — канальный или уровень доступа к сети (data link).

Необходимо отметить, что некоторые уровни модели TCP/IP имеют те же названия, что и у уровней эталонной модели OSI. Однако не следует отождествлять одноименные уровни этих двух моделей. Функции одноименных уровней обеих моделей могут совпадать, но могут и различаться.

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

Самый нижний уровень модели DOD называется уровнем сетевого доступа (Network Access). Он соответствует двум уровням модели OSI: физическому и канальному. Уровень сетевого доступа отвечает за доставку данных к физическим сетевым устройствам, таким как сетевые адаптеры, в виде кадров (фреймов, от англ. Frame). На нем работают такие протоколы, как Ethernet, IEEE 802.11 (известный как Wi-Fi) и 802.16 (WiMAX), а также некоторые другие, не столь привычные для большинства пользователей. Они служат для того же, для чего обыкновенной почте нужны поезда, самолеты и курьеры, – то есть выступают в качестве транспорта.

На следующем, втором уровне модели DOD происходит передача сообщений между сетями, в том числе разнородными по устройству. Этот уровень называется Internet (межсетевой) и сопоставляется сетевому уровню модели OSI. Именно здесь используется протокол IP, отвечающий за доставку пакетов информации в современных компьютерных сетях, в том числе в глобальной сети Интернет. Протокол IP не гарантирует доставку всех пакетов данных в той последовательности, в какой они были отправлены. Пакет может потеряться по дороге, или, наоборот, продублироваться, или прийти не в свою очередь – протокол IP не имеет контроля за такими ошибками.

Поэтому выше располагаются протоколы транспортного уровня (Transport) модели DOD, который соответствует одноименному уровню OSI. Два самых известных протокола транспортного уровня – TCP и UDP.

Верхний, четвертый уровень DOD охватывает целых три уровня модели OSI (сеансовый, уровень представления и прикладной). Это прикладной уровень, здесь расположены протоколы доставки веб-контента (http, HTTPS), файлов (FTP, BitTorrent), электронной почты (POP3, IMAP), а также удаленного администрирования (SSH, Telnet). Все эти, а также многие другие протоколы инкапсулируются в TCP и UDP. Для определения протокола прикладного уровня, по которому передается конкретный сегмент данных TCP или UDP, каждому протоколу верхнего уровня приписан определенный порт TCP и / или UDP, иногда несколько.

Порт – это номер, который по возможности однозначно сопоставляется с протоколом верхнего уровня. Сопоставлением портов TCP и UDP с определенными протоколами прикладного уровня занимается IANA (Internet Assigned Numbers Authority, Администрация адресного пространства Интернет). Примеры некоторых портов приведены в таблице 2.4.1.

 

Таблица 2.4.1 – Примеры некоторых портов для протоколов прикладного уровня

Протокол прикладного уровня Используемые порты
HTTP 80, 8080 TCP
HTTPS 443 TCP
FTP 20 (данные), 21 (команды) TCP
SSH, SFTP 22 TCP, UDP
DNS 53 TCP, UDP
POP3 110 TCP
ICQ 5190 TCP

 

Каждый сегмент данных TCP или UDP надписывается номером порта получателя и порта отправителя – «обратным адресом», на который приходят ответные пакеты. Например, отправляя пакеты данных по http, программы надписывают их номером порта получателя 80. Аналогичным образом прописываются в IP-пакет номера-идентификаторы TCP и UDP, для определения какой конкретно протокол используется. К открытию или закрытию тех или иных портов TCP и UDP сводится, по большей части, деятельность файрволлов (брандмауэров) – специальных программ для защиты от ненужных данных в сети. Можно закрывать и открывать порты для определенных IP-адресов своей сети или их диапазонов.

 

Для того, чтобы пакет информации попал на нужный компьютер (правильнее сетевой интерфейс) служит протокол IP (Internet Protocol). Это протокол сетевого уровня модели OSI и межсетевого – модели DOD. На данный момент больше всего распространена его четвертая версия, однако мир медленно, но верно готовится переходить на более новую шестую. В четвертой версии протокола адрес сетевого интерфейса (компьютера) имеет вид наподобие 213.192.111.5 – четыре числа от 0 до 255, разделенных точками. На самом деле каждое число от 0 до 255 – это 8 бит, то есть IP-адрес состоит из четырех фрагментов по 8 бит (октетов), а всего из 32 бит. Соответственно, пакет IP содержит IP-адреса получателя и отправителя. В пределах сети каждый сетевой интерфейс снабжается уникальным IP-адресом. То есть в Интернете не может быть двух компьютеров с одинаковыми IP-адресами, так же, как их не может быть в отдельно взятой локальной сети. При этом в разных локальных сетях могут встречаться сетевые карты с одинаковыми IP-адресами. В Интернете они напрямую не видны. Для передачи пакетов IP между разными сетями, например между локальной и Интернетом, используются маршрутизаторы (они же роутеры).

Для использования в локальных сетях выделено три специальных IP-диапазона: 192.168.0.0-192.168.255.255, 172.16.0.0-172.31.255.255, 10.0.0.0-10.255.255.255. Адреса из этих множеств отличаются тем, что в адресном пространстве глобальной сети Интернет они отсутствуют. Это было сделано для того, чтобы при подключении нескольких машин одной локальной сети через общий шлюз не выделять Интернет-адрес на каждую. Благодаря этому адресов Ipv4 хватало на всех до самого недавнего времени. Таким образом, при построении локальной сети адреса ее устройствам назначаются из одного из этих множеств, в зависимости от размера локальной вычислительной сети. В малых офисных и домашних сетях используется диапазон 192.168.0.0-192.168.255.255, в районных адреса от 172.16.0.0 и до 172.31.255.255.

В Интернете адреса выдаются согласно решениям IANA. Эта организация упоминалась выше в связи с припиской портов определенным протоколам прикладного уровня, она же выдает IP-адреса крупным региональным регистраторам, которые раздают их более мелким компаниям, а они уже приписывают IP-адреса конкретным ресурсам. Запас свободных Ipv4-адресов подошел к концу, и именно из-за этого постепенно внедряют Ipv6, в котором адреса имеют длину в 128 бит и пишутся обычно восьмью группами по четыре шестнадцатеричных цифры (от 0 до F).

Часто при работе в сети обращение к ресурсам происходит по буквенным адресам, а не по IP-адресам. Существует система, которая переводит близкие людям буквосочетания в понятные машинам цифровые коды, то есть URL (Uniform Resource Locator, «единообразный адрес ресурса») в IP-адрес. Она называется DNS, то есть Domain Name System, система доменных имен. Работой службы DNS в глобальном масштабе управляет ICANN (Internet Corporation for Assigned Names and Numbers, Международная корпорация по присвоенным именам и номерам). Тут господствует принцип той же иерархии, что и при раздаче IP-адресов. ICANN создает домен верхнего уровня и дает региональным регистраторам доменов право присваивать имена более низких уровней в этом домене (начиная со второго) определенным IP-адресам. Что же такое домен? Рассмотрим какой-нибудь адрес сетевого ресурса, например edu.tltsu.ru. Так вот, это домен третьего уровня. Домен первого уровня –.ru. Домен второго уровня – tltsu.ru. Домен некоего уровня интересен тем, что в нем можно разместить несколько доменов более низких уровней, причем тут фантазия ограничена только практическими соображениями, то есть удобством запоминания Интернет – адреса.

Итак, для того чтобы выдавать на каждое зарегистрированное в Интернете доменное имя соответствующий ему IP-адрес, есть служба DNS. По одноименному с ней протоколу компьютер при вводе URL запрашивает специальный прописанный в его настройках сервер с целью выяснить, к какому IP – адресу обращаться. Сервер DNS ему отвечает, и он может установить соединение. У каждого провайдера есть свой DNS – сервер. Разумеется, он не может держать на своих дисках таблицу соответствия IP – адресам для всех URL в мире. Для этого есть специальные, очень большие DNS-серверы. Они называются корневыми, и их всего 13 во всем мире. Большинство, находится в США. Если в ЭШе DNS-сервера провайдера нет нужной записи, он обращается к серверу более высокого ранга с запросом и получает ее. Иногда запрос доходит по цепочке и до корневых серверов, и не сказать, чтобы редко.

Итак, для выхода в Интернет компьютеру необходимо знать IP-адрес DNS-сервера. Провайдер может выдавать его динамически по протоколу DHCP, так же как IP-адрес и некоторые другие настройки, а может просто написать в инструкции в явном виде. Тогда его нужно вбить в подходящее поле настройки сети на роутере (Интернет – шлюзе) или конкретном компьютере. Чаще всего провайдер дает адреса двух DNS-серверов. Можно легко проверить, все ли в порядке с настройками DNS. Для этого надо обратиться к какому-нибудь ресурсу сначала по имени, а потом по IP-адресу. Например, у yandex.ru IP-адрес такой: 213.180.204.11. И если команда ping.yandex.ru выдает ошибку, а ping 213.180.204.11 без проблем осуществляется, значит, что-то не так со службой DNS. Либо настройки неактуальны (например, провайдер поменял адрес сервера DNS), либо с самим этим сервером проблемы.

Существует концепция взаимодействия по вычислительной сети: «клиент-сервер». Она сводится к тому, что клиент отправляет серверу запрос, а сервер на него отвечает. То есть клиент заказывает у сервера некую услугу (отсюда название «server», то есть «обслуживающий»). Причем этой услугой может являться что угодно, в зависимости от специализации сервера: IP-адрес в обмен на URL у DNS-сервера, страница сайта в обмен на ее адрес у веб – сервера, файл в обмен на его путь у FTP-сервера. Для разработки сетевых программ согласно данной концепции необходимо четко определить, кто запрашивает услугу, а кто предоставляет. И то и другое происходит на уровне программного обеспечения. Веб-страницы у веб-сервера (программа Apache) запрашивает браузер (например, Internet Explorer или Google Chrome), а файлы у FTP-сервера – клиент FTP. А программа, отвечающая на эти запросы с того конца канала, и называется собственно сервером. Однако сервер, не просто класс программного обеспечения, дело тут в том, что востребованные клиентами услуги надо предоставлять бесперебойно, в режиме «24/7». Сеть должна работать постоянно. А для этого компьютеры, на которых работают предоставляющие услуги программы, должны быть более надежными, чем обычные клиентские машины. К тому же к популярным сетевым сервисам вроде поисковых машин или онлайн – хранилищ видео и музыки одновременно обращаются со всех концов Интернета толпы клиентов. А значит, их вычислительная мощность должна быть достаточно большой. В связи с этим был выделен отдельный класс надежных, мощных и легко масштабируемых (объединяемых друг с другом для увеличения производительности) вычислительных машин. Поскольку они также называются серверами, возможна путаница. Осталось добавить, что серверы (программы) можно устанавливать и на обычные персональные компьютеры.

 

Windows Sockets

 

Winsock или Windows Sockets – это интерфейс программирования приложений (API) созданный для реализации программ в сети на основе протоколов TCP/IP.

При взаимодействии «клиент – сервер» в сети каждого участника взаимодействия можно рассматривать как конечную точку или другими словами сокет. Windows Sockets разрабатывался на основе интерфейса Беркли для UNIX (или BSD сокетов), но к ним добавлены функции поддержки событий Windows. Таким образом, несмотря на то, что рассмотрены только Windows Sockets, в целом программирование сокетов в UNIX системах и Windows похоже.

В настоящее время существует две основные версии Winsock API:

1. WinSock 1.1 – осуществляется поддержка только протоколов TCP/IP;

2. WinSock 2.0 – введена возможность работы с самыми разными сетевыми протоколами и моделями, например SPX/IPX.

Официальная спецификация Winsock разделяет функции на три типа:

1. функции Беркли;

2. информационные функции (получение информации о наименовании доменов, службах, протоколах Интернета);

3. расширения Windows для функций Беркли.

Все функции могут быть блокирующие и неблокирующие. Обычно блокирующие это функции Беркли. То есть при работе такой функции нельзя выполнять другие функции WinSock.

Код программы, осуществляющей инициализацию интерфейса Winsock API (WSA) и его деинициализацию следующий:

 

#include <stdio.h>

#include <winsock.h>

 

const int WINSOCK_VERSION = 0x0101;

 

void main()

{

WSADATA wsaData;

 

if (WSAStartup(WINSOCK_VERSION, &wsaData))

printf(“Winsock startup FAILED!\n”);

else

printf(“Winsock startup is successful.\n”);

 

if (WSACleanup())

printf(“Winsock cleanup FAILED!\n”);

else

printf(“Winsock cleanup is successful.\n”);

 

system(«pause»);

 

return;

}

 

Программа скомпилирована как консольный проект Win32. Для успешной линковки необходимо добавить в список зависимостей приложения файл wsock32.lib, входящий в состав любого современного компилятора C++ для Windows.

С помощью #include <winsock.h> подключаются библиотечные функции. Далее объявляется константа с номером версии, с которой будет работать приложение – WINSOCK_VERSION.

Функция WSAStartup() инициализирует Winsock. Эта функция всегда вызывается самой первой при начале работы с Winsock. Ее прототип следующий:

int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData);

Первый параметр – это версия, которая будет использоваться. Младший байт – основная версия, старший байт – расширение версии. То есть в примере, используется версия 1.1. Если инициализация состоялась, то вернется нулевое значение. Инициализация заключается в сопоставлении номера версии и реально существующей библиотеки динамической компоновки (файла с расширением DLL) в системной папке Windows.

Второй параметр – это указатель на структуру WSADATA, в которую возвратятся параметры инициализации. Структура имеет следующее определение:

typedef struct WSAData {

WORD wVersion;

WORD wHighVersion;

char szDescription[WSADESCRIPTION_LEN+1];

char szSystemStatus[WSASYS_STATUS_LEN+1];

unsigned short iMaxSockets;

unsigned short iMaxUdpDg;

char FAR * lpVendorInfo;

} WSADATA, FAR * LPWSADATA;

WSACleanup() завершает использование данного DLL файла и прерывает обращение к функциям Winsock. При удачном выполнении вернется ноль. Результат успешной работы программы приведен на рисунке 2.4.1.

Рисунок 2.4.1 – Инициализация и деинициализация Winsock API

 

В состав Winsock входит ряд информационных функций, например, для получения сведений об имени компьютера в сети или IP – адреса. Рассмотрим простой пример, выводящий на экран имя локальной машины.

 

#include <stdio.h>

#include <winsock.h>

 

const int WINSOCK_VERSION = 0x0101;

 

void main()

{

char szInfo[BUFSIZ];

WSADATA wsaData;

 

if (WSAStartup(WINSOCK_VERSION, &wsaData))

printf(“Winsock startup FAILED!\n”);

else

printf(“Winsock startup is successful.\n”);

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-13 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: