Всем привет! Это снова Наташа, проектировщик интерфейсов из Selectel, которая вечно лезет в технические темы. Моя дизайнерская карьера из раза в раз челленджит меня технически сложными продуктами и вынуждает разбираться, что стоит за красивыми пикселями на экране, — в общем, как работает интернет. Но как только я открываю статьи о сетях для самых маленьких, то сталкиваюсь с тезисами типа «Очевидно, вы уже знакомы с моделью OSI и основами TCP/IP...».

Очевидно? Я дизайнер, и сети для меня существуют только социальные. Я ни разу не дочитала такую статью, потому что уходила копать про «очевидную» матчасть в других источниках. Очевидно, вы слышали о Minecraft и котиках. Вот на них-то я и буду по-дизайнерски разбирать, как работают сети. Начнем с пушистых.

Рис. 1. Одна из первых фотографий в истории человечества. Источник.
Рис. 1. Одна из первых фотографий в истории человечества. Источник.

Зачем дизайнеру разбираться в сетях? Я работаю юиксером уже шесть лет и всегда попадаю в продукты со своими техническими ограничениями и возможностями. Чтобы разговаривать с командой на одном языке и не предлагать заведомо нереализуемые решения, я постоянно погружаюсь в «техничку». Помимо общего интереса к тому, как все устроено, я получаю и дополнительные бенефиты в развитии своих T-shaped навыков. Как минимум —- более устойчивую позицию на рынке труда, которую не пошатнут вайбы AI :)

Простейший способ обмена данными

Представим, что мы в 90-х и дома есть два компьютера. Пока что они сами по себе, без выхода в интернет, и просто хранят забавные картинки с котиками.

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

  • сетевая карта в каждом из компьютеров,

  • кабель.

Рис. 2. Передача котиков локально по Ethernet-кабелю.
Рис. 2. Передача котиков локально по Ethernet-кабелю.

Сетевая карта — это специальный девайс для передачи информации между устройствами. Любое устройство, которое имеет возможность отдавать и получать данные по сети, имеет этот компонент в том или ином виде. В современных девайсах они уже не занимают много места и реализованы чипами, встроенными в материнскую плату, но суть остается та же: есть некий компонент, который отвечает за идентификацию устройства в локальной сети и имеет свой уникальный номер. Этот номер называется MAC-адресом.

Ниже примеры сетевых карт и чипов.

Рис. 3. Серверная сетевая карта. Источник.
Рис. 3. Серверная сетевая карта. Источник.
Рис. 4. Десктопная сетевая карта (в современных компьютерах не используется). Источник.
Рис. 4. Десктопная сетевая карта (в современных компьютерах не используется). Источник.
Рис. 5. Сетевая карта для ноутбука. Источник.
Рис. 5. Сетевая карта для ноутбука. Источник.

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

Рис. 6. Кабель Ethernet. Источник.
Рис. 6. Кабель Ethernet. Источник.

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

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

  • OSI — эталонная теоретическая модель,

  • TCP/IP — более лаконичная модель, объединившая некоторые уровни OSI и используемая в современных компьютерных сетях.

В примерах в этой статье я буду ссылаться на TCP/IP-модель.

Итак, физический сигнал улетает с одной сетевой карты на другую по физическому кабелю. Таким образом происходит передача данных на канальном уровне по модели TCP/IP.

Арендуйте GPU за 1 рубль!

Выберите нужную конфигурацию в панели управления Selectel. *

Подробнее →

Обмен данными без проводов

Технологии не стоят на месте и позволяют нам делать модные фоточки рабочих мест, где стерильный макбук лежит на стерильном столе без проводов и пыли. То есть, физически данные могут попадать на устройство и без провода, и не так уж нужен этот кабель Ethernet. Все так, некоторые устройства умеют передавать данные без проводов: по Wi-Fi или Bluetooth.

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

Рис. 7. Передача котиков без кабеля.
Рис. 7. Передача котиков без кабеля.

Домашний сервер

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

Представим, что есть два дружочка-пирожочка Тукс и Тирекс с соответствующими игровыми никнеймами tux и trex. И они хотят поиграть вместе с разных компьютеров.

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

Дома редко используются коммутаторы. Как правило, дома устанавливают роутер, который выполняет все функции маршрутизации в локальной и внешней сети. 

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

На бытовом уровне роутер отличается от коммутатора возможностью маршрутизации в интернете, тогда как коммутатор работает только внутри закрытой локальной сети. Технически это связано с тем, что роутер умеет «вычислять по IP», а коммутатор может узнавать устройства только по MAC-адресу. Современные роутеры умеют и то, и другое, поэтому в домашних сетях редко встречаются коммутаторы. В дата-центрах же они — важнейшие участники сетевой активности.

Рис. 8. Домашняя локальная сеть.
Рис. 8. Домашняя локальная сеть.

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

