Стандартизация сетей
1. Многоуровневый подход
Организация взаимодействия между устройствами сети является сложной задачей. Для решения сложных задач используется известный универсальный прием — декомпозиция, то есть разбиение одной сложной задачи на несколько более простых задач-модулей. Декомпозиция состоит в четком определении функций каждого модуля, а также порядка их взаимодействия (то есть межмодульных интерфейсов). При таком подходе каждый модуль можно рассматривать как «черный ящик», абстрагируясь от его внутреннего устройства и концентрируя внимание на его функциях и способе взаимодействия с другими модулями. В результате такого логического упрощения задачи появляется возможность независимого тестирования, разработки и модификации модулей. Так, любой из показанных на рис. 1.41 модулей может быть переписан заново. Пусть, например, это будет модуль А, и если при этом разработчики усовершенствуют его внутреннюю организацию, но сохранят без изменения межмодульные интерфейсы А—В, A—F и А—С, то это не потребует никаких изменений в остальных модулях.
Еще более эффективной концепцией, развивающей идею декомпозиции, является многоуровневый подход. После представления исходной задачи в виде множества модулей эти модули группируют и упорядочивают по уровням, образующим иерархию. В соответствии с принципом иерархии для каждого промежуточного уровня можно указать непосредственно примыкающие к нему соседние вышележащий и нижележащий уровни (рис. 1.42).

Каждый вышестоящий уровень использует нижестоящий в качестве удобного инструмента для решения своих задач. Так, группа модулей, находящихся на верхнем уровне иерархии, может обращаться с запросами на выполнение тех или иных функций только к модулям непосредственно прилегающего нижнего уровня 2, а модули уровня 2, в свою очередь, могут обращаться за услугами к модулям уровня 1. В то же время результаты работы каждого из модулей, отнесенных к некоторому уровню, могут быть переданы только модулям соседнего вышележащего уровня. Такая иерархическая декомпозиция задачи предполагает четкое определение функций и интерфейсов не только отдельных модулей, но и каждого уровня.
Задача организации взаимодействия компьютеров в сети тоже может быть представлена в виде иерархически организованного множества модулей. Многоуровневое представление средств сетевого взаимодействия имеет свою специфику, связанную с тем, что в процессе обмена сообщениями участвуют по меньшей мере две стороны, то есть в данном случае необходимо организовать согласованную работу двух иерархий аппаратных и программных средств, работающих на разных компьютерах.

Оба участника сетевого обмена должны принять множество соглашений на каждом уровне взаимодействия. Например, они должны согласовать уровни и форму электрических сигналов, перечень сообщений и их формат, договориться о методах контроля достоверности и т. п. Другими словами, соглашения должны быть приняты на всех уровнях, начиная от самого низкого — уровня передачи битов и заканчивая самым высоким, реализующим обслуживание пользователей сети.
Собственно, мы уже прибегали к этому приему, когда изучали простейшую сеть, состоящую из двух компьютеров и позволяющую пользователям совместно применять принтер (см. рис. 1.9). Давайте вспомним, как при решении этой задачи в нашем примере функции разделялись между тремя уровнями сетевых средств. Верхний уровень этой иерархии, организующий диалог клиента и сервера печати, в качестве «инструмента» для передачи своих сообщений через сеть использует средства нижележащего уровня драйверов межмашинной связи (ММС). В свою очередь, уровень ММС, решая порученную ему задачу, время от времени обращается к услугам более низкого уровня физической передачи, который выполняет для него передачу битов по кабелю.

