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

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

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



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

Протокол обмена данными — это свод правил для формата их передачи, который ожидают «увидеть» конкретные устройства или программы, участвующие в обмене. То есть, если сам канал передачи данных воспринимать как некий путь, то протоколы — это правила передвижения по этому пути: дресскод, зонтик, транспорт, ПДД.
На разных уровнях передачи данных работают разные протоколы. Существуют разные модели сетевого стека, описывающие эти уровни. Компьютерные, мобильные и GPS-сети имеют разные модели. В разрезе компьютерных сетей рассматривают следующие:
OSI — эталонная теоретическая модель,
TCP/IP — более лаконичная модель, объединившая некоторые уровни OSI и используемая в современных компьютерных сетях.
В примерах в этой статье я буду ссылаться на TCP/IP-модель.
Итак, физический сигнал улетает с одной сетевой карты на другую по физическому кабелю. Таким образом происходит передача данных на канальном уровне по модели TCP/IP.
Обмен данными без проводов
Технологии не стоят на месте и позволяют нам делать модные фоточки рабочих мест, где стерильный макбук лежит на стерильном столе без проводов и пыли. То есть, физически данные могут попадать на устройство и без провода, и не так уж нужен этот кабель Ethernet. Все так, некоторые устройства умеют передавать данные без проводов: по Wi-Fi или Bluetooth.
Возвращаясь в передаче веселых картинок с одного домашнего компа на другой, мы действительно можем настроить канал связи между устройствами без кабеля. Например, подключить Wi-Fi модуль по USB. При этом передача радиосигнала все еще будет представлять собой канальный уровень передачи данных.

Домашний сервер
Что если дома уже не два компьютера, а три, и хотелось бы иметь общую библиотеку котиков, а не передавать их в один конец? И вообще хочется поиграть в Minecraft с другом, который пришел в гости, а интернета и облака по-прежнему нет.
Представим, что есть два дружочка-пирожочка Тукс и Тирекс с соответствующими игровыми никнеймами tux и trex. И они хотят поиграть вместе с разных компьютеров.
В таком случае нужна локальная сеть и устройство, которое будет «регулировщиком» передачи данных. Им будет коммутатор: он принимает сигналы с разных устройств и определяет, куда дальше передать информацию.
Дома редко используются коммутаторы. Как правило, дома устанавливают роутер, который выполняет все функции маршрутизации в локальной и внешней сети.
Обычно для обозначения этих устройств используют термины «маршрутизатор/роутер» и «коммутатором/свитч». Я буду называть их, соответственно, роутером и коммутатором, чтобы придать словам больше визуальной разницы.
На бытовом уровне роутер отличается от коммутатора возможностью маршрутизации в интернете, тогда как коммутатор работает только внутри закрытой локальной сети. Технически это связано с тем, что роутер умеет «вычислять по IP», а коммутатор может узнавать устройства только по MAC-адресу. Современные роутеры умеют и то, и другое, поэтому в домашних сетях редко встречаются коммутаторы. В дата-центрах же они — важнейшие участники сетевой активности.

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

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

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

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

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

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

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

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

TCP/IP-стек в сборе
Вот какие преобразования испытал мув Тирекса к криперу:
клиентская часть Minecraft преобразовала мув в запрос — уровень приложения,
ОС получила файл и разбила его на фрагменты — транспортный уровень,
ОС упаковала фрагменты по пакетам — сетевой уровень,
пакеты поместились во фреймы (кадры) и попали на сетевую карту — сетевой уровень,
сетевая карта передала эти фреймы в виде битов на коммутатор — канальный уровень.

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

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

Эра интернета
Теперь у Тирекса и Тукса дома есть свои компьютеры и интернет — ребята могут играть в Minecraft не выходя из дома, тем более в Selectel для этого есть отличный сервер.
Мы уже знаем об уровнях сетевого стека, и в этом разделе нам осталось встроить в цепочку дополнительную сеть. Тут не будет почти ничего нового, только несколько вспомогательных устройств и серверов на пути игровых событий.
Разберемся, как организован выход в интернет и соберем полную картинку.
Итак, теперь, когда появился интернет, стали доступны дополнительные сортировочные станции после попадания пакета на роутер (коммутатора нам теперь недостаточно) по Wi-Fi или по кабелю Ethernet.

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

Сами по себе IP-адреса выглядят как четыре числа от 0 до 255, разделенные точками. Например, так: 192.168.1.1. Конечно, этим было бы неудобно пользоваться, поэтому у публичных сетевых устройств есть красивые доменные имена типа secret.server.ru. Но за ним скрывается числовой айпишник, а данные о соответствиях доменных имен IP-адресам содержатся на специальных DNS-серверах.
Итак, домашний роутер обращается к интернет-провайдеру и сообщает, что у него есть пакет для адреса сервера. Допустим, secret.server.ru. Провайдер проверяет этот адрес, и если он находится в его сети (что маловероятно), пакет сразу попадает на роутер дата-центра, а с него через коммутатор — на Minecraft-сервер.
Если этот адрес неизвестен провайдеру, пакет передается вышестоящему магистральному провайдеру, и уже через него находит своего получателя. На рисунке ниже я показала ситуацию, когда у Тирекса и дата-центра провайдеры разные.

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, оставляйте пожелания в комментариях. Всем хорошего дня и понятных обсуждений с коллегами!
Комментарии (4)
ddv2005
16.07.2025 10:00Думаю, что автору лучше НИКОГДА больше не писать технические статьи. Этот просто бред гуманитария который не имеет ничего общего с правдой. Во-первых, по крайней мере в начале 90-х у 99.99999% жителей СССР небыло даже одного компьютера, а если и был то в нем 100% небыло сетевой карты. Да и смотреть котиков было практически негде, потому что Windows 3.1 выпустили только в 1992 году. Зачем вообще было присать бред о 90х если автор их не застал? Во-вторых, есть разные топологий сетей и вот как раз в 90х был очен распространен тип кольцо, а не звезда как сейчас. И при топологии кольцо НЕТ коммутаторов. Ну а когда начался бред про маршрутизаторы и коммутаторы, то я просто бросил читать, потому что никакого терпения не хватает. Автор...пожалуйста НИКОГДА БОЛЬШЕ НЕ ПИШИ! И наконец просто прочитайте про коммутаторы Layer 2 и чем они отличаются от Layer 3. А потом просто удалите свою статью.
0o0
"Вот что для этого потребуется:
сетевая карта в каждом из компьютеров,"
не потребуется
потребуется провод COM-COM и нортон коммандер
CursedBone
Дедушка, не нервничайте)
А если серьезно, то com порт сейчас найти трудновато даже когда он очень нужен
ddv2005
Найти очень даже легко, в любом нормально компьютерном магазине USB to Serial Converter, USB to RS232 и так далее.