Рассмотрим роли сервера и клиентских машин на примере локального коопа в Minecraft.

Чтобы Тукс и Тирекс могли вместе строить дом с двух разных компьютеров, им нужно:

  • два компьютера, на которых будут установлены сами игры, или, если по-взрослому, клиентская часть Minecraft.

  • Minecraft-сервер — компьютер со специальной программой, которая будет принимать данные с клиентских приложений, обрабатывать их и отдавать ответы обратно, организуя таким образом весь геймплей. 

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

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

Итак, мы уже знаем, что в каждом устройстве есть некий физический компонент типа сетевой карты или Wi-Fi модуля, который позволяет нашим трем машинам видеть и узнавать друг друга в локальной сети. Когда Тирекс подойдет к криперу на небезопасное расстояние, сервер об этом узнает, обработает это событие и вернет новые данные о локации нашим игрокам. 

Рис.9. Trex подошел к криперу.
Рис.9. Trex подошел к криперу.

Но как событие «сагрил крипера» превратится в физический сигнал, транслируемый по Wi-Fi? Давайте рассмотрим, что происходит внутри игрового компьютера Тирекса при попытке подойти к криперу.

Как лишний мув превращается в битовый сигнал  

Передача данных по сети включает в себя несколько уровней, на которых работают разные протоколы передачи данных. Это те самые уровни TCP/IP, которые визуализируют сетевой стек. На мой вкус, слово «уровень» сбивает с толку новичка, потому что подразумевает что-то поверх чего-то. Я предлагаю воспринимать уровни как последовательный путь из нескольких дорог и тропинок, по которым нужно пройти с помощью разного транспорта и в разной одежде, а иногда под зонтом — так я метафорически описывала протоколы чуть выше. 

Напоминаю, примеры описаны по модели TCP/IP, а не OSI. Из-за разного количества уровней в моделях аналогичные уровни называются и нумеруются по-разному. Если интересно соответствие этих моделей, рекомендую статью в Академии Selectel.

Прикладной уровень

Информация о том, что Тирекс нарушил личные границы крипера, начинает свой путь внутри игрового компьютера. Клиентское приложение Minecraft обрабатывает координаты персонажа и превращает их в запрос — с теми сопутствующими данными и форматом, в котором его ожидает принять Minecraft-сервер. Превращение игрового события в запрос происходит внутри клиентского приложения Minecraft с использованием внутреннего протокола. Разные клиентские приложения нуждаются в разных протоколах. Например, браузеру нужен HTTPS, а почтовому клиенту — SMTP. Но вернемся к нашему примеру.

Рис.10. Прикладной уровень.
Рис.10. Прикладной уровень.

Транспортный уровень

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

Рис.11. Транспортный уровень.
Рис.11. Транспортный уровень.

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

Это была сетевая шутка на тему протоколов TCP и UDP. Их основное отличие в том, что в первом случае данные доставляются несколько медленнее, но на 100% целостно, в правильном порядке и с гарантией доставки, а во втором случае — возможна потеря кадров или нарушение их порядка. Это не так критично для пользователя в случае, например, видеоконтента, зато позволяет оптимизировать трафик. На самом деле, Minecraft использует оба протокола, и тут я не буду вдаваться в детали, чтобы никого не дезориентировать.

В общем, пока данные упаковываются в пакет и готовятся в сетевое путешествие, мы имеем дело с транспортным уровнем. 

На этом уровне мы знакомимся с TCP и UDP-протоколами, которые являются основой современной сети Интернет. Эти транспортные протоколы реализуют установку соединения между сторонами обмена данными, а при необходимости проверяют порядок и факт доставки информации.

Сетевой уровень

Когда операционная система обращается к сетевой карте для передачи пакетов «получателю», пакеты оказывается на сетевом уровне. Здесь они оборачиваются во фреймы и готовятся стать битовым сигналом, который улетит на коммутатор.

Рис.12. Сетевой уровень.
Рис.12. Сетевой уровень.

Канальный уровень

Вот мы и вернулись снова к  физическому обмену данными — как с передачей котиков, помните? Только теперь обмен происходит между коммутатором и сетевой картой (или Wi-Fi модулем) сервера.

Чтобы выяснить, куда отправлять информацию, коммутатору нужен MAC-адрес устройства. Это уникальный идентификатор, который присваивается сетевому устройству производителем.

Рис. 13 Канальный уровень.
Рис. 13 Канальный уровень.

TCP/IP-стек в сборе

Вот какие преобразования испытал мув Тирекса к криперу:

  1. клиентская часть Minecraft преобразовала мув в запрос — уровень приложения,

  2. ОС получила файл и разбила его на фрагменты — транспортный уровень,

  3. ОС упаковала фрагменты по пакетам — сетевой уровень,

  4. пакеты поместились во фреймы (кадры) и попали на сетевую карту — сетевой уровень,

  5. сетевая карта передала эти фреймы в виде битов на коммутатор — канальный уровень.

