1. Модель OSI. Идея.
Друзья, в своё время мы в общих чертах обсуждали принципы работы Интернета. Но самым корректным ответом на общий вопрос "Как работает Интернет?" будет: "В соответствии с моделью OSI". С чем, с чем?
Встречайте: Священный Грааль всех сетевиков и прочих IT-шников, связанных с передачей данных — модель OSI. Тема настолько основополагающая для профи, насколько и неочевидная для не специалистов. Возьму на себя смелость объяснить её "на пальцах".
Модель OSI (англ. Open Systems Interconnection, Взаимодействие открытых систем) — это концепция, описывающая, как происходит взаимодействие двух устройств (компьютеры и т.п.) в компьютерных сетях, в т.ч. в сети Интернет. Это не какая-то технология, а именно базовая теоретическая модель. В русскоязычной литературе можно встретить термин МВОС (Модель Взаимодействия Открытых Систем), но на практике в ходу англоязычное название.
🌿 Лирическое биологическое отступление
Прежде, чем продолжить говорить о модели OSI, предлагаю на минутку отвлечься и поразмышлять о том, как происходит беседа двух людей. Что при этом происходит в деталях? Вот у меня в мозгу благодаря взаимодействию нейронов рождается какая-то мысль, которую я хочу донести до собеседника. Моя нейронная сеть оформляет эту мысль в слова, но они ещё не произнесены. Речевой центр мозга посылает нужные нервные импульсы в язык, мышцы рта, в лёгкие. Благодаря этому я выдыхаю поток воздуха, на который механически воздействуют мышцы моего речевого аппарата. Возникает звуковая волна — через взаимодействие молекул воздуха она распространяется до уха моего собеседника. И в его организме происходит обратный процесс. Звуковая волна вызывает механические колебания барабанной перепонки, слуховой нерв эти колебания улавливает и превращает в электрические импульсы, которые передаются в слуховой центр мозга. Там они интерпретируются в звуки и слова, а нейронная сеть превращает эти слова в идеи, мыслеобразы — и мой собеседник понимает, какую мысль я ему хотел донести. Да простят меня нейрофизиологи, читающие это.
Обратите внимание на следующие аспекты описанных выше процессов:
1. Конечная цель взаимодействия — передача информации от сознания одного человека к сознанию другого человека.
2. Для этого в теле говорящего человека идёт процесс преобразования информации из одной формы в другую, за каждый этап преобразования отвечает свой орган (часть тела), и каждый такой орган, сделав свою работу, по цепочке передаёт "эстафетную палочку" следующему.
3. Каждая часть тела при этом выполняет свою часть работы, "не интересуясь" предыдущей или последующей судьбой обрабатываемой информации.
4. В теле слушающего человека этот процесс происходит аналогично, только в обратной последовательности.
5. Каждый орган (часть тела) обрабатывает информацию в той форме, в которой её обрабатывал соответствующий орган собеседника (рот-ухо, нервы-нервы, мозг-мозг).
💻 Ладно, и к чему это всё?
Нет, мой канал не угнали хакеры с биофака. На примере выше я описал идею взаимодействия, которая справедлива и для компьютерных систем. Ключевым понятием модели OSI являются уровни. Каждый уровень можно сравнить с одной из систем органов человека (нервная, дыхательная, пищеварительная) — уровень решает свои конкретные задачи, но при этом взаимодействует с другими уровнями и в целом работает на общее благо всей системы (организма). И если функции каждой из систем организма непосредственно выполняют органы (нервы, лёгкие, глаза), то функции уровней модели OSI реализуют специальные программы, компоненты программ и физические устройства.
Переформулирую ключевые концепции из примера с общением людей в понятиях модели OSI:
1. Конечная цель взаимодействия — передача информации от программы на одном компьютере в программу на другом компьютере.
2. Для этого на компьютере-отправителе информация последовательно преобразуется из одной формы в другую, за каждый этап преобразования отвечает свой уровень. Выполнив свою работу, каждый уровень по цепочке передаёт "эстафетную палочку" следующему.
3. Каждый уровень обрабатывает данные, независимо от других уровней, решая свои задачи.
4. На компьютере-получателе этот процесс происходит аналогично, только в обратной последовательности.
5. Каждый уровень одного компьютера логически взаимодействует с аналогичным уровнем другого компьютера.
Далее познакомимся с уровнями модели OSI. Станет понятнее.
2. Модель OSI. Уровни.
Модель OSI включает в себя 7 уровней, каждый из которых выполняет свою определенную функцию при передаче данных между компьютерами. Кратко познакомимся с каждым из них. Уровни имеют номера, и не удивляйтесь, что рассматривать их мы начнём с седьмого.
Глубоко вдохните.
Уровень 7. Прикладной уровень (Application Layer)
Обеспечивает взаимодействие компьютера и человека. На этом уровне работают прикладные программы, которыми мы пользуемся (браузер, почтовый клиент, приложение Telegram или WhatsApp и т.п.) Всё то, что в обиходе мы и называем "Интернет". Остальные шесть нижних уровней работают "под капотом".
Это — груз, который мы хотим доставить в другой город.
Уровень 6. Уровень представления (Presentation Layer)
Здесь происходит преобразование вводимых данных в формат, предназначенный для обработки компьютером и передачи по сети. Текст, картинки, видео, звук — всё это кодируется по определённым алгоритмам перед отправкой, а на стороне получателя обратной процедурой вновь обретает доступную человеку форму.
Запаковываем груз в подходящую для перевозки тару.
Уровень 5. Сеансовый уровень (Session Layer)
Отвечает за поддержание сеанса связи (сессии), позволяя приложениям корректно взаимодействовать между собой длительное время, если это требуется.
Созваниваемся с получателем груза и предупреждаем его об отправке.
💬 Нужно отметить, что хотя уровни 5, 6 и 7 имеют вполне чётко описанные функции, на практике границы между ними размыты, т.к. функционал 5 и 6 уровня часто "вшит" в пользовательское приложение. Поэтому всё, что выше 4 уровня, зачастую относят просто к приложениям. С академической точки зрения — это некорректно, на практике — удобно.
Уровень 4. Транспортный уровень (Transport Layer)
Управляет процессом передачи данных между приложениями на разных компьютерах. На одной паре компьютеров данными могут одновременно обмениваться разные приложения — это разные потоки данных, и их нужно разграничивать. Оптимизация процесса передачи — здесь же.
Транспортному уровню всё равно, какие данные передавать, и где находится получатель, он предоставляет сам логический механизм передачи данных с одного компьютера на другой (какие данные передавать — решают вышестоящие уровни, а как найти получателя и добраться до него —нижестоящие).
Это — грузовик, который повезёт тару с нашим грузом.
Уровень 3. Сетевой уровень (Network Layer)
Определяет, где находится компьютер-получатель, и как до него добраться. Прокладывает маршрут для передачи данных и следит за его соблюдением, позволяя взаимодействовать компьютерам из разных локальных сетей.
Это сеть указателей на перекрёстках и карта в бардачке грузовика.
Уровень 2. Канальный уровень (Data Link Layer)
Отвечает за организацию отправки/приема данных между компьютерами в одной локальной сети. Здесь все компьютеры находятся рядом, никакие маршруты не нужны, но важно упорядочить передачу информации. Представьте школьный класс, в котором сидит десятка два учеников. Если все они начнут говорить одновременно и на перебой, никто ничего не поймёт. Но если определить правило, что говорит только один, поднявший руку, а остальные слушают — всё будет понятно. Этим и занимается канальный уровень. При этом важно понимать, что ему всё равно, какая информация передаётся, он просто организует среду передачи.
Это дорога, по которой едет наш грузовик.
Уровень 1. Физический уровень (Physical layer)
Этот уровень связан с физическими аспектами передачи данных, такими как провода, сигналы и физические интерфейсы. Как именно использовать электрическое напряжение, радиоволны или свет для непосредственной передачи сигнала от одного соседнего устройства к другому — это всё про физический уровень.
Это асфальт, из которого состоит дорога.
Можно выдыхать.
Далее разберёмся, как всё это работает и взаимодействует.
3. Модель OSI. В действии.
Вертикали и горизонтали
↕️ Итак, у нас есть 7 уровней модели OSI. На каждом компьютере присутствуют компоненты всех семи уровней (программные модули и устройства). Друг с другом эти уровни на одном компьютере общаются последовательно и по вертикали: каждый уровень получает данные от верхнего, обрабатывает их и передаёт нижнему. Причем, полученные сверху данные воспринимаются просто как опечатанный ящик с грузом, который текущий уровень после обработки помещает в свой "ящик", опечатывает и передаёт ниже. Матрёшка — это подходящее слово. Этот процесс называется инкапсуляцией и продолжается вплоть до первого уровня, где эта матрёшка с данными уже физически "уедет" на другой компьютер, а там процесс будет запущен в обратную сторону — каждый уровень, получив ящик снизу, будет его вскрывать, обрабатывать содержимое и передавать его выше. Это называется декапсуляция.
↔️ А вот между собой одноранговые уровни на разных компьютерах общаются по горизонтали. Первый уровень — с первым, ... , седьмой — с седьмым. Это логическое взаимодействие. И именно N-й уровень на одной стороне поймёт, что хотел сказать N-й уровень на другой стороне. Именно N-й уровень является получателем информации от N-го уровня с соседнего компьютера. Для остальных уровней эта информация — просто непонятный черный ящик, который нужно доставить. Правила такого горизонтального взаимодействия между одноранговыми уровнями называют сетевым протоколом.
Пример взаимодействия
Давайте для наглядности разберём наконец уже пример.
Пусть мы хотим открыть страничку сайта в браузере (часть деталей я буду опускать, чтобы сосредоточиться именно на работе модели OSI).
👨💻 Уровень 7. Прикладной
Мы набираем в адресной строке "www.primer.ru". Наш браузер формирует запрос для веб-сервера "Пришли главную страницу своего сайта". Запаковывает этот запрос в Ящик №7 и передаёт его ниже.
Уровни 6 и 5 пропустим, потому что, как говорилось ранее, их работа часто "вшита" в 7 уровень. Так, в данном примере, на 6 уровне (Представления) определены форматы текста и картинок, из которых состоит страница сайта.
🚚 Уровень 4. Транспортный
Запаковывает Ящик №7 в свой Ящик №4, на котором пишет "Для веб-сервера на той стороне. Готов обмениваться данными" (ведь помимо веб-сервера на том же удалённом сервере могут быть и другие сервисы — надо знать, кто из них получатель). Спускает этот ящик ниже.
🗺 Уровень 3. Сетевой
Определяет, где находится целевой сервер, и куда нужно направить данные, чтобы они к нему попали. Запаковывает Ящик №4 в свой Ящик №3, и на нём пишет "Передать по такому-то IP-адресу. Маршрут такой-то". Спускает этот ящик ниже.
🛣 Уровень 2. Канальный уровень
Запаковывает Ящик №3 в свой Ящик №2, готовит его для отправки по каналу связи (тоже наклеивает на него специальную информацию) и передаёт ниже.
⚡️Уровень 1. Физический уровень
С помощью электрических сигналов, лазера или радиоволн "матрёшка из ящиков" передаётся на другой компьютер.
⬆️ После получения посылки на той стороне она "распаковывается" снизу вверх — каждый уровень открывает свой ящик и передаёт содержимое выше, вплоть до прикладного уровня. На 7 уровне "живёт" веб-сервер, который и получает исходный запрос на показ страницы сайта. В ответ он запаковывает нужную страницу в свой Ящик №7 и передаёт его ниже — процесс повторяется.
На первый взгляд — не очень просто, накрутили что-то эдакое. Сейчас разберёмся, зачем всё так придумали, и подведём итоги.
4. Модель OSI: Священный Грааль
Возможно, после прочтения предыдущих разделов о модели OSI, у многих возник закономерный вопрос:
А зачем так сложно-то??
📐 Главная цель, которая достигается применением модели OSI — это стандартизация. Разработчики прикладного программного обеспечения могут сосредоточиться на написании своей программы, не заботясь о том, как будет осуществляться передача их данных по сети. Разработчики сетевого оборудования могут создавать свои устройства, не думая о том, какие именно данные будут по сети передаваться. И т.п. Главное — соблюдать принципы и стандарты того уровня модели OSI, для которого ты разрабатываешь свой продукт. Тогда продукты разных компаний будут совместимы друг с другом. А это даёт огромное ускорение индустрии — когда разные люди могут параллельно разрабатывать разные компоненты системы, концентрируясь на своём участке и будучи при этом уверенными, что в итоге "паззл сложится".
👨💻 Этот же принцип помогает выделять IT-специалистов по разным направлениям. Так, уровни с 1 по 4 — это вотчина сетевых инженеров. Они создают, настраивают и администрируют сеть. А с уровнями 5-7 работают администраторы сервисов, разработчики прикладных программ и непосредственные пользователи. Сетевые технологии — штука непростая и разноплановая, и зачастую для эффективной работы требует от специалистов более узкой специализации ("человек-оркестр" хорош не всегда). И модель OSI позволяет провести границы такой специализации (зачастую — уже на стадии ВУЗа).
🩺 Кроме того, модель OSI помогает диагностировать проблемы в сети, так как каждый уровень имеет свои функции, задачи и признаки неисправностей. Процесс выявления неполадок обычно идёт в привязке к уровням модели, что делает этот процесс системным, а не хаотичным. Например, если сетевое приложение не работает, но выяснили, что на сетевом уровне два компьютера "видят" друг друга, то на канал связи уже можно не грешить, а проблему искать "выше" — либо на транспортном уровне, либо в самом приложении. И наоборот, если у нас крыс поел провод, то пока с этим не разберёмся, о вышестоящих уровнях можно даже не думать.
🗝 Хотя модель OSI и может показаться сложной, она является ключевым инструментом для понимания того, как работают компьютерные сети. В начале нашей беседы я назвал её Священным Граалем сетевых технологий и не отказываюсь от своих слов. Кстати, если мне доводится собеседовать человека, претендующего на роль сетевого инженера, модель OSI — это первое, с чего я начну разговор. Её знание, понимание и способность ориентироваться в ней — условие вовсе не достаточное для специалиста-сетевика, но абсолютно необходимое.
🌐 Так что, подводя итог, хочу повторить слова, которыми я начинал эту статью: самым корректным ответом на вопрос "Как работает Интернет?" будет "В соответствии с моделью OSI". Как и любая другая сеть.
================
Полная версия блога "Цифровой чай" – в Telegram. Подписывайтесь.