
Мы живем в мире, где каждое мгновение взаимодействуем с невероятно сложной и изящной системой коммуникаций, настолько прочно вошедшей в нашу жизнь, что мы редко задумываемся о ее становлении. То, что сейчас нам кажется обыденностью вроде просмотра ленты новостей, бесконечной череды коротких видео, общение с друзьями в мессенджерах и так далее, совсем недавно еще не существовало.
Появление сетей передачи данных, а вместе с ними и единой сети Интернет – одно из самых значимых событий в нашей истории. Сети передачи данных – это не просто техническое понятие, это сложная система, связывающая миллиарды устройств по всему миру и превращающая наш мир в единое информационное пространство.
Сложно представить, как выглядела бы наша жизнь без интернета. Это уже не просто технология – это среда обитания целых поколений. Работа, образование, общение, развлечения – все эти сферы немыслимы без глобальной сетевой инфраструктуры.
В этой статье мы погрузимся в мир сетевых технологий и разберёмся, как работают сети передачи данных, что такое модель OSI, какие протоколы работают на каждом её уровне, и познакомимся с основными терминами, используемыми в сфере компьютерных сетей.
Навигация по странице
Сетевая модель OSI
Представьте себе некий механизм, который позволяет миллиардам устройств всего мира, будь то компьютер, телевизор, телефон или умная колонка, общаться друг с другом. А что важнее всего – «понимать» друг друга вне зависимости от сложности устройства, страны изготовления или даты производства.
Для реализации такого механизма нужны некие общие правила, которые будут определять форматы взаимодействия всех компонентов системы. Такие правила называются протоколом.
Протокол является неким соглашением, принятым двумя взаимодействующими объектами. В нашем случае нужно объединить все взаимодействующие объекты в одну сеть, в которой они смогут свободно обмениваться данными.
Такие протоколы активно появлялись на заре становления компьютерных сетей. Протоколы могут быть разными, в зависимости от их «локализации» – фирменные протоколы, национальные или международные. Но на практике для объединения всех возможных устройств следует использовать какой-то один универсальный и всеобъемлющий протокол.
Так, в начале 80-х годов прошлого века ряд международных организаций по стандартизации пришли к разработке модели, которая сыграла значительную роль в развитии сетей.
Эта модель называется моделью взаимодействия открытых систем или же моделью OSI (Open System Interconnection). Она вобрала в себя весь опыт разработки, накопленный при создании компьютерных сетей в 70-е годы, и стала некоторой эталонной моделью.
Если кратко, то суть этой модели в том, чтобы разделить все возможные сетевые устройства на 7 уровней. Каждому из уровней задан строгий функционал и определён перечень протоколов, которые должны работать на нём.
Условно можно сказать, что модель OSI описывает, как работает весь интернет, как электроны/фотоны передаются по проводам/оптоволокну из одной части света в другую и в итоге преобразуются в смешную картинку, которую вам скидывают в любимом мессенджере.
Сразу стоит отметить, что модель OSI – абстрактная. Она даёт понимание устройства всех уровней сети, о которых мы поговорим далее, и принципы их работы. Также она используется компаниями для построения различных сетей.
Но все же по большей части остается теоретической, а на практике применяются другие модели (например, стек TCP/IP), основанные на принципах OSI. Давайте подробнее рассмотрим модель OSI.
Работа модели OSI
Ранее мы уже упоминали, что сетевая модель OSI разделяет все сетевые устройства на 7 уровней. Давайте сначала рассмотрим, как происходит взаимодействие между уровнями и что происходит с данными на этих уровнях. В следующей главе мы подробнее разберём устройства и протоколы, работающие на каждом уровне модели.
Разделение на уровни в модели OSI обусловлено несколькими соображениями:
- Уровень должен создаваться по мере необходимости отдельного уровня абстракции
- Каждый уровень должен выполнять строго определённую функцию
- Выбор функций для каждого уровня должен осуществляться с учётом создания стандартизированных международных протоколов
- Границы между уровнями должны выбираться так, чтобы поток данных между уровнями был минимален
- Количество уровней должно быть достаточно большим, чтобы различные функции не объединялись в одном уровне без необходимости, но не слишком большим, чтобы архитектура не становилась громоздкой
Исходя из всего вышеперечисленного было принято решения создать такие уровни:
- Физический
- Канальный
- Сетевой
- Транспортный
- Сеансовый
- Представления
- Прикладной

