Разное

Инкапсуляция с: Инкапсуляция в Си++ и Си / Хабр

Содержание

Инкапсуляция в ООП Java подробно с примерами

Инкапсуляция в Java  — это принцип объединения данных (переменных) и кода в единое целое. Это одна из четырех концепций ООП. Другие три — это Наследование, Полиморфизм и Абстракция.

Инкапсуляция на примере

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

class Account {
    private int account_number;
    private int account_balance;

    public void show Data() {
        //code to show data 
    }

    public void deposit(int a) {
        if (a < 0) {
            //show error 
        } else
            account_balance = account_balance + a;
    }
}

Предположим, хакеру удалось получить доступ к коду вашего банковского счета. Теперь он пытается внести сумму -100 на ваш счет двумя способами. Давайте посмотрим на его первый метод или подход.

Подход 1: Он пытается внести недействительную сумму (скажем, -100) на ваш банковский счет, манипулируя кодом.

Обычно переменные в классе устанавливаются как «частные», как показано ниже. Доступ к нему можно получить только с помощью методов, определенных в классе. Никакой другой класс или объект не может получить к ним доступ.

Если элемент данных является закрытым, это означает, что доступ к нему возможен только в пределах одного класса. Никакой внешний класс не может получить доступ к частному члену данных или переменной другого класса.

Так что в нашем случае хакер не может внести сумму -100 на ваш счет.

Подход 2: Первый подход Хакера не сработал. Далее он пытается внести сумму -100, используя метод «депозит».

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

Таким образом, вы никогда не подвергаете свои данные внешней стороне. Что делает ваше приложение безопасным.

Весь код можно представить как капсулу, и вы можете общаться только через сообщения. Отсюда и название инкапсуляции.

Сокрытие данных в Java

Часто инкапсуляция Java называется скрытием данных. Но концепция инкапсуляции не просто скрывает данные, она предназначена для лучшего управления или группировки связанных данных.

Чтобы добиться меньшей степени инкапсуляции в Java, вы можете использовать такие модификаторы, как «protected» или «public». Благодаря инкапсуляции разработчики могут легко изменять одну часть кода, не затрагивая другую.

Методы получения и установки в Java

Если элемент данных объявлен как «закрытый», то доступ к нему возможен только в пределах одного класса. Никакой внешний класс не может получить доступ к данным члена этого класса. Если вам нужен доступ к этим переменным, вы должны использовать публичные методы «getter» и «setter».

Методы Getter и Setter используются для создания, изменения, удаления и просмотра значений переменных.

Следующий код является примером методов получения и установки:

class Account{ 
private int account_number;
private int account_balance; 
    // getter method
	public int getBalance() {
        return this.account_balance;
    }
    // setter method
	public void setNumber(int num) {
        this.account_number = num;
    }
}

В приведенном выше примере метод getBalance() — это метод получения, который считывает значение переменной account_balance, а метод setNumber() — это метод установки, который устанавливает или обновляет значение для переменной account_number.

Абстракция и Инкапсуляция — разница

Часто инкапсуляция неправильно понимается как абстракция. Давай учиться-

  • Инкапсуляция — это больше о том, «Как» добиться функциональности;
  • Абстракция больше о том, что может сделать класс.

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

Преимущества

  • Инкапсуляция связывает данные с соответствующими функциями. Здесь функциональные возможности означают «методы», а данные означают «переменные»
  • Таким образом, мы храним переменную и методы в одном месте. Это место «класс». Класс является основой для инкапсуляции.
  • С помощью Java Encapsulation вы можете скрыть (ограничить доступ) важные элементы данных в своем коде, что повышает безопасность
  • Как мы уже обсуждали ранее, если элемент данных объявлен как «закрытый», доступ к нему возможен только в пределах одного класса. Никакой внешний класс не может получить доступ к элементу данных (переменной) другого класса.
  • Однако, если вам нужен доступ к этим переменным, вы должны использовать публичные методы «getter» и «setter».

Инкапсуляция и декапсуляция, PDU, уровни OSI.

Инкапсуляция – это процесс передачи данных с верхнего уровня приложений вниз (по стеку протоколов) к физическому уровню, чтобы быть переданными по сетевой физической среде (витая пара, оптическое волокно, Wi-Fi, и др.). Причём на каждом уровне различные протоколы добавляют к передающимся данным свою информацию.

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

