Miminet 🛜 | Компьютерные сети
Kanalga Telegram’da o‘tish
Компьютерные сети, немного программирования и про обучение в ИТ
Ko'proq ko'rsatishMamlakat belgilanmaganToif belgilanmagan
885
Obunachilar
+224 soatlar
+97 kunlar
+10830 kunlar
Postlar arxiv
Разбор тестовой задачи #3 (сложная)
Дано: сеть https://miminet.ru/web_network?guid=198c649e-3be5-4c9c-9967-11cb8d81e9c5.
Задание: хост 1 и 2 должны подключиться к серверу на TCP порт 12345.
Условия:
— не менять топологию сети и IP-адреса;
— не использовать VxLAN;
— серые IP-адреса не маршрутизируются между маршрутизаторами;
— чем меньше команд будет добавлено, тем лучше.
Дальше — разбор задачи с правильным решением. Желающие могут сначала проверить себя, а потом уже узнать ответ.
Моё решение: https://miminet.ru/web_network?guid=67e7a335-8212-4549-b878-d135e9189af0.
Правильных решений было мало, и это нормально: эта задача со звездочкой.
Типичная ошибка
Многие использовали только NAT, чтобы скрыть «серые» IP-адреса хостов. Это правильно! Но при этом пытались установить соединение с сервером напрямую. А вот это уже неправильно.
За что еще я снимал баллы
Неаккуратность. Бывает, задача решена верно, но схема выглядит неопрятно. Аккуратность улучшает читаемость и облегчает понимание. Неаккуратная схема подобна коду без соблюдения стиля.
Итог
Многие кандидаты набрали 0 или 1 балл из 3. На 3 балла решили только 2 кандидата.
Разбор тестовой задачи #2 (нормальная)
Дано: сеть https://miminet.ru/web_network_shared?guid=4e078230-82fc-47cc-9381-cd39af467119.
Задание: хосты 1, 2 и 3 должны автоматически получить IP-настройки.
Условия:
— топологию сети менять нельзя;
— на схему можно добавлять только сервера;
— постарайтесь использовать минимальное количество серверов.
Дальше — разбор задачи с правильным решением. Желающие могут сначала проверить себя, а потом уже узнать ответ.
Моё решение: https://miminet.ru/web_network?guid=ec9cccd1-15f1-4517-9e18-3a4727cd655f.
Многие решили эту задачу путем добавления 3-х DHCP-серверов. Это хорошее решение на твердые 2 балла из 3.
Как получить 3 балла:
Многие написали в комментариях, что можно было решить эту задачу через DHCP-relay, но в miminet он не поддерживается на данный момент. Это верно, но мы бы не давали задачу, если её нельзя решить (кстати DHCP-relay уже ждет выхода).
Решить эту задачу на 3 балла можно без DHCP-relay через использование VxLAN. VxLAN позволяет создавать L2 связность поверх L3 сети, активно применяется в облаках.
За что еще я снимал баллы:
1. Использование «белых» (публичных) IP-адресов. Если в условии ничего не сказано про публичные адреса, то лучше их не использовать. Они платные, и на схеме без необходимости применять их не стоит. В частных сетях вполне достаточно диапазонов 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.
2. Неаккуратность. Бывает, задача решена верно, но схема выглядит неопрятно. Аккуратность улучшает читаемость и облегчает понимание. Неаккуратная схема подобна коду без соблюдения стиля.
Итог: многие кандидаты набрали 2 балла из 3 и предложили DHCP-relay. С VxLAN никто не решил.
Разбор тестовой задачи #1 (легкая)
В этом году я помогал составлять и проверять тестовые задания для отбора на стажировку «Ядро.Импульс 2026». Всего было три задачи: лёгкая, нормальная и чуть посложнее. Буду выкладывать по одной задаче в пост. Погнали!
Дано: сеть https://miminet.ru/web_network?guid=ed065730-02a8-4272-8539-ad84fed1bb91
Задание: требуется настроить сеть так, чтобы хост 1 пинговал сервер.
Условие: топологию сети изменять нельзя.
Дальше — разбор задачи с правильным решением. Желающие могут сначала проверить себя, а потом уже узнать ответ.
Моё решение: https://miminet.ru/web_network?guid=1b2799b9-58bf-4ac7-a4e6-ae66b7d106d5
За что я снимал баллы:
1. Использование «белых» (публичных) IP-адресов. Если в условии ничего не сказано про публичные адреса, то лучше их не использовать. Они платные, и на схеме без необходимости применять их не стоит. В частных сетях вполне достаточно диапазонов 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.
2. Неаккуратность. Бывает, задача решена верно, но схема выглядит неопрятно. Аккуратность улучшает читаемость и облегчает понимание. Неаккуратная схема подобна коду без соблюдения стиля.
Баллы не снимал, но указывал как помарку:
Использование STP вместо RSTP. В Miminet коммутаторы поддерживают оба протокола. STP очень старый, при изменении топологии он может восстанавливать связность до 60 секунд. Это очень долго. По возможности лучше использовать более современные реализации (RSTP и новее).
Итог: многие кандидаты набрали максимальный балл. Отличная работа!
Кому мало практической задачи — вот мой список теоретических вопросов на экзамене по администрированию Linux. Он может быть полезен при подготовке к собеседованию на системного администратора Linux/DevOps.
Кто хочет попробовать сдать зачёт по сетевому администрированию Linux?
Задача: На зачёте вы получаете образ ОС Linux для VirtualBox. Требуется настроить этот образ в соответствии с одним из заданий.
Условия:
1. Разрешается пользоваться любыми материалами, кроме ИИ-чатов. Можно использовать ответы ИИ в поисковой выдаче Google или Яндекса, но не заходить в отдельный чат.
2. Выполнение задания ограничено по времени и соответствует оценке:
• до 40 минут — A;
• до 45 минут — B;
• до 50 минут — C;
• до 55 минут — D;
• до 60 минут — E.
3. В образе для зачёта спрятаны две «подлянки», которые мешают выполнить задание. Их не нужно искать специально, вы просто не сможете завершить настройку, пока не устраните их.
Образы Linux:
— тестовый образ (чтобы проверить, что всё импортируется):
https://drive.google.com/file/d/1_wdgH7xWCDu1BIPI0wJTCfEiPPfwMqPR/view?usp=drive_link
— образ для зачёта (с двумя подлянками) — это RAR-архив. Пароль от архива "miminet.ru83":
https://drive.google.com/file/d/1P9rSRe0Y-IZ2aH16WY98j7IghnPbPh5e/view?usp=drive_link
Задания (все используют DNS-имя
math.spbu; NS-сервер указывает на ваш IP):
1. Поднимите HTTP-сервер на порту 8080. На главной странице math.spbu должно быть написано: «Привет, мат-мех!» (обязательно на русском).
2. Настройте доступ по SSH на порту 2222 по имени pe.math.spbu. Вход только по ключу. Проверьте правильность, войдя под своим логином.
3. Поднимите HTTP-сервер на порту 5000. На главной странице pe.math.spbu должно быть написано: «Привет, программная инженерия!».
4. Поднимите SMTP-сервер на имя math.spbu, порт 25. Проверка будет выполнена отправкой письма на ваш сервер.
Удачи! 💪🏻IP-сеть vs IP-адрес
При изучении работы маршрутизатора и таблиц маршрутизации новички часто допускают одну ошибку: добавляя маршрут, они прописывают IP-адрес вместо IP-сети (см. рисунок). В результате маршрут не работает.
Почему? Потому что в таблице маршрутизации указываются IP-сети, а не IP-адреса.
Примеры IP-сетей:
192.168.1.0/24
172.16.0.0/16
10.0.0.0/8
IP-сеть задаётся двумя параметрами: адресом сети и маской сети.
Примеры IP-адресов (конкретных устройств):
192.168.1.25/24
172.16.0.116/16
10.1.2.3/8
Здесь маска сети указывает устройству, к какой IP‑сети оно принадлежит.
Как узнать, к какой сети относится IP-адрес?
1. Применить маску к IP-адресу (вычислить адрес сети).
2. Сравнить полученный результат с адресом известной сети.
Например, есть три сети:
— 192.168.1.0/24
— 172.16.0.0/16
— 10.0.0.0/8
Возьмём IP-адрес 192.168.1.25.
1. Применяем маску /24 → получаем 192.168.1.0.
2. Сравниваем с адресами сетей: 192.168.1.0 совпадает с первой сетью.
Значит, адрес принадлежит сети 192.168.1.0/24.
Что произойдёт, если в таблицу маршрутизации добавить не сеть, а конкретный IP-адрес?
Рассмотрим маршрутизатор, в таблице которого две записи (ошибочные, так как вместо сетей указаны адреса):
— 192.168.10.2/24
— 192.168.20.2/24
Пакет приходит для адреса назначения 192.168.20.2 (хост 2). Маршрутизатор перебирает записи:
1. Для первой записи применяем маску /24 к адресу назначения 192.168.20.2. После применения маски получаем 192.168.20.0.
2. Сравниваем с адресом из записи 192.168.10.2. Равенства нет. Маршрут не подходит.
3. Для второй записи применяем ту же маску /24 к адресу назначения — снова 192.168.20.0.
4. Сравниваем с 192.168.20.2. Равенства нет (192.168.20.0 ≠ 192.168.20.2). Маршрут снова не подходит.
В итоге подходящих маршрутов нет. Маршрута по умолчанию тоже нет. Пакет отбрасывается.
Вывод: всегда указывайте в таблице маршрутизации именно IP-сети, а не отдельные IP-адреса.
#miminet #ip
Советы про поиск работы и стажировки 🤓
Из личного опыта: если вы сразу идёте на hh.ru или другой сайт с вакансиями — это жирный признак того, что вы что-то делаете не так. Эти ресурсы стоит использовать в последнюю очередь.
Люди и знакомства важнее резюме!
Первым делом посмотрите на своё окружение. Где работают друзья, одногруппники, знакомые? Спросите их: может, кому-то нужны сотрудники или соседней команде требуется человек. Во многих компаниях есть программы рекомендаций. Если знакомый порекомендует вас, и вас возьмут — он получит бонус. Это отличная мотивация для него помочь вам.
Стажировки
Если вы студент или недавний выпускник — ищите стажировки напрямую от компаний. Сейчас у многих вузов есть компании-партнёры: Яндекс, ВК, Т-банк, Сбер, Yadro, Selectel, UgraGate, Контур и другие. Они заинтересованы в студентах IT-направлений. Стажировки и летние/зимние школы проходят почти круглый год.
Опыт важнее денег на старте
— Поймите, что вам действительно интересно. Найдите сообщество по этой теме — общайтесь, задавайте вопросы, будьте на виду.
— Попробуйте найти open source проект, и практикуйтесь в нём. Решайте задачи в своём темпе и без большой ответственности. С одной стороны, это ценный опыт. С другой — в таком проекте почти наверняка есть сотрудники компаний, которые со временем смогут вас порекомендовать.
hh.ru и аналоги — это запасной вариант
И только если ничего из перечисленного выше не сработало или пока не подходит — остаётся hh.ru. Да, это рабочий вариант, но я советую пробовать его последним, а не первым.
Мой совет: развивайте нетворкинг. Старайтесь находить работу через друзей и знакомых. Если сейчас у вас слабый круг общения — не страшно, его можно и нужно развивать постепенно.
Лично я никогда не проходил собеседований в классическом смысле — всегда устраивался по знакомству. Чего и вам желаю.
С почином!
Спустя почти два года и 367 положительных отзывов мой курс получил первую единицу 🤷♂️
Откуда белый IP-адрес у моего провайдера?
Простой ответ: IANA 😎
Всеми IP-адресами в мире управляет организация IANA. Но она не продаёт адреса напрямую. Вместо этого IANA выделяет (аллоцирует) большие блоки IP-сетей (например, /4, /8, /16) региональным интернет-регистраторам (RIR). Каждый RIR отвечает за свой регион.
В свою очередь, RIR распределяют более мелкие IP-сети между локальными провайдерами и компаниями (Яндекс, Ростелеком и др.) — тоже на условиях аренды. Никто не продаёт IP-адреса насовсем.
И когда вы подключаете для дома белый IP-адрес или покупаете сервер в облаке, то по сути вы арендуете этот адрес у своего провайдера, который уже арендует его у регионального регистратора.
Именно так у вашего домашнего Wi-Fi роутера и появляется белый IP-адрес.
#ip #iana #rir
STP/RSTP в Miminet
У Андрея Созыкина есть хорошая лекция про STP — протокол, который помогает избежать петель в сети.
В Miminet этот протокол можно наглядно изучить на практике. Я собрал сеть из четырёх коммутаторов и соединил их так, чтобы образовалась петля. Если не использовать STP или RSTP, то в такой сети возникает широковещательный шторм, и вся сеть перестаёт работать за доли секунды.
STP позволяет коммутаторам обнаружить петлю и автоматически её разорвать, сохраняя работоспособность сети.
Посмотреть, как это работает, можно на примере: https://miminet.ru/web_network?guid=5ee6741b-ed30-4dd3-bd81-49f0d7af0f03
#stp #rstp #miminet
🌟 Вопрос на выходные 🌟
Дано:
1. Сеть как на рисунке.
2. Хост 1 и 2 находятся в разных IP-сетях.
3. На хосте 1 добавлен маршрут для хоста 2.
4. Хост 1 хочет отправить ICMP-запрос на хост 2. Для этого он отправляет ARP-запрос, чтобы узнать MAC-адрес хоста 2.
Вопрос:
Ответит ли хост 2 на этот ARP-запрос?
Как всегда, присылайте ответы в комменты.
🔥 — красавчик, ответ верный.
P.S. в этот раз я проверил: задание можно решить =)
#task #miminet #arp #routing
Оплачиваемая IT-стажировка в YADRO 🤟
Компания YADRO открыла набор на летнюю стажировку «Импульс 2026». Не могу пройти мимо такой новости, так как Miminet поддерживается лабораторией YADRO при СПбГУ.
В этом году открыто более 30 направлений:
🔵C, системное программирование; 🔵разработка на Go, Python, C++; 🔵тестирование; 🔵математика и алгоритмы; 🔵системное и сетевое администрирование, техподдержка; 🔵проектный менеджмент и маркетинг и еще 20+ направлений!Лучше всего посмотреть полный список и выбрать то, что интересно именно вам. Я же расскажу подробнее про одну из них. Разработка на Python YADRO производит отечественные коммутаторы Kornfeld, и я лично знаком с этой командой. Два года подряд тестовые задания от этого направления проводились на Miminet — и в этом году тоже. Советую присмотреться, если вы интересуетесь сетями или хотите заниматься разработкой сетевого оборудования. Подробнее о самом коммутаторе Kornfeld вы можете узнать в презентации. Узнать больше о вакансии можно в направлении "Разработка ПО" -> "Разработка на Python". P.S. Если вы хотите подробнее узнать о компании, задачах и в целом о стажировке — спрашивайте, я постараюсь узнать это для вас. #стажировка #сети #python
А куда вообще писать дальше?
Последнее время я не писал, потому что размышлял, где лучше продолжить вести канал.
Мне всегда было ближе публиковать посты в одном месте. Не потому что лень дублировать, а потому что теряется смысл сообщества. Удобно, когда все посты и обсуждения собраны вместе: так проще общаться, все видят комментарии друг друга. А если одно и то же писать в разные места, вы неизбежно что-то пропускаете.
Поэтому передо мной сейчас развилка:
— остаться здесь (и подталкивать вас ставить VPN);
— уйти в Max (и подталкивать вас его устанавливать);
— попробовать другие варианты, которые ещё хуже.
В идеале хочется сломать эту чёртову палку, но на новый сервис с нуля у меня просто нет сил и ресурсов. Поэтому выбираю компромисс: пока остаюсь тут и для тех, кому удобнее, буду дублировать посты в Max.
Спасибо, что остаётесь со мной🏂
Без MAC-адреса было бы проще, не нужно было бы заморачиваться с ARP протоколом.
На определенном этапе изучения компьютерных сетей возникает логичным предположение: "Если IP уникальный, то кажется, что без MAC было бы проще, не нужно было бы заморачиваться с ARP протоколом."
На первый взгляд все так и есть: IP-адрес уникальный, и мы обращаемся к хостам по IP-адресу. Может убрать MAC-адрес, убрать ARP — и погнали?!
Попробуем спроектировать такую сеть без MAC и ARP, где адресуются напрямую по IP. К чему это приведет?
1. Перестанет работать DHCP, и все хосты не смогут автоматически получать IP-адрес.
2. Огромное число протоколов L2 уровня нужно будет переделать: https://en.wikipedia.org/wiki/EtherType#Values.
3. Коммутаторы теперь должны будут парсить IP протокол (как минимум, IPv4 и IPv6), что серьезно увеличит время работы и деградацию производительности.
IPv4 поверх Ethernet — это частный случай для домашних сетей. В датацентрах и у провайдера Ethernet служит универсальным транспортным слоем для множества протоколов, не связанных с IP. MAC-адресация обеспечивает независимость уровней, что является фундаментом архитектуры OSI и TCP/IP.
IP необходим для маршрутизации между различными IP-сетями (разными широковещательными доменами). Внутри одного широковещательного домена Ethernet и MAC-адреса выполняет свою работу оптимально.
Вывод
Отказ от MAC и ARP — это не упрощение, а разрушение уровневой абстракции, ведущее к потере совместимости, производительности и гибкости. Существующая связка Ethernet + IP + ARP — результат десятилетий эволюции, где каждое звено имеет свою, незаменимую функцию.
Jump host
Недавно я писал про Port forwarding и как эта техника помогает получить доступ к серверу, который недоступен напрямую.
Еще один способ подключиться по SSH к такому серверу — это использовать Jump host 🦘
Jump host — это промежуточный SSH-сервер, используемый как шлюз для безопасного доступа к другим машинам в закрытой частной сети (DMZ) по SSH.
Если нужный сервер находится за другим SSH-сервером, и у вас есть доступ к обоим — используйте опцию -J (Jump host).
ssh -J username_jump@jump_host_ip username_target@target_host_ip
Сначала вы по SSH подключаетесь к jump_host_ip, а затем подключаетесь к target_host_ip.
В моём случае команда выглядит вот так:
ssh -J ilya@miminet.ru ilya@10.130.0.28
Команда длинная, поэтому я добавлю нужную информацию в config-файл ~/.ssh/config (работает и в Windows тоже):
Host miminet HostName miminet.ru User ilya IdentityFile ~/.ssh/private_key.txt Host miminet2 HostName 10.130.0.28 User ilya ProxyJump miminet IdentityFile ~/.ssh/private_key.txtТеперь достаточно набрать в консоли:
ssh miminet2
И я сразу на втором сервере! 🎯
#советдня #jumphost #sshБазовый курс
Недавно я получил оценку 3 звезды на курс "Основы компьютерных сетей". Подумал, что это хороший повод рассказать, что такое базовый курс и зачем он нужен.
В университетах много базовых/фундаментальных курсов. Например: математические курсы, основы компьютерных сетей, алгоритмы (на С/JavaScript/Python), архитектура ОС, компиляторы и т.п. Сам по себе базовый курс не добавляет компетенций и не имеет практических применений. Выучив основы компьютерных сетей, вы не становитесь админом Windows/Linux или сетевым инженером, курс не добавляет навыков в DevOps и не учит создавать свои сетевые приложения.
Для чего нужны базовые курсы?
Базовые курсы создают фундамент для специализации и систематизируют знания в конкретной области. Скажем так, без базовых курсов не освоить специализированный курс. Например, попробуйте рассказать кому-то без базы по сетям, как работает VPN или в чем идея Port forwarding?
Что касается отзыва, то "стал лучше понимать, как работают сетевые технологии. Больше ничего." — это как раз то, для чего курс и делался. Теперь можно смело изучать что-то специализированное: сетевое администрирование Linux/Windows, разработка сетевых приложений, DevOps и т.д.
Всю неделю я добавлял теоретические вопросы и практические задачи к курсу "Разработка сетевых приложений на Python". Вот одна из новых практических задач.
Легенда 🤫
Вы шпион, канал связи с сервером скомпрометирован. Ваша задача: реализовать UDP-клиент, получить зашифрованное сообщение с сервера и прочитать его.
Условия 👀
1. На сервере task.miminet.ru на порту 41337 работает UDP-сервер.
2. На сервере есть секретное сообщение, которое он готов передать только в зашифрованном виде.
3. Сервер поддерживает обмен ключами по протоколу Диффи-Хеллмана (Diffie–Hellman key exchange protocol) с параметрами:
PRIME = 2305843009213693951 # Большое простое число (p) GENERATOR = 61395 # Генератор (g)4. Сервер ждет от вас (клиента) публичный ключ. 5. Получив от вас публичный ключ, сервер генерирует общий секретный ключ и зашифровывает секретное сообщение (шифр — это просто XOR). 6. В ответ сервер пришлет вам два UDP-сообщения: — свой публичный ключ (он вам нужен, чтобы сгенерировать общий секретный ключ); — зашифрованное ключом сообщение. 7. Все данные передаются байтами, а не строкой. Расшифруйте сообщение! Удачи 😏 P.S. Пожалуйста, не пишите сюда правильные ответы и готовые UDP-клиенты. Если все получилось, вы можете просто проверить ответ в курсе на stepik.
Проброс портов (Port Forwarding): решаем проблему с двумя серверами
Port-forwarding — это проброс определенного TCP или UDP порта. Вместо теории, расскажу, как я его использую на практике.
Проблема 🤔
Для стабильной эмуляции в Miminet я использую два сервера (назовем их A и B). Сервер A имеет белый IP-адрес и доступен из интернета, а сервер B — только серый IP-адрес.
Схема подключения:
[Я](SSH) --> [СЕРВЕР A: белый IP](SSH) --> [СЕРВЕР B: серый IP]
Подключиться к серверу B можно только из внутренней сети, например, с сервера A. Чтобы это сделать я:
1. Подключаюсь к серверу A:
ssh ilya@A -i my_private_key
2. С сервера A подключаюсь к серверу B:
ssh ilya@B -i my_private_key
Каждый раз вбивать две команды и таскать с собой ключи на промежуточном сервере — это неудобно и медленно.
Решение 🤓
Сделаем сервер A "Jump proxy": если я стучусь на порт 2222, то переадресуй меня на 22-й порт сервера B.
Все команды выполняются на сервере A:
1. Перенаправляем пакет (DNAT). Любой пакет на порт 2222 сервера A перенаправляем на IP сервера B (22 порт):
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination ip-addr-host-B:22
2. Маскируем пакет (MASQUERADE). Когда сервер B захочет ответить, он будет отправлять пакеты напрямую мне. Но мой хост ждет ответа от сервера A. Чтобы не было путаницы, сервер A должен подменить мой адрес на свой. Это называется маскарад
iptables -t nat -A POSTROUTING -d ip-addr-host-B -o eth0 -j MASQUERADE
3. Открываем шлагбаум (FORWARD). По умолчанию Linux запрещает пересылку пакетов. Если у вас в таблице FORWARD стоит политика DROP, добавьте правила для пропуска трафика к хосту B и обратно:
# Разрешить трафик к хосту B на порт 22:
iptables -A FORWARD -p tcp -d ip-addr-host-B --dport 22 -j ACCEPT
# Разрешить ответный трафик от хоста B
iptables -A FORWARD -p tcp -s ip-addr-host-B -j ACCEPT
Профит 🚀
Теперь ввожу одну команду, и я на сервере B:
ssh ilya@A -p 2222 -i my_private_key
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