Рис. 14. TCP/IP в сборе.
Рис. 14. TCP/IP в сборе.

В нашем простом случае внутри домашней локальной сети пакет попадает с коммутатора сразу на Minecraft-сервер и испытывает обратные преобразования:

  1. биты попадают на сетевую карту и собираются в фреймы — канальный уровень;

  2. сетевая карта разбирает фрейм и достает пакет — сетевой уровень,

  3. сетевая карта передает пакет в ОС — сетевой уровень; 

  4. ОС распаковывает пакет, собирает файл по фрагментам и выясняет, для какого приложения он предназначен — транспортный уровень;

  5. приложение получает и обрабатывает поступивший запрос — прикладной уровень.

Рис. 15. Обратные преобразования на сервере.
Рис. 15. Обратные преобразования на сервере.

И это только половина сетевых активностей, которые вызывает Тирекс провокацией крипера. По такому же пути Minecraft-сервер отправит эту информацию на игровой компьютер Тукса. И все это за доли секунд! 

Эра интернета

Теперь у Тирекса и Тукса дома есть свои компьютеры и интернет — ребята могут играть в Minecraft не выходя из дома, тем более в Selectel для этого есть отличный сервер.

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

Разберемся, как организован выход в интернет и соберем полную картинку.

Итак, теперь, когда появился интернет, стали доступны дополнительные сортировочные станции после попадания пакета на роутер (коммутатора нам теперь недостаточно) по Wi-Fi или по кабелю Ethernet. 

Рис.16. Роутер и интернет — дополнительные звенья цепи.
Рис.16. Роутер и интернет — дополнительные звенья цепи.

Если в случае локальной сети без выхода в интернет пакет с коммутатора передавался сразу на домашний сервер, теперь появляются дополнительные звенья цепи: роутеры и интернет-провайдеры.

В случае локальных сетей за адресацию отвечал коммутатор — он вычислял устройства по MAC-адресу. Теперь, когда мы имеем дело с межсетевым обменом, MAC-адресов недостаточно: откуда Тирексу знать, что проставил производитель на сервере в дата-центре? Поэтому в игру вступают IP-адреса — те самые, по которым меня можно вычислить и навалять за упущение деталей ?

Источник.

Сами по себе IP-адреса выглядят как четыре числа от 0 до 255, разделенные точками. Например, так: 192.168.1.1. Конечно, этим было бы неудобно пользоваться, поэтому у публичных сетевых устройств есть красивые доменные имена типа secret.server.ru. Но за ним скрывается числовой айпишник, а данные о соответствиях доменных имен IP-адресам содержатся на специальных DNS-серверах.

Итак, домашний роутер обращается к интернет-провайдеру и сообщает, что у него есть пакет для адреса сервера. Допустим, secret.server.ru. Провайдер проверяет этот адрес, и если он находится в его сети (что маловероятно), пакет сразу попадает на роутер дата-центра, а с него через коммутатор — на Minecraft-сервер. 

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

Рис. 17. Дополнительные звенья: интернет-провайдеры.
Рис. 17. Дополнительные звенья: интернет-провайдеры.

P.S.

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

VPN — виртуальная частная сеть

Если Тирекс и Тукс хотят играть через интернет, но так, чтобы никто больше не мог видеть их собственный Minecraft-сервер в сети, они могут организовать свой личный «туннель» до него. Это происходит в основном на сетевом или канальном уровне — в зависимости от протокола, по которому работает VPN.

DNS — система доменных имен

У каждого устройства в сети есть свой IP-адрес, по которому к нему можно обратиться. Допустим, Тирекс развернул свой публичный Minecraft-сервер. Если он хочет, чтобы его сервер красиво назывался trex.minecraft.ru, ему следует зарегистрировать это доменное имя и привязать его к IP-адресу своего сервера на специальном DNS-сервере.

HTTP(S) — протокол передачи гипертекста

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

Наличие буквы s в конце означает, что соединение зашифровано и передаваемые данные в случае перехвата не будут прочитаны третьими лицами. 

WebSocket — протокол непрерывного соединения

Это тоже протокол прикладного уровня, с которым работают в том числе и браузеры, но по модели соединения, отличной от HTTP. 

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

SSH — безопасная оболочка

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

Допустим, Тирекс развернул свой Minecraft-сервер и тот стал настолько популярным, что лучше его содержать в дата-центре. Чтобы периодически обслуживать этот сервер, проводить аудит логов, устанавливать обновления, Тирекс может удаленно подключиться к этому серверу по SSH-протоколу. 

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

Комментарии (1)


  1. 0o0
    16.07.2025 10:00

    "Вот что для этого потребуется:

    • сетевая карта в каждом из компьютеров,"

    не потребуется

    потребуется провод COM-COM и нортон коммандер