Например, Ваш компьютер использует все 7 уровней, маршрутизатор – 3 нижних уровня, коммутатор – только 2 нижних уровня.

На рисунке Вы видите взаимодействие двух компьютеров, между которыми находится маршрутизатор. Компьютерами PC1 и PC2 могут быть как домашние компьютеры, так и сервера. Маршрутизатор, как и говорилось выше, работает только на трех уровнях модели, их (трех уровней) достаточно, чтобы проложить маршрут в любой сети.

Теперь перейдем к самому процессу инкапсуляции, декапсуляции.

Инкапсуляция и декапсуляция

Проще будет разобрать эти процессы инкапсуляции и декапсуляции на примере. Допустим, Вы захотели посмотреть какую-то веб-страничку, ввели в адресную строк браузера адрес сайта и нажали кнопку Enter. После этого браузер должен отправить запрос на сервер (на котором хранится эта веб-страничка), с целью получения данных. Вот как раз на этом этапе, введённый Вами адрес сайта является данными, которые должны передаться на сервер в виде запроса.

Эти данные опускаются с уровня приложений, на уровень представления данных.

На этом уровне Ваш компьютер преобразует строку введенного текста (адреса) в формат удобный для передачи далее на нижний уровень.

Далее данные (уже не текст) поступают на сеансовый уровень, но на нём (в данном случае) нам нет необходимости использовать протоколы (этого уровня), и поэтому данные передаются далее.

Транспортный уровень получает данные и определяет, что дальше они должны быть переданы используя протокол TCP. Перед передачей транспортный уровень разбивает данные на кусочки данных и добавляет к каждому кусочку заголовок, в котором содержится информация о логических портах компьютеров (с какого данные были посланы (например 1223) и для какого предназначаются (в данном случае 80)). На транспортном уровне эти кусочки данных с заголовком называются сегментами. Сегменты передаются дальше вниз к сетевому уровню.

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

Логические сетевые адреса – это всем известные IP-адреса, еще наверное непонятно что обозначают цифры и точки в них, но вскоре, этот пробел в знаниях заполнит соответствующая информация 😉

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

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

Физические адреса устройств – это MAC-адреса.

Эти очень маленькие кусочки данных именуются кадрами или фреймами (одно и тоже). Далее кадры передаются на физический уровень.

На физический уровень кадры передаются уже в виде сигналов битов и следуют через другие сетевые устройства в пункт назначения.

Весь процесс преобразования данных (с верхнего уровня) в сигналы (на нижний уровень) называется инкапсуляцией. Посмотрите на рисунок ниже, там представлена общая схема инкапсулирования с верхнего уровня на нижний:

Далее сигналы, проходя через несколько сетевых устройств (в нашем случае это маршрутизатор и коммутатор), доходят до получателя, в данном случае до сервера (По всем картинкам можно кликнуть и они увеличится).

Сетевая карта сервера принимает биты (на физическом уровне) и преобразует их в кадры (для канального уровня). Канальный уровень в обратной последовательности должен преобразовать кадры в пакеты (для сетевого уровня), только перед преобразованием уровень сначала смотрит на МАС-адрес (физический адрес) получателя, он должен совпадать с MAC-адресом сетевой карты, иначе кадр будет уничтожен. Затем канальный уровень (в случае совпадения MAC-адреса) высчитывает сумму полученных данных и сравнивает полученное значение со значением трейлера. Напомню, что значение трейлера высчитывалось на Вашем компьютере, а теперь оно, после передачи по проводам, сравнивается с полученным значением на сервере и если они совпадают, кадр преобразуется в пакет. Если проверочный код целостности данных рознится – кадр незамедлительно уничтожается.

На сетевом уровне происходит проверка логического адреса (IP-адреса), в случае успешной проверки пакет преобразуется в сегмент, попадая на транспортный уровень.

На транспортном уровне проверяется информация из заголовка, что это за сегмент, какой используется протокол, для какого логического порта предназначается и т.п. Протокол использовался TCP, поэтому назад на Ваш компьютер посылается уведомление о прибытии сегмента. Как говорилось выше (когда данные упаковывали в сегмент) в том случае использовался 80 порт назначения. Т.к. на веб-сервере как раз открыт этот порт, данные передаются дальше на верхний уровень.

На верхних уровнях запрос (введенный адрес сайта) обрабатывается веб-сервером (проверяется, доступна-ли запрашиваемая веб-страничка).

