Терминология инкапсуляции данных
Как вы можете видеть из предыдущих статей о том, как работают протоколы HTTP, TCP, IP и Ethernet, при отправке данных каждый уровень добавляет свой собственный заголовок (а протоколы канального уровня еще и концевик) к данным, предоставленным вышестоящим слоем. Термин инкапсуляция относится к процессу размещения заголовков (а иногда и концевиков) вокруг некоторых данных.
Многие примеры в этой главе демонстрируют процесс инкапсуляции. Например, веб-сервер Гарри инкапсулировал содержимое домашней страницы в заголовок HTTP на рисунке 2 в статье об уровне приложений. Уровень TCP инкапсулировал заголовки и данные HTTP внутри заголовка TCP, как показано на рисунке 1 в статье о транспортном уровне. IP инкапсулировал заголовки TCP и данные в заголовок IP (рисунок 3 в статье о сетевом уровне). Наконец, канальный уровень Ethernet инкапсулировал IP-пакеты между заголовком и концевиком, как показано на рисунке 1 в статье о канальном и физическом уровнях.
Процесс, посредством которого хост TCP/IP отправляет данные, можно рассматривать как пятиэтапный процесс. Первые четыре шага относятся к инкапсуляции, выполняемой четырьмя уровнями TCP/IP, а последний шаг – это фактическая физическая передача данных хостом. Фактически, если вы используете пятиуровневую модель TCP/IP, каждый шаг соответствует роли отдельного уровня. Шаги приведены в следующем списке:
- Создание и инкапсуляция данных приложения с любыми необходимыми заголовками уровня приложений. Например, HTTP-сообщение OK может быть возвращено в заголовке HTTP, за которым следует часть содержимого веб-страницы.
- Инкапсуляция данных, предоставленных уровнем приложений, внутри заголовка транспортного уровня. Для приложений конечного пользователя обычно используется заголовок TCP или UDP.
- Инкапсуляция данных, предоставленных транспортным уровнем, внутри заголовка сетевого уровня (IP). IP определяет IP-адреса, которые однозначно идентифицируют каждый компьютер.
- Инкапсуляция данных, предоставленных сетевым уровнем, в заголовок и концевик канального уровня. Этот уровень использует как заголовок, так и концевик.
- Передача битов. Физический уровень кодирует сигнал в среде для передачи кадра.
Цифры на рисунке 1 соответствуют пяти этапам в этом списке, графически демонстрируя те же идеи. Обратите внимание, что, поскольку уровню приложений часто не нужно добавлять заголовка, на рисунке не показан конкретный заголовок уровня приложений, но уровень приложений также иногда добавляет заголовок.
Названия сообщений TCP/IP
Одна из причин, по которой в данной главе уделено время подробному описанию этапов инкапсуляции, связана с терминологией. Когда говорят и пишут о сети, для обозначения сообщений, показанных на рисунке 2, используются термины сегмент, пакет и кадр. Каждый термин имеет определенное значение, относящееся к заголовкам (и, возможно, концевикам), определенным конкретным уровнем, и данным, инкапсулированным после этого заголовка. Однако каждый термин относится к своему уровню: сегмент для транспортного уровня, пакет для сетевого уровня и кадр для канального уровня. На рисунке 2 показан каждый уровень вместе с соответствующим термином.
На рисунке 2 инкапсулированные данные показаны как просто «данные». Если сосредоточиться на работе, выполняемой определенным уровнем, инкапсулированные данные обычно не важны. Например, IP-пакет действительно может иметь заголовок TCP после заголовка IP, заголовок HTTP после заголовка TCP и данные веб-страницы после заголовка HTTP. Однако, обсуждая IP, вам, вероятно, интересен только заголовок IP, поэтому всё, что находится после заголовка IP, называется просто данными. Таким образом, при отрисовке IP-пакетов всё, что находится после IP-заголовка, обычно отображается просто как данные.
Инкапсуляция
Инкапсуляция – это процесс передачи данных с верхнего уровня приложений вниз (по стеку протоколов) к физическому уровню, чтобы быть переданными по сетевой физической среде (витая пара, оптическое волокно, Wi-Fi, и др.). Причём на каждом уровне различные протоколы добавляют к передающимся данным свою информацию.
Напомню, что сетевая модель OSI состоит из 7 уровней (уровень приложений, уровень представления, сеансовый, транспортный, сетевой, канальный и физический). Все сетевые устройства работают согласно модели OSI, только некоторые используют все 7 уровней, а другие меньше. Это позволяет обрабатывать поступающие данные в несколько раз быстрее.
Например, Ваш компьютер использует все 7 уровней, маршрутизатор – 3 нижних уровня, коммутатор – только 2 нижних уровня.
На рисунке Вы видите взаимодействие двух компьютеров, между которыми находится маршрутизатор. Компьютерами PC1 и PC2 могут быть как домашние компьютеры, так и сервера. Маршрутизатор, как и говорилось выше, работает только на трех уровнях модели, их (трех уровней) достаточно, чтобы проложить маршрут в любой сети.
Инкапсуляция и декапсуляция
Проще будет разобрать эти процессы инкапсуляции и декапсуляции на примере. Допустим, Вы захотели посмотреть какую-то веб-страничку, ввели в адресную строк браузера адрес сайта и нажали кнопку Enter. После этого браузер должен отправить запрос на сервер (на котором хранится эта веб-страничка), с целью получения данных. Вот как раз на этом этапе, введённый Вами адрес сайта является данными, которые должны передаться на сервер в виде запроса.
На этом уровне Ваш компьютер преобразует строку введенного текста (адреса) в формат удобный для передачи далее на нижний уровень.
Далее данные (уже не текст) поступают на сеансовый уровень, но на нём (в данном случае) нам нет необходимости использовать протоколы (этого уровня), и поэтому данные передаются далее.
Транспортный уровень получает данные и определяет, что дальше они должны быть переданы используя протокол TCP. Перед передачей транспортный уровень разбивает данные на кусочки данных и добавляет к каждому кусочку заголовок, в котором содержится информация о логических портах компьютеров (с какого данные были посланы (например 1223) и для какого предназначаются (в данном случае 80)). На транспортном уровне эти кусочки данных с заголовком называются сегментами. Сегменты передаются дальше вниз к сетевому уровню.
Сетевой уровень, получая каждый сегмент, разделяет его на еще более маленькие части и к каждой части добавляет свой заголовок. В заголовке сетевого уровня указываются логические сетевые адреса отправителя (Ваш компьютер) и получателя (Сервер).
Логические сетевые адреса – это всем известные IP-адреса, еще наверное непонятно что обозначают цифры и точки в них, но вскоре, этот пробел в знаниях заполнит соответствующая информация 😉
Эти маленькие кусочки данных уже с несколькими заголовками (на верхних уровнях тоже добавляются специфичные заголовки) на сетевом уровне называются пакетами, которые в свою очередь передаются на канальный уровень.
На канальном уровне пакеты разделяются на еще более маленькие кусочки данных, и к ним помимо опять добавляемого заголовка, только уже канального уровня, добавляется еще и трейлер. На этом уровне в заголовках содержатся физические адреса устройств – передающего и для кого они предназначаются, а в трейлере находится вычисленная контрольная сумма, некий код (информация), который используется для определения целостности данных.
Эти очень маленькие кусочки данных именуются кадрами или фреймами (одно и тоже). Далее кадры передаются на физический уровень.
На физический уровень кадры передаются уже в виде сигналов битов и следуют через другие сетевые устройства в пункт назначения.
Весь процесс преобразования данных (с верхнего уровня) в сигналы (на нижний уровень) называется инкапсуляцией. Посмотрите на рисунок ниже, там представлена общая схема инкапсулирования с верхнего уровня на нижний:
Далее сигналы, проходя через несколько сетевых устройств (в нашем случае это маршрутизатор и коммутатор), доходят до получателя, в данном случае до сервера (По всем картинкам можно кликнуть и они увеличится).
Сетевая карта сервера принимает биты (на физическом уровне) и преобразует их в кадры (для канального уровня). Канальный уровень в обратной последовательности должен преобразовать кадры в пакеты (для сетевого уровня), только перед преобразованием уровень сначала смотрит на МАС-адрес (физический адрес) получателя, он должен совпадать с MAC-адресом сетевой карты, иначе кадр будет уничтожен. Затем канальный уровень (в случае совпадения MAC-адреса) высчитывает сумму полученных данных и сравнивает полученное значение со значением трейлера. Напомню, что значение трейлера высчитывалось на Вашем компьютере, а теперь оно, после передачи по проводам, сравнивается с полученным значением на сервере и если они совпадают, кадр преобразуется в пакет. Если проверочный код целостности данных рознится – кадр незамедлительно уничтожается.
На сетевом уровне происходит проверка логического адреса (IP-адреса), в случае успешной проверки пакет преобразуется в сегмент, попадая на транспортный уровень.
На транспортном уровне проверяется информация из заголовка, что это за сегмент, какой используется протокол, для какого логического порта предназначается и т.п. Протокол использовался TCP, поэтому назад на Ваш компьютер посылается уведомление о прибытии сегмента. Как говорилось выше (когда данные упаковывали в сегмент) в том случае использовался 80 порт назначения. Т.к. на веб-сервере как раз открыт этот порт, данные передаются дальше на верхний уровень.
На верхних уровнях запрос (введенный адрес сайта) обрабатывается веб-сервером (проверяется, доступна-ли запрашиваемая веб-страничка).
После того, как страница будет найдена на сервере, она (текст, изображения, музыка) преобразуется в цифровой код, удобный для инкапсулирования. Большой объём данных делится на части и поступает ниже на уровень – транспортный. Там кусочек данных преобразуется в сегмент, только порт назначения теперь будет тот, с которого вы посылали (вспоминайте, 1223). Сегмент преобразуется в пакет, в заголовке которого содержится IP-адрес вашего компьютера и переходит ниже. На канальном уровне пакет в свою очередь преобразуется в кадры и добавляется заголовок и трейлер. В заголовок помещается МАС-адрес назначения (в данном случае это будет адрес шлюза), а в трейлер проверочный код на целостность данных. Далее сетевая карта посылает кадры в виде сигналов по кабелю по направлению к Вашему компьютеру.
PDU
Вам обязательно надо запомнить, что те кусочки данных (вместе с заголовками), которые переходят с уровня на уровень (с добавлением заголовков или наоборот) называются Protocol Data Unit или PDU. Если перевести литературно на русский язык, то получается фрагмент данных на каждом уровне модели. В первой части CCNA попадаются вопросы связанные с PDU, так что обязательно запомните что это такое 😉
Заключение
Вы познакомились с эталонными сетевыми моделями OSI, TCP/IP (DOD), разобрались с процессами инкапсуляции (encapsulation) и декапсуляции (decapsulation).
Также узнали, что разные сетевые устройства работают на разных уровнях. А вот какие сетевые устройства существуют и чем они отличаются узнаем в следующей статье.