1.16 Принцип инкапсуляции данных, фрагментации и декапсуляции в моделях TCP/IP и OSI 7
Привет, посетитель сайта ZametkiNaPolyah.ru! Продолжаем изучать основы работы компьютерных сетей, напомню, что эти записи основаны на программе Cisco ICND1 и помогут вам подготовиться к экзаменам CCENT/CCNA. Эта запись обобщает информацию, полученную нами в четырех предыдущих. Разобравшись с процессами инкапсуляции и декапсуляции данных, у вас появится представление о том, как работает компьютерная сеть и почему уровни модели передачи данных и их функционал изолированы друг от друга.
Перед началом я хотел бы вам напомнить, что ознакомиться с опубликованными материалами первой части нашего курса можно по ссылке: «Основы взаимодействия в компьютерных сетях».
Содержание статьи:
1.16.1 Введение
Эта тема подводит итог четырем предыдущим и объединяет их воедино, ранее мы разбирались с моделями передачи данных: сначала мы рассмотрели семуровневую модель передачи данных OSI 7, а затем модель стека протоколов TCP/IP, а до этого мы узнали в чем польза от декомпозиции задачи сетевого взаимодействия и в чем разница между протоколами и службами. Мы очень подробно рассмотрели процессы, происходящие на различных уровнях моделей, перечислили устройства и протоколы, которые выполняют функции того или иного уровня, но мы практически не разбирались с тем, что происходит с данными, когда они переходят с одного уровня на другой.
И на самом деле, процесс передачи данных с одного уровня на другой очень важен для понимания принципов работы сетевых устройств, компьютерных сетей и протоколов, так как вся суть работы протоколов заключена в заголовках, которые добавляются или убираются в зависимости от того, с какого уровня на какой переходят данные. Процесс добавления заголовка поверх существующего называется инкапсуляция данных, это когда данные движутся с более высокого уровня вниз (то есть при подготовке данных к передаче), процесс снятия заголовка называется декапсуляция данных, это когда данные движутся снизу вверх, то есть при приеме.
1.16.2 Принцип инкапсуляции данных в компьютерной сети
В других темах мы уже не раз упоминали, что данные, передаваемые по сети, должны пройти процесс обработки как на передающей стороне, так и на принимающей. Когда передающая сторона готовит данные к передаче – это процесс инкапсуляции данных, и наоборот, когда принимающая сторона начинает обрабатывать входящую последовательность бит и формировать из нее сообщения – это процесс декапсуляции. Начнем мы с передающей стороны и посмотрим, что происходит с данными, когда они готовятся к передаче.
Процессы инкапсуляции и декапсуляции будем рассматривать на примере модели стека протоколов TCP/IP, можно было бы это сделать и на примере эталонной модели сетевого взаимодействия, но это будет дольше, а принцип один и тот же, с той лишь разницей, что данные в модели OSI 7 никак не фрагментируются при их переходе с седьмого уровня на пятый, с ними просто происходят какие-то изменения (они архивируются, кодируются, шифруются, в общем, как-то преобразуются), но они не разбиваются на сообщения, которые затем будут передаваться по сети, фрагментация начинается только на транспортном уровне.
В обеих моделях передачи данных на каждом уровне, начиная с транспортного, и кроме физического, идет процесс инкапсуляции данных, то есть на каждом уровне к имеющимся данным добавляется заголовок и при необходимости к данным может быть добавлена метка конца. На транспортном уровне еще происходит процесс фрагментации данных, то есть разбиение больших данных, которые отправляет пользователь, на маленькие сообщения, которые удобно передавать по сети (фрагментация может происходит еще и на сетевом уровне, но это не совсем стандартная ситуация, поэтому сейчас мы ее не рассматриваем). На физическом уровне модели передачи данных упакованные в несколько слоев сообщения превращаются в последовательность бит, чтобы затем отправиться в среду передачи данных.
Что содержится в заголовках, которыми упаковываются данные? Это зависит от уровня модели передачи данных и того протокола, чей заголовок добавляется к сообщению, самые важные для нас протоколы и заголовки мы рассмотрим (IPv4, IPv6, TCP, UDP, Ethernet), но если говорить в общем, то заголовки содержат служебную информацию, которая помогает устройствам компьютерной сети определить: кому принадлежит данное сообщение, куда его дальше отправить, не повредилось ли сообщение, какое сообщение в полученной последовательности является первым, а какое вторым и многое другое.
Принцип инкапсуляции данных для модели стека протоколов TCP/IP показан ниже на Рисунке 1.16.1.
Здесь у нас есть пользователь, который хочет отправить свое другу сообщение: «Привет, Вася!». Этот пользователь открывает почтовый клиент, вводит сообщение и нажимает кнопку «Отправить». Пока пользователь вводит сообщение и пока его обрабатывает почтовый клиент, оно представлено в виде «Пользовательских данных», как только это сообщение попадет на транспортный уровень, он превратится в сегмент или дейтаграмму (в зависимости от протокола, который будет использован для передачи: TCP или UDP), более того, если пользовательские данные будут слишком большими, то на транспортном уровне будет выполнена фрагментация, то есть данные пользователя будут разбиты на сообщения поменьше и к каждому сообщению будет добавлен заголовок транспортного уровня, по которому принимающая сторона сможет снова собрать сообщение, которое послал пользователь, а также определить: какому приложение следует отправить полученные данные на обработку.
После того, как транспортный уровень закончит свои операции, он передаст получившиеся сообщения на сетевой уровень, сетевой уровень поверх заголовка транспортного уровня добавит свой заголовок и получится пакет, то есть для сетевого уровня данными уже являются сегменты и дейтаграммы, которые приходят к нему с транспортного уровня. По заголовку сетевого уровня маршрутизаторы/роутеры смогут составить маршрут, по которому будет двигаться пакет в компьютерной сети.
Далее пакеты спустятся на канальный уровень, для канального уровня данными уже являются пакеты. На канальном уровне поверх заголовка сетевого уровня будет добавлен заголовок канального уровня, но, кроме того, после того, как будет добавлен заголовок, клиентский компьютер посчитает контрольную сумму получившейся конструкции и запишет ее после пользовательских данных, чтобы принимающее устройство смогло проверить: а не повредились ли данные при передаче по сети. Вся конструкция целиком называется кадром. Сетевые карты компьютеров и коммутаторы для передачи данных пользуются заголовками канального уровня.
Перед тем, как отправить данные в канал связи, передающий компьютер превратит полученные кадры в последовательность бит. Собственно, сама передача данных ведется в физической среде, которая определяет скорость передачи данных и некоторые другие важные характеристики компьютерной сети. Тут стоит сказать, что все вышеописанные операции ведутся внутри передающего компьютера и всё это вместе называется инкапсуляцией данных. Если говорить о устройствах физического уровня, то можно вспомнить хабы и сетевые концентраторы с их недостатками, к счастью, они уже не используются.
Мы рассмотрели инкапсуляцию данных в модели TCP/IP, если говорить про модель OSI 7, то здесь будет несколько незначительных отличий, о которых мы уже говорили выше, основной принцип останется тем же.
1.16.3 Декапсуляция данных
Давайте теперь посмотрим, что будет происходить на принимающей стороне, то есть разберемся с принципом декапсуляции данных в моделях TCP/IP и OSI 7. Декапсуляция данных – это процесс обратный инкапсуляции, если при подготовке данных к передаче мы их запаковывали, то на принимающей стороне мы их будем распаковывать, если все понятно, то можете пропустить раздел этот раздел, если нет, то давайте разбираться. Декапсуляция данных показана на Рисунке 1.16.2.
Как видите, второй рисунок ничем не отличается от первого, разница только в направлении стрелки, которая показывает, что компьютер Васи занимается приемом данных, то есть идет процесс декапсуляции данных. Итак, компьютер Васи, подключенный витой парой к компьютерной сети получает сообщения на скорости 100 Мбит/c, которые на физическом уровне представлены в виде последовательности бит, эти биты поступают на канальный уровень и на нем принимающий компьютер собирает из них кадры, по заголовку кадра компьютер Васи понимает, что это сообщение принадлежит ему, а по контрольной сумме компьютер понимает, что сообщение не было повреждено в процессе передачи по сети.
Компьютер Васи понимает, что пользователь не сможет самостоятельно разобраться с кадрами и понять, что в них находится, кроме того, компьютер Васи может быть транзитным устройством, то есть передавать данные дальше, ему нужно убедиться, что эти данные действительно для него, чтобы в этом убедиться, ему нужно убрать заголовок канального уровня и контрольную сумму и заглянуть в заголовок сетевого уровня, в заголовке сетевого уровня находятся логические адреса, которые однозначно идентифицируют узел в компьютерной сети. Принимающий компьютер проанализировал заголовок сетевого уровня и понял, что эти данные действительно для него и их нужно обрабатывать дальше, поэтому он снимает сетевой заголовок и видит заголовок транспортного уровня.
Заголовок транспортного уровня содержит подсказку для компьютера Васи о том, в какой последовательности нужно собрать сегменты, чтобы из них получились исходные данные, а также по этому заголовку компьютер видит какому прикладному приложению отправить полученные данные на обработку, в нашем случае это почтовый клиент. Как только почтовый клиент получит данные от транспортного уровня и обработает их, он оповестит Васю о том, что пришло новое сообщение. Давайте объединим два наших рисунка, чтобы увидеть картину целиком.
Из рисунка видно, что при помощи протокола прикладного уровня общаются клиентские приложения, на транспортном уровне происходит взаимодействие двух компьютеров, как логических устройств, также у компьютеров есть сетевая библиотека, которая помогает ему принимать решения о том, что делать с полученными пакетами, а также у компьютера есть такое устройство, как сетевая карта, которая дает ему доступ к физическим ресурсам компьютерной сети, то есть позволяет подключаться к этой самой сети.
Как видите, ничего сложного в декапсусляции и инкапсуляции нет, это похоже на процесс запаковки и распаковки конфет: на заводе они запаковываются в фантики, а перед тем как их съесть, вы эти фантики разворачиваете.
1.16.4 Выводы
Давайте подведем итоги разговору о принципе инкапсуляции и декапсуляции данных, который реализован в моделях передачи данных TCP/IP и OSI 7, то есть этот принцип работает во всех компьютерных сетях, как в самых маленьких, так и в самых больших, вне зависимости от типа сетевого трафика, передаваемого по компьютерной сети.
Пользователь или конечный потребитель услуги взаимодействует с приложениями, то есть с самым верхним уровнем модели передачи данных. То есть протоколы верхнего уровня используются для взаимодействия приложений друг с другом, так, например, http-клиент или просто браузер взаимодействует с http-сервером в сети Интернет по одноименному протоколу (в качестве примера веб-сервера можно привести сервер Apache), особенностью схемы взаимодействия клиент-сервер в данном случае является то, что ни клиентское, ни серверное приложение ничего не знают о существование компьютерной сети, даже если клиент находится в Сибири, а сервер в Нью-Йорке, так как от этих приложений эта информация скрыта, благодаря принципу инкапсуляции данных, эти приложения общаются на своем уровне при помощи http-сообщений: клиент шлет запросы, а сервер ответы.
С верхних уровней данные попадают на транспортный уровень, этот уровень отвечает за взаимодействие двух конечных узлов, он помогает узлам разделять трафик различных приложений при отправки и при получении, но кроме этого, транспортный уровень делит большие объемы данных, которые пользователи отправляют, на небольшие фрагменты, каждому такому фрагменту на транспортном уровне добавляется специальный заголовок, который нужен для того, чтобы принимающая сторона смогла собрать из мелких сообщений исходные данные. На транспортном уровне также еще нет представления о устройстве сети, так как транспортный уровень создает надежный виртуальный канал поверх ненадежной сети передачи данных, а нижние уровни от него изолированы.
Сообщения транспортного уровня спускаются на сетевой уровень и к ним добавляется сетевой заголовок, этот заголовок помогает маршрутизаторам определить путь, по которому будут следовать данный при их передаче из пункта А в пункт Б, то есть здесь у нас появляется представление о логической топологии компьютерной сети, но нет понимания того, как получить физический доступ к ресурсам нашей сети, эта информация сокрыта от сетевого уровня.
С сетевого уровня пакеты попадают на канальный уровень и к ним добавляются соответствующие заголовки, после чего они становятся кадрами. Канальный уровень дает доступ нашему компьютеру к реальным ресурсам компьютерной сети, то есть определяет интерфейсы и технологии, по которым будет осуществляться передача данных от узла к узлу. А также на канальном уровне реализована функция проверки целостности данных.
После того, как кадр будет сформирован, компьютер превратит его в последовательность нулей и единиц и отправит эту последовательность по линии связи. Если говорить коротко, то принцип инкапсуляции и декапсуляции данных решает проблему изоляции и разграничения функционала между уровнями модели передачи данных, это всё возможно благодаря тому, что на каждом уровне данные оборачиваются в дополнительный заголовок, когда они готовятся к передаче, а на приемной стороне эти заголовки снимаются.
Спасибо за очень интересные и обстоятельные уроки по компьютерным сетям, все очень раздевание и доступно; буду рекомендовать ваш сайт друзьям, интересующимся этой темой.