Давайте пошагово разберём «путешествие» данных по каждому уровню. Представьте себе, что вы хотите открыть страницу в браузере.
Когда вы вводите адрес сайта в адресную строку браузера или кликаете по закладке, начинается первый этап передачи данных. На прикладном уровне формируется HTTP-запрос. Это своего рода «письмо», которое содержит все необходимые инструкции: какую именно страницу загрузить, какие данные передать, какой браузер и операционная система его отправляют.
На основании этого запроса программное обеспечение прикладного уровня формирует сообщение стандартного формата. К этому сообщению прикрепляется специальный блок данных – заголовок.
Этот заголовок содержит служебную информацию, которая передаётся через сеть прикладному уровню машины-адресата. В случае работы с HTTP протоколом заголовок может выглядеть так:
GET /index.html HTTP/1.1 Host: www.future-step.ru User-Agent: Safari/537.36 Accept: text/html Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive
Грубо говоря, на прикладном уровне формируется сообщение для прикладного уровня получателя в стиле: «Привет! Дай, пожалуйста, HTML-файл с страницы по адресу www.future-step.ru, остальная информация тут в заголовке». Далее это сообщение попадает на следующий уровень – уровень представления.
Протокол уровня представления на основании информации, полученной из заголовка прикладного уровня, выполняет требуемые действия и добавляет к сообщению уже свой заголовок, в котором содержатся указания уже для уровня представления машины адресата.
На прикладном уровне могут выполняться следующие действия с данными:
- Кодирование или декодирование
- Шифрование или дешифрование
- Сжатие или распаковка
Так, например, в нашем HTTP заголовке была такая строка «Accept-Encoding: gzip, deflate». Она как раз и отвечает за сжатие данных. В таком случае, если сервер поддерживает сжатие, он сможет отправить ответ в сжатом виде.
Полученные от сервера сжатые данные будут распакованы на уровне представления перед передачей на прикладной. Если прикладной уровень определяет смысл запроса (у нас GET запрос на получение страницы), то уровень представления определяет форму данных: их кодировку, сжатие и шифрование.
После окончания работы протоколов уровня представления данные передаются на сеансовый уровень. Этот уровень отвечает за установление соединения между компьютерами, поддержание сеанса связи и синхронизацию обмена данными.
В контексте нашего запроса html-страницы роль сеансового уровня может быть менее очевидной, чем у других уровней, но она все так же важна.
При работе с HTTP запросом сеансовый уровень решает, когда начать и закончить обмен данными, управляет длительностью соединения в паре с транспортным уровнем.
Он может не добавлять собственных заголовков, но при этом контролировать, чтобы клиент и сервер «понимали» состояние сеанса. Чистые «сеансовые» заголовки встречаются редко, а вместо них используются механизмы прикладного уровня. Например, многим знакомые куки хоть технически и относятся к прикладному уровню (HTTP), но помогают отслеживать сеанс пользователя.
В современных интернет-протоколах сеансовый уровень часто «растворяется». Его функции берут на себя протоколы TLS (отвечает за безопасность) и TCP (отвечает за удержание соединения).
После работы сеансового уровня данные отправляются на транспортный уровень. Здесь наш HTTP-запрос разбивается на сегменты (если работаем с протоколом TCP) или датаграммы (если работаем с UDP).
Если на трёх предыдущих уровнях всю передаваемую информацию мы называли просто «данные», то начиная с транспортного каждый такой блок данных будет иметь своё название.
На этом уровне отрабатывает нужный протокол (TCP или UDP, в зависимости от требований) и данные с заголовком транспортного уровня передаются дальше на сетевой. Не беспокойтесь, подробную работу этого уровня мы рассмотрим чуть позже.
Итак, теперь наши данные попали на сетевой уровень, здесь они уже будут называться пакетами. Но сегменты не просто переименовываются в пакеты. Для формирования пакета каждый сегмент должен дополниться заголовком сетевого уровня.
И также здесь вводится одно очень важное понятие, с которым вы в том или ином роде уже сталкивались – IP-адресация.
Этот уровень отвечает за логическую адресацию и маршрутизацию между сетями. Основной протокол на этом уровне – это тот самый IP (Internet Protocol).
Опять же, работу этого уровня мы будем подробно разбирать немного позже. Сейчас же условимся, что суть этого уровня, можно сказать, в том, что он позволяет присвоить всем устройствам в глобальной сети некие идентификаторы – IP-адреса.
Работают они, как адреса в реальном мире. Представьте, что вы отправляете обычное, бумажное письмо вашему другу, который живет по адресу: г. Москва, ул. Пушкина, дом 5к. В таком случае у дома вашего друга есть уникальный идентификатор – его адрес.
Аналогично и с устройствами в сети – каждый имеет свой адрес, только выражается он в формате специальных чисел с точками, о сути которых расскажем чуть позже.
Итак, мы теперь понимаем, по какому адресу доставлять пакеты. Но теперь нужно как-то связать сетевые уровни на адресате и нашем устройстве. Для надёжной передачи данных между соседними устройствами в одной сети служит канальный уровень.
Здесь IP-пакет превращается в кадр (фрейм), к нему добавляются MAC-адреса и контрольная сумма, позволяющая определять целостность данных.
В целом, можно выделить 4 задачи канального уровня:
- Локальная адресация. С помощью MAC адресов отправитель понимает «физический» адрес получателя и направляет данные к нему
- Контроль ошибок. Проверяется целостность каждого фрейма. Если обнаруживается ошибка, то такой кадр отбрасывается
- Управление доступом к среде. Можно сказать, что каждое устройство «прослушивает» сеть, чтобы понять, свободен ли в данный момент канал передачи. Это необходимо для избавления от коллизии – ситуации, когда два или более устройства в сети одновременно пытаются передать данные по одному каналу, в результате чего сигналы накладываются друг на друга и искажаются (в современных сетях практически не встречается)
- Разбиение IP пакета на кадры, с учётом MTU (Maximum Transmission Unit) – максимального размера данных (в байтах), которые может передать в одном кадре
Итак, данные у нас распределены по фреймам, известен как приёмник, так и передатчик данных, осталось дело за малым – передать эти данные по какому-либо каналу. Передача данных происходит уже на физическом уровне.
Здесь уже нет никаких фреймов – они все превращаются в последовательности бит, которые, в свою очередь, преобразуются в электрические сигналы, свет или радиоволны.
На этом уровне определяется физический принцип передачи сигнала (среда передачи): по медным проводам, волоконно-оптическим линиям связи или по воздуху. А также выбирается метод кодирования, тактовая частота и происходит синхронизация и контроль ошибок.
Итак, мы с вами разобрали путь данных от прикладного до физического уровня и рассмотрели процесс преобразования данных на каждом уровне. Такой процесс, когда данные оборачиваются в дополнительную информацию (например, заголовки уровней), называется инкапсуляцией и продемонстрирован на изображении ниже. Обратный же процесс называется декапсуляцией.