Этот процесс преобразования сигналов из провода в данные называется процессом декапсуляции.

После того, как страница будет найдена на сервере, она (текст, изображения, музыка) преобразуется в цифровой код, удобный для инкапсулирования. Большой объём данных делится на части и поступает ниже на уровень – транспортный. Там кусочек данных преобразуется в сегмент, только порт назначения теперь будет тот, с которого вы посылали (вспоминайте, 1223). Сегмент преобразуется в пакет, в заголовке которого содержится IP-адрес вашего компьютера и переходит ниже. На канальном уровне пакет в свою очередь преобразуется в кадры и добавляется заголовок и трейлер. В заголовок помещается МАС-адрес назначения (в данном случае это будет адрес шлюза), а в трейлер проверочный код на целостность данных. Далее сетевая карта посылает кадры в виде сигналов по кабелю по направлению к Вашему компьютеру.

Так и происходит сетевой обмен данными, инкапсуляция и декапсуляция.

PDU

Вам обязательно надо запомнить, что те кусочки данных (вместе с заголовками), которые переходят с уровня на уровень (с добавлением заголовков или наоборот) называются Protocol Data Unit или PDU. Если перевести литературно на русский язык, то получается фрагмент данных на каждом уровне модели. В первой части CCNA попадаются вопросы связанные с PDU, так что обязательно запомните что это такое 😉

Заключение

Вы познакомились с эталонными сетевыми моделями OSI, TCP/IP (DOD), разобрались с процессами инкапсуляции (encapsulation) и декапсуляции (decapsulation).

Также узнали, что разные сетевые устройства работают на разных уровнях. А вот какие сетевые устройства существуют и чем они отличаются узнаем в следующей статье.

Инкапсуляция – это упаковка данных и функций в единый компонент. Инкапсуляция, полиморфизм, наследование: особенности :: SYL.ru

В конце 80-х годов прошлого века в программировании ничего кардинально нового не произошло. Было много языков, много споров и был Turbo Pascal 5.5, а в комплекте его поставки было несколько странных файлов и несколько не привычных конструкций в синтаксисе.

Вероятно, объектно-ориентированное программирование обязано своим появлением неизвестному художнику, а может быть и нескольким, но особенно большой ценности идея объединения кода и данных в те далекие времена не несла. С термином «инкапсуляция» она была связана слабо и косвенно.

Структуры, функции и процедуры

Уже в первых версиях языков программирования, еще до появления первых баз данных стало совершенно ясно, что данное – это не число и не строка символов, а что-то осмысленное. Пусть это будет переменная «счетчик» в цикле или три строчных переменных «фамилия», «имя», «отчество», но это всегда сразу смысл.

«Счетчик» всегда находится после цикла и работает в нем. А «фамилия», «имя», «отчество» будут объявлены рядышком, и их участие во многих участках кода будет совместным. Где-то они будут использоваться самостоятельно, в общем, у них будет один смысл.

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

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

Причины начала инкапсуляции

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

Каждый компилятор и интерпретатор языка старательно брал все новое в свой синтаксис, предлагал разработчикам варианты реализации семантики.

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

Самый тривиальный пример инкапсуляции, который сохранился с давних пор и актуален по сей день. Три переменных «фамилия», «имя», «отчество», где бы они не находились, всегда требуют к себе функций добавления, изменения, удаления. Более того, эти переменные обеспечивают массу конкретных людей, то есть массу экземпляров:

  • Иванов, Иван, Иванович;
  • Петрова, Ирина, Васильевна;
  • Кукушкина, Полина, Григорьевна;
  • … и абстрактный класс …
  • «фамилия», «имя», «отчество»;
  • … и три вечные функции …
  • добавить;
  • изменить;
  • удалить.

Таких конструкций на любом уровне (адреса, рабочие должности, штатное расписание, производственный план) можно придумать великое множество. И сложность реализации иной конструкции будет неимоверно длительной.

Время жизни экземпляра инкапсуляции

Инкапсуляция – это данные и код.

  • Слово – encapsulation.
  • Латинский вариант – in capsula.

Слово «капсула» именно это и означает. То, что многие языки и разработчики додумали (public, protected, private) – тема отдельная и к смыслу инкапсуляции имеет либо относительное, либо применительное отношение.

