Как учиться по этому курсу — эксперименты, Wireshark, мини-проекты
Сети — это не та область, в которой работает «прочитал учебник — запомнил». В отличие от математики, где можно понять теорему и потом долго ей пользоваться, networking забывается быстро, если не подкреплён руками. Через месяц после прочтения главы про TCP вы будете помнить, что в нём есть какой-то handshake, но не вспомните, что отправляется на каждом шаге.
Поэтому методика этого курса — максимально hands-on. Минимум теории «в воздухе», максимум команд, которые вы запускаете сами и смотрите результат. В этом уроке — конкретный workflow: что делать на каждом уроке, зачем нужен Wireshark, какие мини-проекты собирать после модулей.
Базовый workflow на каждом уроке
Каждый урок устроен примерно одинаково. Идеальный flow прохождения такой:
Главное правило: не пропускайте команды. Это разница между «вы читали про TCP» и «вы видели TCP». Когда вы своими глазами в Wireshark видите SYN, SYN-ACK, ACK — эта картинка остаётся в памяти на годы. Когда вы прочитали об этом в книге — забудете через неделю.
Активный Wireshark
Wireshark — ваш главный инструмент для понимания сетей. Это GUI-программа, которая показывает все пакеты, проходящие через ваш сетевой интерфейс, в человекочитаемом виде. Если вы не использовали Wireshark раньше — сейчас самое время поставить.
Установка:
# macOS
brew install --cask wireshark
# Ubuntu/Debian
sudo apt install wireshark
# Во время установки выберите 'Yes' на вопрос о разрешении non-root пользователям делать capture
# После установки добавьте себя в группу wireshark (Linux):
sudo usermod -a -G wireshark $USER
# Перелогиньтесь, чтобы группа применилась
# Запуск
wireshark
# или Wireshark.app на macOS
После установки — запустите Wireshark, выберите ваш сетевой интерфейс (обычно en0 на macOS, eth0/wlan0 на Linux), нажмите play и сразу увидите поток пакетов в реальном времени.
Полезные display filters, которые вы будете использовать часто:
# Только трафик к/от конкретного хоста
ip.addr == 142.250.185.78
# Только DNS-запросы и ответы
dns
# Только TCP-handshake (SYN/SYN-ACK/ACK)
tcp.flags.syn == 1
# Только пакеты с retransmission (сигнал проблем)
tcp.analysis.retransmission
# Только HTTP-запросы
http.request
# Только TLS-handshake
tls.handshake
# Конкретный порт
tcp.port == 443
Альтернатива GUI — tcpdump в командной строке. Удобно на удалённых серверах, где нет графики. Захватите трафик в файл (tcpdump -w capture.pcap), скопируйте файл на свою машину, откройте в Wireshark локально. Это стандартный workflow.
Эксперимент = поломать намеренно
Один из самых эффективных способов учиться — ломать то, что работает. Когда вы запустили curl https://api.github.com и получили JSON — это полезно, но мало что показывает (потому что всё работает гладко). Намного полезнее намеренно сломать и посмотреть, что произойдёт.
Примеры экспериментов, которые мы будем делать в курсе:
# 1. Несуществующий хост -- посмотреть DNS-ошибку
curl https://this-host-does-not-exist.example.invalid
# curl: (6) Could not resolve host: this-host-does-not-exist.example.invalid
# 2. Существующий хост, но закрытый порт -- TCP-ошибка
curl https://google.com:1234 --max-time 5
# curl: (28) Failed to connect to google.com port 1234 after ...
# 3. Существующий хост, открытый порт, но не HTTPS -- TLS-ошибка
curl https://www.google.com:80
# curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number
# 4. Самоподписанный сертификат -- TLS validation error
curl https://self-signed.badssl.com/
# curl: (60) SSL certificate problem: self signed certificate
# 5. Просроченный сертификат
curl https://expired.badssl.com/
# curl: (60) SSL certificate problem: certificate has expired
# 6. Чужой сертификат (name mismatch)
curl https://wrong.host.badssl.com/
# curl: (60) SSL: no alternative certificate subject name matches target host name
Сайт badssl.com создан специально для таких экспериментов — разные виды ломаных TLS-конфигураций для отладки. Запомните его, мы будем им пользоваться в модуле 11.
Если вы прочитали урок и не сделали ни одного эксперимента — считайте, что не прошли урок. Это не пафос, это статистика обучения. Активное взаимодействие даёт ретенцию знаний в 5-10 раз выше пассивного чтения.
Мини-проекты после модулей
После каждого модуля есть смысл собрать небольшой проект, объединяющий пройденный материал. Это не обязательно по программе курса, но крайне рекомендую. Примеры:
Не обязательно делать все — выберите 2-3, которые вам интересны. Главное правило для проектов: пишите код с нуля, не копируйте из чужих репо. Цель не в красивом коде, а в том, чтобы каждая строчка прошла через ваши руки. Если у вас не получается — это сигнал, что нужно вернуться и перечитать соответствующий модуль.
Что делать с теорией
Часть курса — это всё-таки теория. Скажем, RFC-номера, эпохи протоколов, исторический контекст. Что с этим делать?
Не зубрить. Никто не помнит RFC-номер на собеседовании. Что важно — понимать связи между концепциями. Когда вы знаете, что HTTP/3 = QUIC = поверх UDP с встроенным TLS — вам не нужно помнить, что это RFC 9000. Когда вы знаете, что DNS использует UDP-порт 53 (но может TCP при больших ответах) — вам не нужно помнить, что это RFC 1035.
Хорошее правило: если вы можете объяснить концепцию кому-то ещё, не сверяясь с конспектом — значит, она усвоена. Если для объяснения нужно лезть в учебник — ещё нет. Попробуйте объяснять напарнику, дочери, кошке — кому угодно. Это самый эффективный тест понимания.
Расписание и темп
Сети — это область, в которой быстрое прохождение не работает. Это не Python tutorial, где можно за выходные прокачаться. Реалистичное расписание:
- Час в день, 5 дней в неделю. Один урок плюс эксперименты. В этом темпе курс займёт 2-3 месяца.
- Полная неделя интенсива. Если у вас есть отпуск или хакатон — можно пройти за 10-14 дней. Но это тяжело, и материал хуже усваивается.
- 30 минут утром. Можно растянуть на 4-5 месяцев. Не оптимально, но работает, если день очень загружен.
Главное — регулярность. Лучше каждый день по 30 минут, чем один раз в неделю на 4 часа. Networking требует наслоения знаний: каждый следующий урок опирается на предыдущий, и если между ними проходит неделя, вы забываете предыдущее.
Совет от учеников прошлых потоков: ведите свой network journal. После каждого урока запишите 3 вещи: (1) что узнал нового; (2) к какому реальному кейсу из работы это можно применить; (3) что было неясно и хочется разобрать глубже. Через месяц перечитайте — увидите свой рост.
Когда обратиться за помощью
Курс не заменяет общения. Когда вы застряли — задавайте вопросы. Сначала самому себе — через серию команд. Если не получается — спросите в коммьюнити (Discord, форум) или у ментора.
Хороший вопрос содержит:
- Что вы делаете. Точная команда или код.
- Что ожидаете увидеть. Какой output / поведение должно быть.
- Что видите вместо этого. Текст ошибки, скриншот вывода, pcap-файл.
- Что уже пробовали. Какие гипотезы проверили.
Плохой вопрос: «У меня curl не работает, почему?». Хороший: «Запускаю curl -v https://api.example.com/data, получаю curl: (60) SSL certificate problem. Проверил, что сертификат правильный через openssl s_client — цепочка корректная. На другой машине та же команда работает. В чём может быть разница?». Второй вопрос — это уже половина решения.
Попробуй сам
Прежде чем переходить к модулю 01, сделайте короткую разминку с Wireshark.
# 1. Запустите Wireshark, выберите ваш интерфейс
# (en0 на macOS, eth0/wlan0 на Linux)
# 2. В display filter введите: tcp.port == 443 and tls.handshake
# 3. Запустите capture (синяя акула)
# 4. В отдельном терминале выполните:
curl -s https://example.com > /dev/null
# 5. Остановите capture (красный квадрат)
# 6. В списке пакетов вы должны увидеть несколько строк -- это TLS-handshake
# при подключении к example.com
# 7. Кликните на первый TLS-пакет, разверните в нижней панели дерево
# 'Transport Layer Security'. Посмотрите, какие поля там есть
Если всё получилось — вы захватили реальный TLS-handshake и видите его структуру. Если нет — проверьте, что выбран правильный интерфейс и сетевой трафик идёт через него. На многих корпоративных машинах нужно сначала добавить себя в группу wireshark для прав на capture.
Не страшно, что сейчас многое непонятно (что такое Client Hello, Server Hello, какие cipher suites). К модулю 11 это будет ясно как день. Сейчас цель — просто убедиться, что инструменты работают и вы видите трафик.
Полный инструментарий сетевой диагностики на Linux