Уровни модели OSI
Итак, мы уже понимаем, что происходит с данными на каждом уровне и как эти уровни взаимодействуют. Теперь давайте подробнее разберёмся, какие протоколы и устройства работают на разных уровнях, а также глубже погрузимся в IP-адресацию.
В этот раз мы пойдём с обратной стороны – снизу вверх и представим ситуацию, в которой мы не отправляем данные с компьютера, а наоборот – получаем их.
Физический уровень
На физическом уровне происходит обмен электрическими, оптическими или радиосигналами между устройствами. Сигналы кодируются единицами и нулями и передаются по проводам, волоконно-оптическим линиям или по воздуху.
Подробно разбирать, как это происходит, мы не будем, тема кодирования электрических сигналов уже затрагивалась в этой статье. Отметим лишь, что нули и единицы представляют собой лишь колебания напряжений в проводах, импульсов в оптоволокне и изменения амплитуды, частоты или фазы электромагнитной волны.
При разработке протокола, определяющего «общение» двух устройств по физическому каналу, всегда нужно убедиться в том, что когда одна сторона передаёт логическую единицу, то принимающая сторона также получает именно единицу, а не ноль.
Для этого устанавливается, какое напряжение должно использоваться для обозначения единицы, а какое для нуля (сейчас мы говорим про передачу электрических сигналов), сколько должен длиться один бит, может ли передача производиться в двух направлениях одновременно (дуплекс), как устанавливается связь и как она прекращается. Также, в случае работы с медными проводниками, устанавливается количество задействованных в передаче проводов и функция каждого из них.
Давайте разберём порядок принятия сигнала на физическом уровне. Сигнал поступает на приёмник через среду передачи (кабель или антенна). Примером такой среды может служить привычный всем кабель – витая пара.