По большому счету, экземпляр – это просто вариант (слепок, момент) данных, а те три метода живут вечно. Код как информационный фильтр «обеспечивает» жизнь экземпляров, потому как он един для всех, и, кстати, пока что:

  • код «постоянен»;
  • обозначает самое простое неизменное действие.

Но иной экземпляр может «выкинуть» фокус.

Если пример отнесен к штатному расписанию компании, то особенное значение в наборе экземпляров будет иметь директор и бухгалтер. Остальные могут остаться в обычном «виде». У директора и бухгалтера могут появиться свои собственные коды, то есть свои функции.

Это означает, что жизнь экземпляра не всегда определяется функциональность трех магических слов:

  • добавить;
  • изменить;
  • удалить.

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

Начало ООП

«Надо срочно что-то менять», – подумало некоторое количество разработчиков, и в качестве хорошего примера предложило поработать с объектами на Turbo Pascal 6.0 Professional. Это не идеальное предложение, но очень качественное простое и эффективное.

Положив, что «инкапсуляция, полиморфизм, наследование» – это основа объекта, получим неплохое начало. Полиморфизм дает необходимую динамику, потому как экземпляры могут иметь различную функциональность. Это нужно как-то «узаконить» в объекте. Наследование дает возможность отразить в объекте однородность, построить генеалогическое древо формализованной информации.

Звучит сложно. Положив, что инкапсуляция данных – это простое объединение данных и кода, все очень упрощается и появляется отличная концепция.

Объект – это данные и код. Экземпляр объекта – это только данные, к которым имеет доступ его код. Экземпляров может быть очень много, но код для них всегда один и не прикрепляется к каждому, но доступен каждому.

Когда экземпляр объекта требует к себе особенного внимания, просто появляется еще один объект, у которого будет улучшенная функциональность, то есть он наследует, все что было в исходном объекте, но добавляет что-то свое.

Мир пополняется экземплярами второго объекта, у которых тоже появляются новые потребности. Новая функциональность и новый объект.

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

Идеальный вариант реализации задачи в стиле ООП – это когда инкапсуляция, полиморфизм, наследование продуманы настолько качественно, что код в программе напрочь отсутствует. Объекты сами по себе выполняют свои функции, пользуются только своим кодом, выстраивают отношения между собой.

Жизнь ООП

В реальности все выглядит совсем иначе. Инкапсуляция – это хорошо и здесь не поспоришь. Но правильно построить картину объектов, продумать функциональность каждого, предусмотреть, как поведут себя те или иные экземпляры, что можно ожидать от данных, непросто. Пришлось упростить ситуацию, и ООП пошло по тропе автоматизации труда разработчика, а не решения реальных задач.

С точки зрения скорости приобретения опыта – это эффективная идея, ведь чего прикладывать ООП к автоматизации бухгалтерского труда, когда его можно приложить к меню на HTML-странице?

Очень все просто: есть элемент меню, есть его варианты. Можно предложить пользователю выбирать варианты меню (вертикальное, горизонтальное, выпадающее), можно дать кнопкам формы (круглая, квадратная, округленная и т. д.).

Мало кого интересует труд и жизнь разработчика. Всем нужна бухгалтерия, производство, обучение, потому что нужно выполнять реальные задачи. Значит нужно увеличивать коллективы, но тогда система объектов будет реализовываться различными специалистами и они могут навредить друг другу.

Во многом это поставило ООП на производственные рельсы. Уже не оставалось сомнений: инкапсуляция, наследование – это хороший путь, но как защитить объекты от постороннего вмешательства, как со стороны, так и по родословной линии? Это не обязательно будет хакер. Случайно нанести вред, изменив данные предка, может другой разработчик.

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

Инкапсуляция – это хорошо, но…

PHPWord – мощный продукт, хорошо сделанный и перспективный. Отличная система объектов, продуманная и работающая.

Ниже начало описания внутреннего объекта этого продукта. Одна простая абстракция ячейки таблицы от вообще пустой абстракции – какого-то контейнера. И это далеко не все описание.

Не надо погружаться в дебри, чтобы понять. Использование здесь многочисленных комментариев не придает ясности, а слова protected, private и public вовсе говорят, прежде всего, о том, что сторонний разработчик, используя эту библиотеку, поменял в нужном месте private на public (см. коммент: «sc 19.06.2016 было привате»).

Это факт ошибки в коде, которую при применении разработчик был вынужден исправить, а, следовательно, ему потребовалось что-то изменить.