Рисунок 1.43 поясняет основные идеи и термины, касающиеся многоуровневой организации сетевых средств на примере взаимодействия двух сетевых узлов, А и В. С каждой стороны средства сетевого взаимодействия представлены четырьмя уровнями (количество уровней в этом примере условно). Каждый уровень (кроме самого нижнего) поддерживает три интерфейса. Во-первых, это два интерфейса услуг с выше - и нижележащим уровнями «своей» иерархии средств. Во-вторых, это интерфейс со средствами взаимодеЙствия другой стороны, расположенными на том же уровне иерархии. С последним типом интерфейса мы уже неоднократно встречались, используя для его обозначения термин «протокол».
Протоколы нижних уровней часто реализуются комбинацией программных и аппаратных средств, а протоколы верхних уровней, как правило, программными средствами.
![]() |
Протокольные сущности одного уровня двух взаимодействующих сторон обмениваются сообщениями в соответствии с определенным для них протоколом. Сообщения состоят из заголовка и поля данных (иногда оно может отсутствовать). Обмен сообщениями является своеобразным языком общения, с помощью которого каждая из сторон «объясняет» другой стороне, что необходимо сделать на каждом этапе взаимодействия. Работа каждого протокольного модуля заключается в интерпретации заголовков, поступающих к нему сообщений и выполнении связанных с этих действий. Заголовки сообщений разных протоколов имеют разную структуру, что соответствует различиям в их функциональности. Протокольные сущности одного уровня не общаются между собой непосредственно, в этом общении всегда участвуют посредники — средства протоколов нижележащих уровней. И только самые нижние уровни двух иерархий взаимодействуют напрямую.
Понятно, что для одного и того же протокола (протокольной сущности) может существовать сколь угодно много различных его реализаций. Эти реализации могут отражать строгость следования разработчика описанию протокола или же включать некоторые дополнительные функции, которые не были описаны в спецификации. И даже в том случае, когда с функциональной точки зрения реализации протокола идентичны, они могут различаться эффективностью программной реализации, например, одна реализация может требовать меньше памяти или процессорного времени, чем другая. Более того, на эффективность взаимодействия устройств в сети влияет качество всей совокупности протоколов, составляющих стек, в частности то, насколько рационально распределены функции между протоколами разных уровней и насколько хорошо определены интерфейсы между ними.
2. Модель OSI
К концу 70-х годов в мире уже существовало большое разнообразие в стеках коммуникационных протоколов, среди которых можно было назвать, например, такие популярные стеки, как DECnet (фирменный стек компании Digital), TCP/IP (стек Интернета) и SNA (фирменный стек компании [ВМ). Однако компьютеры и другие сетевые устройства, поддерживающие разные стеки протоколов, будучи помещенными в одну сеть, «отказывались» работать друг с другом. Одним из путей преодоления такой несовместимости в то время виделся всеобщий переход на единый стек протоколов, который аккумулировал бы в себе все лучшее, что было в других, уже существующих стеках. Именно с таких академических позиций несколько международных организаций по стандартизации [1] подошли к разработке нового стека коммуникационных протоколов. Важнейшим результатом их работы стало создание стандартной модели взаимодействия открытых систем (Ореп System Interconnection, OSI).
Назначение модели 0SI состоит в обобщенном стандартном представлении средств сетевого взаимодействия для сетей с коммутацией пакетов. Она разрабатывалась в качестве своего рода универсального языка сетевых специалистов, именно поэтому ее называют также справочной моделью. Модель 0SI определяет:
уровни взаимодействия систем в сетях с коммутацией пакетов;
стандартные названия уровней;
функции, которые должен выполнять каждый уровень.
Модель 0SI не содержит описаний конкретных протоколов и их реализаций. Модель OSI делит средства взаимодействия на семь уровней, за которыми закреплены названия (рис. 1.44):
прикладной;
представления;
сеансовый;
транспортный;
сетевой;
канальный;
физический.
Модель 0SI описывает только системные средства взаимодействия, реализуемые операционной системой, системными утилитами, системными аппаратными средствами. Модель не включает средства взаимодействия приложений конечных пользователей. Приложения могут обращаться к системным средствам сетевого взаимодействия, используя специально разработанный для этих целей набор стандартных процедур операционной системы — прикладной программный интерфейс (Application Program Interface, API).

Итак, пусть, например, приложению А требуется передать файл приложению В. Для этого приложение А посылает сообщение-запрос клиенту файловой службы, которая, в соответствии с разделением функций в модели 0SI, относится к прикладному уровню [2] . На основании этого запроса клиент в соответствии с принятым протоколом формирует сообщение для передачи серверу файловой службы, также работающему на прикладном уровне другого компьютера. Формат сообщения предусматривает наличие поля заголовка прикладного уровня (на рисунке он обозначен цифрой 7), в котором клиент размещает управляющую информацию, адресованную файловому серверу, например, полное имя файла в файловой системе сервера и тип операции «открыть файл». Но для того, чтобы доставить это сообщение по назначению, предстоит решить еще много задач, ответственность за которые несут нижележащие уровни.
Поэтому прикладной уровень, используя межуровневый интерфейс, передает запрос на выполнение необходимых для него действий расположенному ниже уровню представления. Запрос включает сформированное на прикладном уровне сообщение, а также некоторую дополнительную служебную информацию, без которой нижележащий уровень не может выполнить указанные действия, например, расшифровать текст, который хранится на сервере в зашифрованном виде. Протокол уровня представления выполняет требуемые операции и добавляет к сообщению собственную служебную информацию — заголовок уровня представления, в котором содержатся указания для протокола уровня представления компьютера-адресата, например, тип шифра. Полученное в результате сообщение передается вниз сеансовому уровню, который, в свою очередь, добавляет свой заголовок и т. д. Наконец, сообщение достигает нижнего, физического уровня, который собственно и передает его по линиям связи компьютеру-адресату[3] . К этому моменту сообщение «обрастает» заголовками всех уровней.
Физический уровень помещает сообщение на физический выходной интерфейс компьютера 1, и оно начинает свое «путешествие» по сети.
Когда сообщение по сети поступает на входной интерфейс компьютера 2, оно принимается его физическим уровнем и последовательно перемещается вверх с уровня на уровень. Каждый уровень анализирует и обрабатывает заголовок своего уровня, выполняя соответствующие функции, а затем удаляет этот заголовок и передает сообщение вышележащему уровню.
3. Функции уровней модели OSI
А сейчас давайте остановимся на том, какие функции выполняет каждый уровень модели 0SI.
Прикладной уровень (application layer) — это в действительности просто набор разнообразных протоколов, с помощью которых пользователи сети получают доступ к разделяемым ресурсам, таким как файлы, принтеры или гипертекстовые веб-страницы, а также организуют свою совместную работу, например, по протоколу электронной почты. Единица данных, которой оперирует прикладной уровень, обычно называется сообщением.
Уровень представления (presentation layer), как явствует из его названия, обеспечивает представление передаваемой по сети информации, не меняя при этом ее содержания. За счет уровня представления информация, передаваемая прикладным уровнем одной системы, всегда понятна прикладному уровню другой системы. С помощью средств данного уровня протоколы прикладных уровней могут преодолеть синтаксические различия в представлении данных или же различия в кодах символов, например кодов ASCII и ЕВСТС. На этом уровне могут выполняться шифрование и дешифрирование данных, благодаря которым секретность обмена данными обеспечивается сразу для всех прикладных служб.
Сеансовый уровень (session layer) обеспечивает управление взаимодействием сторон: фиксирует, какая из сторон является активной в настоящий момент, и предоставляет средства синхронизации сеанса. Эти средства позволяют в ходе длинных передач сохранять информацию о состоянии этих передач в виде контрольных точек, чтобы в случае отказа можно было вернуться назад к последней контрольной точке, а не начинать все с начала. На практике немногие приложения используют сеансовый уровень, и он редко реализуется в виде отдельных протоколов. Функции этого уровня часто объединяют с функциями прикладного уровня и реализуют в одном протоколе.
Транспортный уровень (transport layer) обеспечивает приложениям или верхним уровням стека — прикладному, представления и сеансовому — передачу данных с той степенью надежности, которая им требуется. Модель 0SI определяет пять классов транспортного сервиса, от низшего класса О до высшего класса 4. Эти виды сервиса отличаются качеством предоставляемых услуг: срочностью, возможностью восстановления прерванной связи, наличием средств мультиплексирования нескольких соединений между различными прикладными протоколами через общий транспортный протокол, а главное — способностью к обнаружению и исправлению ошибок передачи, таких как искажение, потеря и дублирование пакетов.
Выбор класса сервиса транспортного уровня определяется, с одной стороны, тем, в какой степени задача обеспечения надежности решается самими приложениями и протоколами более высоких, чем транспортный, уровней. С другой стороны, этот выбор зависит от того, насколько надежной является система транспортировки данных в сети, обеспечиваемая уровнями, расположенными ниже транспортного — сетевым, канальным и физическим. Так, если качество каналов передачи связи очень высокое и вероятность возникновения ошибок, не обнаруженных протоколами более низких уровней, невелика, то разумно воспользоваться одним из облегченных сервисов транспортного уровня, не обремененных многочисленными проверками, квитированием и другими приемами повышения надежности. Если же транспортные средства нижних уровней очень ненадежны, то целесообразно обратиться к наиболее развитому сервису транспортного уровня, который использует максимум средств обнаружения и устранения ошибок, включая предварительное установление логического соединения, контроль доставки сообщений по контрольным суммам и циклической нумерации пакетов, установление тайм-аутов доставки и т. п.
Сетевой уровень (network layer) служит для образования единой транспортной системы, объединяющей несколько сетей, называемой составной сетью. Решение этой задачи возлагается на конечные узлы и маршрутизаторы и включает решение следующих частных задач:
· определение маршрута через составную сеть от узла-отправителя до узлаполучателя;
· организацию продвижения данных по этому маршруту;
· согласование технологий при передаче данных из сети, построенной на одной технологии, в сеть, построенную на другой технологии;
· управление параметрами процесса передачи данных, такими как временные задержки, уровни загрузки линий связи и др.;
· создание надежных и гибких барьеров на пути нежелательного трафика между сетями.
Данные, которые необходимо передать через составную сеть, поступают на сетевой уровень от вышележащего транспортного уровня. Эти данные снабжаются заголовком сетевого уровня, образуя пакет — так называется PDU сетевого уровня.
Канальный уровень (data link layer) обеспечивает прозрачность соединения для сетевого уровня. Для этого он предлагает ему следующие услуги:
· установление логического соединения между взаимодействующими узлами;
· согласование в рамках соединения скоростей передатчика и приемника информации;
· обеспечение надежной передачи, обнаружение и коррекция ошибок.
Для решения этих задач канальный уровень формирует из пакетов собственные протокольные единицы данных — кадры, состоящие из поля данных и заголовка. Канальный уровень помещает пакет в поле данных одного или нескольких кадров и заполняет собственной служебной информацией заголовок кадра.
Рассмотрим, например, как канальный уровень решает задачу обеспечения надежности передачи. Для этого канальный уровень фиксирует границы кадра, помещая специальную последовательность битов в его начало и конец, а затем добавляет к кадру контрольную сумму. Контрольная сумма вычисляется по некоторому алгоритму как функция от всех байтов кадра. На стороне получателя канальный уровень группирует биты, поступающие с физического уровня, в кадры, снова вычисляет контрольную сумму полученных данных и сравнивает результат с контрольной суммой, переданной в кадре. Если они совпадают, кадр считается правильным. Если же контрольные суммы не совпадают, фиксируется ошибка. В функции канального уровня входят не только обнаружение ошибок, но и исправление их за счет повторной передачи поврежденных кадров. Однако эта функция не является обязательной и в некоторых реализациях канального уровня она отсутствует, например в Ethernet. В сетях, построенных на основе разделяемой среды, физический уровень выполняет еще одну функцию — проверяет доступность разделяемой среды. Эту функцию иногда выделяют в отдельный подуровень управления доступом к среде (Medium Access Control, МАС).
Протокол канального уровня обычно работает в пределах сети, являющейся одной из частей более крупной составной сети, объединенной протоколами сетевого уровня. Адреса, с которыми работает протокол канального уровня, используются для доставки кадров только в пределах этой сети, а для перемещения пакетов между сетями применяются адреса уже следующего, сетевого, уровня.
Физический уровень (physical layer) поддерживает интерфейс с канальным уровнем. На стороне отправителя физический уровень получает с канального уровня кадры, рассматривая их как неструктурированный поток битов, которые он должен передать по физическим каналам связи, таким как коаксиальный кабель, витая пара, оптоволоконный кабель или цифровой территориальный канал. Протокол физического уровня представляет биты данных в виде электрических импульсов и пытается передать их, по возможности без искажений, в соответствии с принятыми в данном протоколе параметрами электрических сигналов (уровнями напряжения, соответствующими 1 и 0, тактовой частотой и т. п.). Любое устройство для подключения к сети должно иметь средства реализации функций физического уровня. Со стороны компьютера функции физического уровня выполняются сетевым адаптером, в коммутаторах и маршрутизаторах — это функции физических интерфейсов.
4.Распределение функций между различными элементами сети
Функциональность стека протоколов в целом может быть востребована только конечными узлами, а коммуникационные устройства — маршрутизаторы и коммутаторы, — решающие задачу транспортировки сообщений между конечными узлами, ограничиваются поддержкой функциональности трех нижних уровней.
На рис. 1.45 показаны основные элементы компьютерной сети: конечные узлы — компьютеры и промежуточные узлы — коммутаторы и маршрутизаторы. Маршрутизаторы служат пограничными устройствами, разделяя составную сеть на подсети.
Коммутаторы обычно поддерживают функции двух нижних уровней, физического и канального, что ограничивает их возможности передачей данных в пределах только одной подсети. Однако некоторые коммутаторы, работающие на основе технологии виртуальных каналов, могут поддерживать как два уровня протоколов, так и три.
Маршрутизаторы поддерживают функции всех трех нижних уровней, так как сетевой уровень нужен им для объединения подсетей различных технологий в составную сеть и нахождения маршрута между конечными узами через составную сеть, а функции нижних уровней — для передачи данных в пределах отдельных подсетей.
Компьютеры, на которых работают сетевые приложения, в общем случае поддерживают функции всех уровней. Протоколы прикладного уровня, пользуясь сервисами протоколов уровня представления и сеансового уровня, предоставляют приложениям набор сетевых услуг в виде сетевого интерфейса API.
Протокол транспортного уровня также работает на всех конечных узлах. При передаче данных через сеть два модуля транспортного протокола, работающие на узле-отправителе и узле-получателе, взаимодействуют друг с другом для поддержания транспортного сервиса нужного качества. Коммуникационные устройства сети переносят сообщения транспортного протокола прозрачным образом, не вникая в их содержание.

В компьютерах коммуникационные протоколы всех уровней (кроме физического и части функций канального уровня) реализуются программно операционной системой или системными приложениями.
5. Стандартные стеки протоколов
Универсальный тезис о пользе стандартизации, справедливый для всех отраслей, в компьютерных сетях приобретает особое значение. Суть сети — это соединение разного оборудования, а значит, проблема совместимости является здесь одной из наиболее острых. Без согласования всеми производителями общепринятых стандартов для оборудования и протоколов прогресс в деле «строительства» сетей был бы невозможен.
Важнейшим направлением стандартизации в области вычислительных сетей является стандартизация коммуникационных протоколов. Наиболее известными стандартными стеками протоколов являются: 0SI, TCP/IP, IPX/SPX, NetBIOS/SMB, DECnet, SNA (не все из них применяются сегодня на практике).
В большинстве этих популярных стеков протоколов нет полного соответствия рекомендациям модели 0SI, в частности, ни один из них не разбит на семь уровней. Чаще всего в стеке явно выделяются 3—4 уровня: уровень сетевых адаптеров, в котором реализуются протоколы физического и канального уровней, сетевой уровень, транспортный уровень и уровень служб, вбирающий в себя функции сеансового уровня, уровня представления и прикладного уровня. Исключение составляет стек ОSI.
В отличие от других стеков протоколов, стек OSI полностью соответствует модели OSI, включая спецификации протоколов для всех семи уровней взаимодействия, определенных в этой модели. Это и понятно, разработчики стека OSI использовали модель OSI как прямое руководство к действию.
Особое место в ряду стандартных стеков протоколов занимает стек ТСР/IP. Он был разработан по инициативе министерства обороны США (Department of Defense, DoD) более 30 лет назад для связи экспериментальной сети ARPANET с другими сетями как набор общих протоколов для разнородной вычислительной среды. Сегодня этот стек используется для связи компьютеров в Интернете, а также в огромном числе корпоративных сетей. Так как стек TCP/IP был разработан до появления модели OSI, то, хотя он также имеет многоуровневую структуру, соответствие уровней стека TCP/IP уровням модели OSI достаточно условно.
[1] В частности, в число этих организаций входили International Organization for Standardization (ISO), часто называемая еще International Standards Organization, а также International Telecommunications Union (ITU) и некоторые другие.
[2] Важно различать уровень взаимодействия приложений и прикладной уровень семиуровневой модели.
[3] На физическом уровне заголовок отсутствует, если не считать в качестве такового стартовый сигнал при передаче очередного байта.