Витая пара (Twisted Pair) – это тип сетевого кабеля, состоящий из двух или более изолированных медных проводников, скрученных попарно. Такая конструкция снижает электромагнитные помехи и перекрестные наводки, улучшая качество передачи сигнала.
Обычно в таком кабеле содержится 4 пары проводников, каждая из которых скручена вместе для минимизации электромагнитных наводок. Концы этого кабеля обжимаются специальным разъемом – RJ45, который и вставляется в ответный разъем приёмника.
Приёмником обычно служит сетевая карта компьютера или же любого другого устройства (телевизор, IP-камера и т.д.).
После принятия сигнала приёмником, сигнал декодируется в биты:
- Электрические импульсы преобразуются в нули и единицы
- Световые импульсы детектируются фотодиодом, превращаясь в электрические импульсы
- Радиоволны (сигнал Wi-Fi, например) демодулируются и, опять же, превращаются в электрические импульсы
На физическом уровне работают следующие протоколы:
- Ethernet – один из самых распространённых протоколов, именно с ним используется рассмотренная ранее витая пара, а также коаксиальный кабель и оптоволокно
- Wi-Fi – работает в рамках беспроводных сетей, обеспечивая передачу данных через радиоволны
- DSL – использует для передачи данных медные телефонные линии. С ним работают те самые модемы с интересными звуками и невозможностью использовать телефон, пока «сидишь» в интернете
- ISDN – использует цифровые каналы для передачи данных через телефонные линии
- Token Ring – устаревший протокол для обмена данными по медным проводникам
Мы же будем рассматривать работу только одного из них – Ethernet. Для декодирования принятых битов в Ethernet протоколе используется принцип манчестерского кодирования (код Манчестер-II), который обеспечивает надёжную и синхронизированную передачу данных.
То есть недостаточно просто принять какие-то электрические сигналы. Нужно иметь еще сигнал тактовых импульсов и установить принцип декодирования: единица соответствует высокому уровню сигнала или единица соответствует переходу с низкого на высокий уровень и т.д. Именно для этого и выбирается способ кодирования, которые описывает все аспекты декодирования колебаний напряжения в последовательность бит и наоборот.
На физическом уровне также работают такие сетевые устройства, как концентраторы (хабы) и повторители. Они никоим образом не обрабатывают сигнал, а лишь передают его дальше, в случае с повторителем еще и усиленный.
Канальный уровень
Итак, с помощью оборудования и протоколов, работающих на физическом уровне, мы можем связать с собой два устройства. Они будут замечательно друг с другом общаться, данные передаваться, и все будет здорово. Это мы сейчас говорим не только про привычные всем сети, но и любые другие протоколы.
Так, например, связь между двумя микроконтроллерами по протоколу UART, SPI, RS232 или Zigbee также будет работать на физическом уровне.
Но при построении полноценной сети с несколькими узлами (устройствами в ней) уже возникают проблемы адресации и проверки целостности данных. Именно решение этих проблем и реализуется на канальном уровне модели OSI.
В целом, сам по себе канальный уровень делится на два подуровня: один нужен для взаимодействия с верхним (сетевым), а второй – с нижним (физическим) уровнем.
Для взаимодействия с сетевым уровнем используется подуровень Logical Link Control (LLC). В его функции входят:
- Идентификация протоколов передачи данных (IPv4, IPv6 и т.д.)
- Мультиплексирование и демультиплексирование, то есть LLC позволяет нескольким протоколам работать через одно физическое соединение
- Управление потоком данных для избежания перегрузки сети
- Контроль ошибок
- Обеспечение логической связи
Но нам же здесь более интересен второй подуровень – Media Access Control или MAC. Именно на этом подуровне происходит физическая адресация в сети, формирование и обработка фреймов и управление доступом к сети.
Вспомним, что на канальном уровне полученные с физического уровня данные разделяются на фреймы, размер которых колеблется от нескольких сот до нескольких тысяч байт. Каждый фрейм помимо полезной нагрузки содержит в себе служебную информацию, такую как MAC-адрес отправителя, MAC-адрес получателя, тип протокола и контрольную сумму для проверки ошибок.
Нам же здесь важнее всего разобраться с MAC-адресами.

MAC-адрес — это уникальный физический адрес, который имеется у каждого устройства в сети и присваивается производителем. Состоит он из комбинации цифр и букв: это 6 байтовое двоичное число или 12-значное шестнадцатеричное число, например, такое: 3C-5A-B4-25-FB-1E.
Первые шесть цифр (три октета) обозначают производителя сетевой карты и называются OUI (Organizational Unique Identifier). Оставшиеся 6 цифр уникальны для каждого устройства и обозначают определённую сетевую плату или же NIC (Network Interface Controller), установленную в устройство.

Узнать MAC-адрес устройства можно через веб-интерфейс вашего маршрутизатора или же можно прописать в командной строке Windows команду ipconfig /all и в строке «Физический адрес» как раз и будет прописан MAC-адрес вашего компьютера (точнее, используемой сетевой карты).