Можно допустить, что на этапе разработки требовалось ограничить доступ к тем или иным объектам, но здесь уже важно совсем другое. Есть жизнь экземпляров, есть жизнь объектов, но уже есть новая жизнь – то, что происходит с системой объектов в ее применении.

Жизнь в разработке и жизнь в применении. Характерная черта современного программирования – жесткое отрицание преемственности. Если раньше разработчик гарантировал, что каждая новая версия будет дополнять и улучшать предшествующую, то сегодня каждая новая версия объекта, языка, среды программирования кардинально или как минимум принципиально отличается от предыдущей.

Даже условия размещения на хостинге могут измениться так, что придется переделывать код. А часто это очень даже непросто.

Хорошая наследственность, хороший выход

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

Система объектов PHPWord станет прозрачной и доступной. Она дается как есть, но если есть желание идти дальше, потому как текущий функционал недостаточен. Хорошая идея. Тогда это уже другая система объектов, и лучше, если она пойдет дальше.

Не так уж и плоха идея жесткого отрицания преемственности: она стимулирует развитие знаний. Объекты, построенные одним коллективом разработчиков, – это их соображения о том, как решать задачу, как представить ее функционал.

Понимание этого решения другой компанией разработчиков – это трансформация опыта. Если представить себе, что это только прообраз нужной системы объектов, то почему просто не унаследовать его? Хорошая наследственность – черта естественного интеллекта, рассчитывать на что-то адекватное со стороны программирования – это из области будущего, хотя и ближайшего.

Правильная инкапсуляция

Инкапсуляция – это вовсе не комбинация данных и кода. Это совмещение доступного с желаемым. Если мыслить не данными и алгоритмами, а воспринимать действительность и совершать адекватную инкапсуляцию, наследуя это действие от разработчика к разработчику, то вероятно: появление систем объектов, перемещающихся и саморазвивающихся, все же возможно.

Инкапсуляция и декапсуляция данных в моделях передачи данных OSI 7 и TCP/IP. Фрагментация данных.

Привет, посетитель сайта 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.

Рисунок 1.16.1 Принцип инкапсуляции данных в модели стека протоколов TCP/IP

Здесь у нас есть пользователь, который хочет отправить свое другу сообщение: «Привет, Вася!». Этот пользователь открывает почтовый клиент, вводит сообщение и нажимает кнопку «Отправить». Пока пользователь вводит сообщение и пока его обрабатывает почтовый клиент, оно представлено в виде «Пользовательских данных», как только это сообщение попадет на транспортный уровень, он превратится в сегмент или дейтаграмму (в зависимости от протокола, который будет использован для передачи: TCP или UDP), более того, если пользовательские данные будут слишком большими, то на транспортном уровне будет выполнена фрагментация, то есть данные пользователя будут разбиты на сообщения поменьше и к каждому сообщению будет добавлен заголовок транспортного уровня, по которому принимающая сторона сможет снова собрать сообщение, которое послал пользователь, а также определить: какому приложение следует отправить полученные данные на обработку.

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

Далее пакеты спустятся на канальный уровень, для канального уровня данными уже являются пакеты. На канальном уровне поверх заголовка сетевого уровня будет добавлен заголовок канального уровня, но, кроме того, после того, как будет добавлен заголовок, клиентский компьютер посчитает контрольную сумму получившейся конструкции и запишет ее после пользовательских данных, чтобы принимающее устройство смогло проверить: а не повредились ли данные при передаче по сети. Вся конструкция целиком называется кадром. Сетевые карты компьютеров и коммутаторы для передачи данных пользуются заголовками канального уровня.

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

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

1.16.3 Декапсуляция данных

Давайте теперь посмотрим, что будет происходить на принимающей стороне, то есть разберемся с принципом декапсуляции данных в моделях TCP/IP и OSI 7. Декапсуляция данных – это процесс обратный инкапсуляции, если при подготовке данных к передаче мы их запаковывали, то на принимающей стороне мы их будем распаковывать, если все понятно, то можете пропустить раздел этот раздел, если нет, то давайте разбираться. Декапсуляция данных показана на Рисунке 1.16.2.

Рисунок 1.16.2 Принцип декапсуляции данных в модели стека протоколов TCP/IP