Таким образом, можно абстрактно представить, что на канальном уровне все наши данные кладутся в конверт, на котором указывается адрес отправителя и получателя. Только вместо названия города, улицы и номера дома указывается уникальный идентификатор устройства из 12 символов.
Для отправки такого «конверта» нужно устройство, которое сможет прочитать адрес получателя и отправить ему данные. Это уже не простые устройства, которые просто передают сигнал дальше, как тот же хаб. Здесь требуется помнить MAC-адреса всех устройств в сети (для этого служит таблица коммутации) и избегать коллизии — возможного столкновения двух и более сигналов в одной среде передачи.
Так что на канальном уровне работает такое сетевое устройство, как коммутатор («switch»). Он может анализировать заголовок фрейма с адресами получателя и отправителя и строить на основании этих данных свою таблицу коммутации. Также все поступившие в коммутатор фреймы хранятся во внутреннем буфере и отправляются адресату, когда необходимый порт будет свободен.
Фото коммутатора (Cisco Catalyst 2960) представлено ниже:

С адресацией мы разобрались, но не стоит забывать, что еще одной важной задачей этого уровня является проверка корректности и целостности полученных данных. При передаче данных с сетевого уровня на физический, канальный уровень добавляет во фрейм специальную последовательность битов в начало и конец каждого фрейма, а также вычисляет контрольную сумму.
При получении данных с физического уровня контрольная сумма вычисляется и сравнивается с той, что записана в каждом фрейме. Если они совпадают, то фрейм считается правильным и принимается. Если же контрольные суммы различаются, то фиксируется ошибка.
Канальный уровень может не только фиксировать ошибки в передаче данных, но и исправлять их. Это происходит зачёт повторной передачи поврежденных фреймов. Правда, эта функция не является обязательной для канального уровня и может отсутствовать в некоторых протоколах.
Сетевой уровень
Следующий уровень, который мы рассмотрим в модели OSI, — это сетевой уровень. Его основной задачей является образование единой транспортной системы, объединяющей несколько сетей, причем эти сети могут использовать совершенно разные принципы передачи сообщений между конечными узлами и обладать произвольной топологией.
Функций у сетевого уровня довольно много:
- Логическая адресация (или же IP-адресация)
- Маршрутизация
- Разбиение пакетов на фрагменты
- Обнаружение и предотвращение перегрузки сети
- Обнаружение и обработка ошибок
Сам по себе термин «сеть» на этом уровне наделяется специфичным значением. Здесь под сетью понимается совокупность устройств (компьютеры, телефоны, умные устройства и т.д.), соединённых между собой в соответствии с одной из стандартных топологий и использующих один из протоколов, определённый именно для данной топологии.
Связь внутри устройств сети осуществляется на канальном уровне с помощью MAC-адресов. А связь между разными сетями или между устройствами из разных сетей уже регулируется на сетевом уровне, и работает она за счёт IP-адресации.
Каждое устройство в сети имеет свой уникальный IP-адрес. Здесь не стоит путать понятия MAC-адрес и IP-адрес. Первый прикреплён именно к вашему оборудованию, то есть ваша сетевая карта всегда будет иметь заданный MAC-адрес (если его не поменять самостоятельно). А вот IP-адрес выдаётся каждому пользователю сети программно и может изменяться.
Так, например, IP-адрес вашего устройства может измениться, когда оканчивается его срок аренды у вашего провайдера. Такое происходит при работе в сетях с динамическим присваиванием IP-адресов через протокол DHCP. Также адрес может поменяться при повторном подключении к сети, смене провайдера или долгом отключении от сети.
IP-адрес, как и MAC-адрес на канальном уровне, добавляется в заголовки пакетов.

Само по себе название «IP-адрес» происходит от названия протокола, который работает на сетевом уровне. Он же, по совместительству, самый распространённый – Internet Protocol (IP) или же протокол межсетевого взаимодействия.
На данный момент существует две версии этого протокола: IPv4 и IPv6. Мы же в этой статье больше внимания уделим именно версии 4. Давайте рассмотрим, как формируется IP-адрес в этой версии протокола.
Записываются IP-адреса в виде четырёх десятичных чисел, которые соответствуют отдельным байтам и разделяются точками. Каждое число может быть в диапазоне от 0 до 255, соответственно, обозначают 1 байт информации (28).
Весь IP-адрес является 32-х битным и состоит из двух основных логических частей: номер сети и номер хоста. Первая часть указывает на саму сеть и является общей для всех устройств в данной сети, вторая же часть указывает на конкретное устройство в этой сети.
Разделение между этими частями зависит от маски подсети. Маска подсети – это двоичное число, используемое в компьютерных сетях для разделения IP-адреса на две части: адрес сети и адрес узла (хоста).
Обычно маска записывается в десятичном в формате, как и IP-адрес, через десятичные точки между числами. Но также применяется запись маски в CIDR нотации (слеш-формате), где число после слеша обозначает количество единиц в двоичной записи маски.
Предположим, что маска в нашей сети будет такая: 255.255.255.0 (в CIDR нотации будет «/24»). Тогда в IP-адресе 192.168.1.3 номером сети будет 192.168.1.0, а номер хоста – 3. То есть первые 3 октета будут определять сеть, а последние – хост.