Как видите, второй рисунок ничем не отличается от первого, разница только в направлении стрелки, которая показывает, что компьютер Васи занимается приемом данных, то есть идет процесс декапсуляции данных. Итак, компьютер Васи, подключенный витой парой к компьютерной сети получает сообщения на скорости 100 Мбит/c, которые на физическом уровне представлены в виде последовательности бит, эти биты поступают на канальный уровень и на нем принимающий компьютер собирает из них кадры, по заголовку кадра компьютер Васи понимает, что это сообщение принадлежит ему, а по контрольной сумме компьютер понимает, что сообщение не было повреждено в процессе передачи по сети.

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

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

Рисунок 1.16.3 Инкапсуляция и декапсуляция данных в модели стека протоколов TCP/IP или процесс приема и передачи данных в компьютерной сети

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

Как видите, ничего сложного в декапсусляции и инкапсуляции нет, это похоже на процесс запаковки и распаковки конфет: на заводе они запаковываются в фантики, а перед тем как их съесть, вы эти фантики разворачиваете.

1.16.4 Выводы

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

Пользователь или конечный потребитель услуги взаимодействует с приложениями, то есть с самым верхним уровнем модели передачи данных. То есть протоколы верхнего уровня используются для взаимодействия приложений друг с другом, так, например, http-клиент или просто браузер взаимодействует с http-сервером в сети Интернет по одноименному протоколу (в качестве примера веб-сервера можно привести сервер Apache), особенностью схемы взаимодействия клиент-сервер в данном случае является то, что ни клиентское, ни серверное приложение ничего не знают о существование компьютерной сети, даже если клиент находится в Сибири, а сервер в Нью-Йорке, так как от этих приложений эта информация скрыта, благодаря принципу инкапсуляции данных, эти приложения общаются на своем уровне при помощи http-сообщений: клиент шлет запросы, а сервер ответы.

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

Сообщения транспортного уровня спускаются на сетевой уровень и к ним добавляется сетевой заголовок, этот заголовок помогает маршрутизаторам определить путь, по которому будут следовать данный при их передаче из пункта А в пункт Б, то есть здесь у нас появляется представление о логической топологии компьютерной сети, но нет понимания того, как получить физический доступ к ресурсам нашей сети, эта информация сокрыта от сетевого уровня.

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

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

Разница между Инкапсуляцией и Декапсуляцией

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

В современном мире любая организация имеет важны данные. Для отправки данных с минимальными затратами времени используются компьютерные сети. Компьютерная сеть — это совокупность взаимосвязанных устройств, таких как компьютеры, серверы, маршрутизаторы, а также другое периферийное оборудование для совместного использования ресурсов, например такое как принтеры. При наличии большого количества хостов сеть становится сложной, подключение разных компьютеров может увеличивать несовместимость. Поэтому были усовершенствованы открытые стандартные сетевые модели. Двумя распространенными сетевыми моделями являются международная организация по стандартизации (OSI) и Протокол управления передачей/Интернет-протокол (TCP/IP). TCP/IP — это новая сетевая модель, которая является заменой модели OSI. Эти модели содержат уровни. Все данные в этих моделях сети проходят через уровни передачи данных. Инкапсуляция и декапсуляция — это два термина, связанные с передачей данных через каждый уровень.

Содержание
  1. Обзор и основные отличия
  2. Что такое Инкапсуляция
  3. Что такое Декапсуляция
  4. Сходство между Инкапсуляцией и Декапсуляцией
  5. В чем разница между Инкапсуляцией и Декапсуляцией
  6. Заключение
Что такое Инкапсуляция?

Для стандартизации сетевого взаимодействия используются сетевые модели. При отправке данных из одного места в другое, данные проходят через несколько уровней. Модель TCP/IP имеет четыре уровня. Это прикладной уровень, транспортный уровень, интернет-уровень и уровень доступа к сети. Каждый уровень выполняет определенную роль в модели TCP/IP. Прикладной уровень имеет все службы конечного пользователя, такие как средства электронной почты, просмотр веб-страниц и другие. Транспортный уровень управляет связью между хостами. На сетевом уровне данные называются как пакеты. Он предоставляет IP-адреса источнику и месту назначения, которые помогают идентифицировать местоположение в сети. Каждое устройство в сети имеет IP-адрес. На уровне доступа к сети пакет называется кадром. На этом уровне пакет, полученный от интернет-уровня, получает MAC-адреса источника и места назначения. MAC-адрес является физическим адресом. В итоге, кадр отправляется по сети.

Инкапсуляция данных в протоколах TCP/IP

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