Более очевидна будет запись маски подсети в двоичном формате. Тогда, используя побитовую конъюнкцию, мы запросто сможем определить, какая часть IP-адреса относится к номеру сети, а какая — к номеру хоста.
Давайте применим к нашему адресу 192.168.1.3 маску подсети 255.255.255.0 и выполним побитовую конъюнкцию:
11000000 10101000 00000001 00000011
И
11111111 11111111 11111111 00000000
=
11000000 10101000 00000001 00000000
Получим значение номера сети 11000000 10101000 00000001 00000000 или 192.168.1.0 в десятичной системе.
Для получения номера хоста нужно сначала применить инверсию к маске подсети, а затем побитовую конъюнкцию. В таком случае получим 0.0.0.3, что и будет номером хоста. Всего адресов в сети с такой маской может быть 256 (от 0 до 255).
Однако рабочих адресов будет доступно только 254! Насчет первого понятно — адрес 192.168.1.0 является IP-адресом сети, так что первый хост может иметь только адрес 192.168.1.1. Но что с адресом 192.168.1.255?
Адрес 192.168.1.255 в данной сети будет являться широковещательным. Широковещательный адрес используется для отправки сообщений всем устройствам в данной сети.
Формируется широковещательный адрес следующим образом: к адресу сети и инвертированной маске подсети применяется побитовая дизъюнкция. Давайте вычислим широковещательный адрес в нашей сети:
11000000 10101000 00000001 00000000
ИЛИ
00000000 00000000 00000000 11111111
=
11000000 10101000 00000001 11111111
То есть широковещательным адресом в нашей сети будет 192.168.1.255. Грубо говоря, по этому адресу наше «корневое устройство» может отправить сообщение всем хостам.
Ну и, естественно, «корневое устройство» – это совсем неподходящий термин. В действительности связь между сетями (в небольших сетях и между хостами также) осуществляется с помощью маршрутизатора.
Маршрутизатор — это устройство, которое собирает информацию о топологии межсетевых соединений и на её основании пересылает пакеты сетевого уровня в сеть назначения. Также вы могли слышать и иное название маршрутизатора — роутер (от английского «router»).
Обычно он есть в каждом доме и представляет из себя небольшое устройство, в которое входит Ethernet кабель (WAN) и либо из него выходят такие же кабели, которые подключаются к устройствам в локальной сети (LAN), либо маршрутизатор может передавать сигнал по беспроводному каналу (Wi-Fi).
На изображении ниже представлен пример маршрутизатора (Keenetic Giga KN-1010).

Чтобы разобраться, в чем суть работы маршрутизатора, давайте представим, что у нас есть сеть следующей топологии: четыре ученических компьютера объединены с помощью коммутатора К1 в локальную сеть (назовём её «Ученики»). По соседству расположена вторая такая же сеть из четырех компьютеров, которые объединены с помощью коммутатора К2 (назовём эту сеть «Преподаватели»).