Инкапсуляция — это процесс добавления информации к данным прикладного уровня, по мере ее передачи через каждый уровень модели. Каждый раз, когда данные проходят уровень, создается новый протокольный блок данных (PDU). К данным, отправленным с прикладного уровня, добавляется заголовок с информацией о TCP/UDP на транспортном уровне. Теперь эти данные называются как сегмент. Когда этот сегмент достигает Интернет-уровня, к сегменту добавляется заголовок с IP-адресами. Теперь это называется пакетом. Когда пакет достигает уровня доступа к сети, добавляется заголовок с MAC-адресами. Теперь это называется рамкой. Аналогично, на каждом уровне создается соответствующий протокольный блок данных (PDU). Добавление этой информации на каждом уровне называется инкапсуляцией. Когда процесс инкапсуляции завершен, кадр отправляется в сеть.

Что такое Декапсуляция?

Как объяснено выше, в процессе инкапсуляции, кадр выходит из главного компьютера в сеть. Затем он достигает целевого хоста. В целевом хосте кадр декапсулируется в обратном порядке до прикладного уровня. Кадр, который достигает уровня доступа к сети, содержит данные, заголовок TCP/UDP, заголовок с IP-адресами и заголовок с MAC-адресами.

Когда он отправляется на сетевой уровень, он представляет собой пакет и содержит данные, заголовок TCP/UDP и заголовок с IP-адресом. Затем пакет достигает транспортного уровня. Теперь он сегментирован и содержит данные и заголовок TCP/UDP. Наконец, сегмент достигает прикладного уровня. На прикладном уровне хост может видеть данные, отправленные с исходного компьютера. Этот процесс называется как Декапсуляция.

Сходство между Инкапсуляцией и Декапсуляцией
  • Как инкапсуляция, так и декапсуляция связаны с тем, как данные передаются и принимаются через сеть в соответствии с сетевыми моделями.
В чем разница между Инкапсуляцией и Декапсуляцией?
ИнкапсуляцияДекапсуляция
Когда данные перемещаются с верхнего уровня на нижний уровень в соответствии с моделью сети, каждый уровень включает в себя пакет информации, называемый заголовком, наряду с фактическими данными. Такая упаковка данных на каждом уровне называется инкапсуляциейКогда данные перемещаются из нижнего уровня в верхние уровни в соответствии с моделью сети, каждый уровень распаковывает соответствующие заголовки и использует эту информацию для получения фактических данных. Эта распаковка данных на каждом уровне называется как декапсуляция
Место
Инкапсуляция происходит в исходном компьютереДекапсуляция происходит в конечном компьютере
Заключение — Инкапсуляция против Декапсуляции

Вычислительная сеть — это система с большим количеством различных устройств. Для предотвращения проблемы с совместимостью передачи данных, все устройства используют стандартную модель сети. Одной из основных сетевых моделей является модель TCP/IP, состоящая из нескольких уровней, в которой все передаваемые данные, проходят через все уровни. При достижении каждого уровня к данным добавляется информация. Это называется Инкапсуляцией. Когда данные достигают места назначения, в каждом слое добавленная информация распаковывается. Этот процесс называется как Декапсуляция. Разница между Инкапсуляцией и Декапсуляцией заключается в том, что при Инкапсуляции данные перемещаются с верхнего уровня на нижний уровень, и каждый уровень вместе с фактическими данными включает в себя пакет информации, называемый заголовком, в то время как при Декапсуляции данные перемещаются из нижниго уровеня в верхний уровнень, и каждый уровень распаковывает соответствующие заголовки для получения фактических данных.

Инкапсуляция

Термин инкапсуляция используется для описания процесса добавления заголовков и трейлеров вокруг некоторых данных. Этот процесс можно объяснить с помощью четырехуровневой модели TCP / IP, где каждый шаг описывает роль уровня. Например, вот что происходит, когда вы отправляете электронное письмо с помощью вашей любимой почтовой программы (такой как Outlook или Thunderbird):

  1. электронное письмо отправляется с уровня приложения на уровень транспорта.
  2. Транспортный уровень инкапсулирует данные и добавляет свой собственный заголовок со своей собственной информацией, например, какой порт будет использоваться и передает данные на уровень Интернета
  3. Уровень Интернета инкапсулирует полученные данные и добавляет свой собственный заголовок, обычно с информация об IP-адресах источника и назначения.Уровень Интернета передает данные на уровень доступа к сети
  4. уровень доступа к сети — единственный уровень, который добавляет и заголовок, и концевик. Затем данные отправляются через физический сетевой канал.