Устройства внутри локальных сетей могут обмениваться информацией только внутри своей сети. Чтобы связать сеть «Ученики» с сетью «Преподаватели», а также обеспечить обеим доступ к интернету, необходимо подключить обе эти сети к маршрутизатору M1.
Сам маршрутизатор мы уже подключаем к общему интернету через оборудование нашего провайдера. При таком подключении хосты из обеих сетей смогут общаться как между собой, так и обращаться к другим устройствам в интернете за счет работы маршрутизатора.
Одной из главных задач сетевого уровня является маршрутизация — поиск наилучшего маршрута для передачи данных. Кратчайший путь не всегда является самым лучшим. Часто критерием при выборе маршрута является время передачи данных по этому маршруту.
Время передачи данных зависит от пропускной способности канала и интенсивности трафика на нём. Так, например, если на самом коротком маршруте слишком интенсивный трафик, то гораздо выгоднее будет выбрать более длинный маршрут, но с меньшей загруженностью.
Из протоколов, работающих на сетевом уровне, отметим следующие:
- IP (Internet Protocol) – основной протокол сетевого уровня, определяет маршрутизацию и логическую адресацию.
- ICMP (Internet Control Message Protocol) – передает сообщения об ошибках (ping, traceroute).
- ARP (Address Resolution Protocol) – преобразует IP-адреса в MAC-адреса.
- RIP, OSPF, BGP – маршрутизирующие протоколы, помогающие маршрутизаторам находить лучшие пути передачи данных.
Транспортный уровень
На транспортном уровне работают два протокола:
- TCP, который обеспечивает надежную передачу данных между устройствами в сети и используется с протоколами HTTP, HTTPS, SNTP и т.д.
- UDP – упрощенный и более быстрый транспортный протокол, который не гарантирует доставку данных и не использует подтверждения
Казалось бы, зачем вообще нужен UDP, если он не гарантирует доставку данных, это же не надёжно?
Дело в том, что оба протокола хороши при правильном использовании. Например, вспомните те самые моменты, когда вы общаетесь на видеозвонке в Zoom, уже «мёртвом» Skype или любых подобных сервисах.
Что вам важнее: четко видеть собеседника и не терять ни единого кадра, но с большой задержкой или общаться в реальном времени, пусть и с некоторым пропуском кадров?
Протокол UDP не устанавливает соединение перед отправкой данных – он просто отправляет данные и не ждет подтверждения о получении. Если какая-то часть из них потеряется в пути, протокол не будет предпринимать попыток их повторной передачи.
Благодаря такому подходу UDP работает намного быстрее, чем TCP. Он не проверяет, в каком порядке пришли данные и дошли ли они вообще – его задача просто доставить данные максимально быстро. Это делает его идеальным для случаев, когда небольшие потери информации не критичны, но важна скорость.
UDP широко используется в онлайн-играх, потоковом видео и аудио-, видеозвонках, а также в DNS-запросах. В этих сценариях небольшие задержки или потеря отдельных пакетов не столь важны, как низкое время отклика.
В отличие от UDP, протокол TCP бережнее относится к передаваемым данным. Он гарантирует, что данные дойдут до получателя в точности и именно в том порядке, в котором они были отправлены.
Для этого перед началом передачи устанавливается соединение между отправителем и получателем – этот процесс называется трехфазным рукопожатием (three-way handshake). Сначала клиент отправляет серверу запрос на соединение, сервер подтверждает его, а затем клиент окончательно подтверждает связь. Только после этого начинается передача данных.
Во время передачи TCP отслеживает, чтобы каждый отправленный блок данных был доставлен. Если он потеряется или окажется поврежденным, протокол запросит его повторную отправку.
TCP также управляет потоком данных, чтобы сеть не была перегружена. Он адаптируется к скорости передачи и при необходимости замедляет отправку, если соединение становится нестабильным.
Такой подход делает TCP незаменимым в ситуациях, где важно, чтобы данные доходили в точности, например, при загрузке веб-страниц, передаче файлов или отправке электронных писем.
Сеансовый уровень
Как мы уже отмечали ранее, суть сеансового уровня отражена в его названии – он отвечает за поддержание сеанса связи между приложениями на разных устройствах.
Передача данных в сети начинается с установки соединения между двумя устройствами. Сеансовый уровень для начала проверит, имеет ли клиент право подключиться, то есть проведёт аутентификацию.
После прохождения аутентификации происходит согласование параметров: определяется используемая кодировка и тайм-ауты. Затем идёт определение режима работы.
Режим работы может быть либо полудуплекс, либо дуплекс. При использовании полудуплекса происходит поочерёдный обмен данными: сначала «вещает» первое устройство, после чего предоставляется возможность отправки данных для второго устройств. В случае дуплексной связи приём и передача данных происходит одновременно в обе стороны.
Примером установки соединения может служить ситуация, когда вы подключаетесь к удалённому FTP-серверу для скачивания какого-либо файла. В таком случае сеансовый уровень проверяет, есть ли у вас права для скачивания этого файла.
После установления соединения сеансовый уровень управляет обменом данными. Он отслеживает, какие пакеты переданы, корректирует порядок доставки и может повторно отправить данные в случае сбоя.
Как происходит управление обменом данными? Во-первых, сеансовый уровень создаёт контрольные точки, которые разделяют поток данных на части. Это работает буквально как сохранения в играх: если в какой-то момент передачи соединение прервётся, то по восстановлению соединения передача продолжится с последней контрольной точки.
После того как передача данных завершается, задача сеансового уровня состоит в том, чтобы закрыть соединения и освободить ресурсы системы. Это предотвращает зависание соединений и улучшает работу сети.
Завершение соединения может быть контролируемым, когда устройства договариваются о разрыве соединения. Но также неактивная сессия может быть закрыта при превышении времени ожидания, то есть, когда устройство долго не отвечает на запросы.
Основные протоколы, работающие на сеансовом уровне такие:
- RPC (Remote Procedure Call) – позволяет выполнять команды на удалённом устройстве. Используется в распределённых системах
- SMPP (Short Message Peer-to-Peer) – протокол для отправки SMS-сообщений между серверами и мобильными операторами
- NetBIOS – позволяет компьютерам в локальной сети взаимодействовать друг с другом
- PPTP (Point-to-Point Tunneling Protocol) – используется для создания VPN-соединений
- 323 – протокол для передачи голоса и видео в IP-сетях (VoIP)
- SOCKS – протокол прокси-сервера для пересылки трафика через удалённые серверы
Уровень представления
Уровень представления служит для изменения формы представления передаваемой по сети информации, не изменяя её содержания. За счёт работы этого уровня информация, передаваемая прикладным уровнем одного устройства, будет понятна прикладному уровню другого устройства.
Основные функции уровня представления мы уже рассматривали. Это:
- Кодирование и преобразование форматов. Например, изменение формата изображения, конвертация текста (из ASCII в UTF-8), выравнивание структуры данных (если отправитель использует 32-битный порядок байтов, а получатель – 16-битный, уровень адаптирует данные)
- Шифрование и дешифрование данных. При наличии требований к защите данных от несанкционированного доступа на этом уровне применяется шифрование данных у отправителя и расшифровка их у получателя.
- Сжатие и распаковка данных. Для оптимизации передачи данных они могут быть сжаты перед отправкой. Например, при просмотре видео на вашем любимом хостинге, оно передаётся в сжатом формате, что ускоряет загрузку и экономит трафик.
Протоколы, работающие на уровне представления, представлены ниже:
- SSL/TLS – отвечает за шифрование данных для HTTPS, VPN и безопасных соединений
- JPEG, WEBP, MPEG, AAC – отвечают за кодирование медиа (изображений, видео и аудио)
- ASCII, Unicode, UTF-8 – отвечают за кодирование текста
- GZIP, ZIP – служат для сжатия файлов
Прикладной уровень
Прикладной уровень – это тот уровень, протоколы которого взаимодействуют непосредственно с пользователем. В действительности этот уровень представляет собой просто набор различных протоколов, с помощью которых пользователи получают доступ к сетевым сервисам, таким как веб-браузеры, электронная почта, файловые передачи и видеозвонки.
Ранее мы рассмотрели одну из функций прикладного уровня – обеспечение доступа к сети. Этот уровень определяет, как пользователи и приложения могут отправлять и получать данные. Здесь происходит загрузка данных из интернета, отправка и получение электронной почты, передача файлов и обмен сообщениями между сервисами.
Но также прикладной уровень отвечает и за управление сетевыми соединениями. Но не стоит путать это с работой сеансового уровня. На прикладном уровне управление соединениями происходит на более высоком уровне абстракции.
Например, когда вы заходите в личный кабинет на сайте, прикладной уровень использует стандарт OAuth. За счет работы этого стандарта вам не нужно регистрироваться на очередном сайте придумывая логин и пароль, достаточно будет просто указать аккаунт на каком-либо другом сервисе: Google, VK, Yandex и т.д.
Еще на прикладном уровне происходит формирование и обработка данных. То есть он определяет, как именно должны быть организованы данные перед отправкой в сеть. Для этого может применяться обмен структурированными данными (JSON, XML), работа с базой данных (SQL, NoSQL) или передача потокового видео/аудио (HLS, RTSP).
Так, например, при просмотре прямых трансляций или потокового видео по запросу (VOD) как раз используется стандарт HLS.
Ниже перечислены протоколы, работающие на прикладном уровне:
- HTTP, HTTPS – предназначены для открытия веб-страниц и передачи данных
- FTP, SMB – служат для передачи файлов между устройствами
- SMTP, IMAP, POP3 – реализуют отправку и получение электронной почты
- DNS – преобразуют домены в IP-адреса
- SSH, Telnet, RDP – позволяют получить удалённый доступ к серверам и компьютерам
- SIP, RTP, WebRTC – служат для организации видеозвонков, VoIP и потоковой передачи
- MQTT, WebSocket – предназначены для обмена сообщениями в реальном времени
- OAuth, Kerberos, OpenID – служат для аутентификации и управления доступом.