Вот графическое представление того, как каждый уровень добавляет свою собственную информацию:

Каждый пакет (заголовок + инкапсулированные данные), определенный конкретным уровнем, имеет определенное имя:

  • Кадр — инкапсулированные данные, определенные уровень доступа к сети.Фрейм может иметь как заголовок, так и трейлер.
  • Пакет — инкапсулированные данные, определенные сетевым уровнем. Заголовок содержит IP-адреса источника и назначения.
  • Сегмент — инкапсулированные данные, определенные транспортным уровнем. В заголовок включается такая информация, как порты источника и назначения или порядковые номера и номера подтверждения.

ПРИМЕЧАНИЕ
Термин декапсуляция относится к процессу удаления заголовков и трейлеров при передаче данных от нижнего уровня к верхнему.Этот процесс происходит на компьютере, получающем данные.

Инкапсуляция данных в модели OSI
Как и в случае с уровнями TCP / IP, каждый уровень OSI запрашивает услуги у следующего более низкого уровня. Нижний уровень инкапсулирует данные верхнего уровня между заголовками (протоколы Data Link также добавляют трейлер).

В то время как модель TCP / IP использует такие термины, как сегмент, пакет и кадр, для обозначения пакета данных, определенного определенным уровнем, в модели OSI используется другой термин: блок данных протокола (PDU) .PDU представляет собой блок данных с заголовками и трейлерами для конкретного уровня, а также инкапсулированные данные. Поскольку модель OSI имеет 7 уровней, PDU пронумерованы от 1 до 7, причем физический уровень является первым. Например, термин PDU уровня 3 относится к данным, инкапсулированным на сетевом уровне модели OSI.

Вот графическое представление всех PDU в модели OSI:

.

Абстракция VS Скрытие информации VS Инкапсуляция

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.

Разница между абстракцией и инкапсуляцией

  • Домашняя страница
  • Тестирование

      • Назад
      • Гибкое тестирование
      • BugZilla
      • Cucumber
      • Тестирование базы данных
      • 000
      • Тестирование базы данных ETL
      • JUnit
      • LoadRunner
      • Ручное тестирование
      • Мобильное тестирование
      • Mantis
      • Почтальон
      • QTP
      • Назад
      • Центр качества (ALM)
      • RPA 9000 Test4 Управление
      • TestLink
  • SAP

      • Назад
      • ABAP
      • APO
      • Начинающий
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • Crystal Reports
      • FICO
      • Заработная плата
      • Назад
      • PI / PO
      • PP
      • SD
      • SAPUI5
      • Безопасность
      • Менеджер решений
      • Successfactors
      • SAP Tutorials

      4

    • Web
    • Apache
    • AngularJS
    • ASP.Net
    • C
    • C #
    • C ++
    • CodeIgniter
    • СУБД
    • JavaScript
    • Назад
    • Java
    • JSP
    • Kotlin
    • Linux
    • Linux
    • Kotlin
    • Linux
    • js

    • Perl
    • Назад
    • PHP
    • PL / SQL
    • PostgreSQL
    • Python
    • ReactJS
    • Ruby & Rails
    • Scala
    • SQL
    • 000

    • SQL
    • 000

      0003 SQL

      000

      0003 SQL

      000

    • UML
    • VB.Net
    • VBScript
    • Веб-службы
    • WPF
  • Обязательно учите!

      • Назад
      • Бухгалтерский учет
      • Алгоритмы
      • Android
      • Блокчейн
      • Business Analyst
      • Создание веб-сайта
      • CCNA
      • Облачные вычисления
      • 00030003 COBOL 9000 Compiler
          9000 Встроенные системы

        • 00030002 9000 Compiler 9000
        • Ethical Hacking
        • Учебники по Excel
        • Программирование на Go
        • IoT
        • ITIL
        • Jenkins
        • MIS
        • Сеть
        • Операционная система
        • Назад
        • Управление проектами Обзоры
        • Salesforce
        • SEO
        • Разработка программного обеспечения
        • VB A
    • Big Data

        • Назад
        • AWS
        • BigData
        • Cassandra
        • Cognos
        • Хранилище данных
        • 0003

        • HBOps
        • 0003

        • HBOps
        • MicroStrategy

    .

  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *