Initial commit: interview prep repo (resume, legend, stack cases, Kubernetes course)
This commit is contained in:
68
stack/networking/CASE.md
Normal file
68
stack/networking/CASE.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# Кейс: сетевая база (практикум команд)
|
||||
|
||||
Связь с легендой: [../../legend/LEGEND.md](../../legend/LEGEND.md) — раздел «Домашняя лаборатория / pet-проект». Сети как отдельная тема не входили ни в резюме, ни в рабочий стек явно — но это базовые знания, без которых не воспринимается ни один инфраструктурный собес (весь собес [VK Cloud](../../interview/VK%20Cloud.md) построен на сетевой базе). Здесь не docker-стенд, а практикум: реальные команды, прогнанные на своей машине, с записанным выводом.
|
||||
|
||||
## Что нужно реально сделать
|
||||
|
||||
Не разворачивать отдельную инфраструктуру, а вживую прогнать диагностические команды и зафиксировать, что именно они показывают — это то, что на собеседовании часто просят показать в терминале.
|
||||
|
||||
### 1. DNS: резолвинг и разница authoritative/recursive
|
||||
|
||||
```bash
|
||||
dig vk.com # полный ответ: ANSWER SECTION, TTL, тип записи A
|
||||
dig +trace vk.com # путь от корневых DNS-серверов до authoritative-сервера домена
|
||||
nslookup vk.com
|
||||
```
|
||||
|
||||
Рекурсивный резолвер (например, DNS провайдера или публичный 8.8.8.8) сам обходит цепочку: корневые сервера → TLD-сервера (.com) → authoritative-сервер зоны vk.com, и возвращает клиенту готовый ответ, кешируя его на своё TTL. Authoritative-сервер — тот, у кого хранится реальная зона домена и который выдаёт финальный, «истинный» ответ по этому домену.
|
||||
|
||||
### 2. Traceroute — как получает IP промежуточных хостов
|
||||
|
||||
```bash
|
||||
traceroute 8.8.8.8 # Linux/macOS
|
||||
tracert 8.8.8.8 # Windows
|
||||
```
|
||||
|
||||
Traceroute шлёт пакеты с постепенно увеличивающимся TTL (1, 2, 3...). Каждый маршрутизатор на пути, получив пакет с TTL, уменьшает его на 1; когда TTL становится 0, маршрутизатор отбрасывает пакет и отправляет обратно ICMP Time Exceeded с указанием своего IP. Так по очереди «подсвечивается» каждый хоп на пути — сначала ближайший роутер (TTL=1 истекает у него), потом следующий (TTL=2) и так далее, пока пакет не дойдёт до цели.
|
||||
|
||||
### 3. HTTP/S, TLS, методы
|
||||
|
||||
```bash
|
||||
curl -v https://vk.com # -v показывает весь handshake: TCP connect, TLS handshake, заголовки запроса/ответа
|
||||
curl -I https://vk.com # только заголовки ответа
|
||||
openssl s_client -connect vk.com:443 -brief # детали TLS-сертификата и версии протокола
|
||||
```
|
||||
|
||||
Прогнать вручную запросы разными методами на тестовый сервис (например, `httpbin.org`): `curl -X GET/POST/PUT/DELETE/PATCH https://httpbin.org/anything` — увидеть, как сервис получает метод и тело запроса.
|
||||
|
||||
### 4. Порты и процессы
|
||||
|
||||
```bash
|
||||
ss -tulpn # какие порты слушаются и каким процессом (Linux)
|
||||
netstat -ano | findstr :80 # Windows-аналог
|
||||
Test-NetConnection -ComputerName example.com -Port 443 # PowerShell: проверка доступности порта на удалённом хосте
|
||||
nc -zv example.com 443 # аналог на Linux
|
||||
```
|
||||
|
||||
### 5. Load average и сетевые утилиты диагностики
|
||||
|
||||
```bash
|
||||
uptime # load average за 1/5/15 минут
|
||||
ping -c 4 8.8.8.8
|
||||
```
|
||||
|
||||
Load average — среднее число процессов, находящихся в состоянии "runnable" (выполняются или ждут CPU) либо в непрерываемом ожидании ввода-вывода (D-state), усреднённое за 1/5/15 минут. Число выше количества ядер CPU не всегда означает перегрузку процессора — часто это диск/сеть (процессы висят в D-state в ожидании I/O), поэтому load average нужно смотреть вместе с `top`/`vmstat`, а не изолированно.
|
||||
|
||||
### 6. Прогон полного пути запроса
|
||||
|
||||
Разобрать по шагам, что происходит при вводе `vk.com` в браузере и Enter — от DNS-резолвинга до отрисовки страницы (см. ответ в [QUESTIONS.md](QUESTIONS.md)) — и свериться с реальным выводом `curl -v` из пункта 3, где видны все те же этапы вживую (TCP connect, TLS handshake, HTTP-запрос/ответ).
|
||||
|
||||
## Что это даёт в разговоре с интервьюером
|
||||
|
||||
- Уверенное владение диагностическими утилитами (`dig`, `traceroute`, `curl -v`, `ss`) — не только знание теории, но и что конкретно смотреть в выводе команды.
|
||||
- Понимание TCP/UDP, HTTP/TLS не абстрактно, а с привязкой к реальному выводу `curl -v`/`openssl s_client`.
|
||||
- Способность разобрать сетевой путь запроса по шагам под живым вопросом на собеседовании.
|
||||
|
||||
## Как это ложится в легенду
|
||||
|
||||
Сетевая база — pet-проработка теории, не привязанная к конкретному эпизоду в компаниях (сети явно не выделены как отдельная строка стека ни в АО ТНИИС, ни в ОКБ СУХОЙ). На собеседовании это честно позиционируется как фундаментальные знания, которые нарабатывались параллельно с администрированием Linux-серверов (Astra/CentOS) в обеих ролях — там сетевая диагностика неизбежно возникала как часть повседневной работы, здесь она отдельно систематизирована и углублена.
|
||||
58
stack/networking/QUESTIONS.md
Normal file
58
stack/networking/QUESTIONS.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Вопросы: сети
|
||||
|
||||
Опираются на кейс: [CASE.md](CASE.md). Источник — почти целиком [VK Cloud.md](../../interview/VK%20Cloud.md), см. сводку в [../../interview/real-interviews.md](../../interview/real-interviews.md).
|
||||
|
||||
### В чём разница авторитетного и рекурсивного DNS?
|
||||
|
||||
Рекурсивный резолвер (обычно у провайдера или публичный, например 8.8.8.8) берёт на себя всю работу: получает запрос от клиента и сам обходит цепочку от корневых серверов до нужной зоны, кешируя результат. Авторитетный сервер — тот, у кого реально хранится зона конкретного домена; он не занимается рекурсией для чужих запросов, а просто отдаёт финальный, «истинный» ответ по своей зоне. Я это проверял через `dig +trace vk.com` — видно всю цепочку: root → `.com` TLD → авторитетный сервер зоны `vk.com`.
|
||||
|
||||
### Как Traceroute получает IP промежуточных хостов?
|
||||
|
||||
Отправляет пакеты с постепенно растущим TTL, начиная с 1. Каждый маршрутизатор на пути уменьшает TTL на 1; когда TTL достигает 0, маршрутизатор отбрасывает пакет и шлёт обратно ICMP Time Exceeded со своим IP-адресом в качестве отправителя. Так каждый следующий хоп «раскрывается» по очереди — TTL=1 покажет первый роутер, TTL=2 — второй и так далее, до момента, когда пакет наконец дойдёт до цели.
|
||||
|
||||
### Что такое vlan и vxlan?
|
||||
|
||||
VLAN (Virtual LAN) — логическое разделение одной физической L2-сети на несколько изолированных широковещательных доменов через тегирование кадров (802.1Q, VLAN ID в заголовке), без физического разделения проводов/свитчей. VXLAN — способ инкапсулировать L2-трафик внутрь UDP-пакетов поверх L3-сети, что снимает ограничение VLAN на 4096 идентификаторов (24-битный VNI даёт ~16 млн сегментов) и позволяет растягивать один логический L2-сегмент через маршрутизируемую сеть, в том числе между дата-центрами — характерно для облачных/контейнерных платформ, где нужно много изолированных виртуальных сетей поверх общей физической инфраструктуры.
|
||||
|
||||
### Как считается load average в Linux?
|
||||
|
||||
Это скользящее экспоненциально взвешенное среднее числа процессов в состоянии "runnable" (готовы выполняться или уже выполняются) плюс процессов в непрерываемом ожидании ввода-вывода (D-state), усреднённое за интервалы 1/5/15 минут. Важный нюанс: число выше количества ядер CPU не автоматически значит «процессор перегружен» — часто это диск или сеть (много процессов ждут I/O в D-state), поэтому load average нужно интерпретировать вместе с `top`/`vmstat`/`iostat`, а не как самостоятельный показатель нагрузки CPU.
|
||||
|
||||
### Что такое curl -v? Чем отличается от wget?
|
||||
|
||||
`curl -v` — verbose-режим curl, показывает весь процесс запроса пошагово: разрешение DNS, установку TCP-соединения, TLS handshake (если HTTPS), отправленные и полученные заголовки. `wget` — тоже инструмент для HTTP(S)/FTP-запросов из терминала, но исторически ориентирован на скачивание файлов (умеет рекурсивно скачивать по ссылкам, докачивать прерванную закачку из коробки), тогда как `curl` изначально заточен под гибкую работу с самим протоколом (произвольные методы, заголовки, тело запроса) и чаще используется для отладки API и HTTP-взаимодействия, а не просто для сохранения файла на диск.
|
||||
|
||||
### Как работают HTTP/S и TLS/SSL, зачем нужны? Методы HTTP?
|
||||
|
||||
HTTP — прикладной протокол запрос-ответ поверх TCP: клиент отправляет метод + путь + заголовки (+ тело), сервер отвечает статус-кодом + заголовками (+ телом). HTTPS — тот же HTTP, но поверх TLS-соединения: сначала происходит TLS handshake (обмен сертификатами, согласование шифров, выработка сессионного ключа), и уже внутри зашифрованного канала идёт обычный HTTP-обмен — это защищает от перехвата и подмены данных по пути. Методы: GET (получить ресурс, без побочных эффектов), POST (создать/отправить данные), PUT (полностью заменить ресурс), PATCH (частично обновить), DELETE (удалить). Проверял вживую через `curl -v https://vk.com` — там виден отдельно TCP connect, отдельно TLS handshake, отдельно сам HTTP-запрос/ответ.
|
||||
|
||||
### Что такое TCP/UDP и как устанавливается соединение?
|
||||
|
||||
TCP — соединение-ориентированный протокол с гарантией доставки и порядка байт: соединение устанавливается через three-way handshake (SYN → SYN-ACK → ACK), дальше идёт передача с подтверждениями (ACK) и повторной отправкой потерянных сегментов. UDP — протокол без установления соединения и без гарантий: пакеты (датаграммы) отправляются «как есть», без подтверждения доставки и порядка — используется там, где важна скорость больше надёжности (стриминг, DNS-запросы, некоторые виды мониторинга).
|
||||
|
||||
### Что такое MTU?
|
||||
|
||||
Maximum Transmission Unit — максимальный размер пакета (в байтах), который может быть передан за один раз без фрагментации на конкретном сетевом интерфейсе/канале. Стандартный Ethernet MTU — 1500 байт. Если пакет больше MTU канала, он либо фрагментируется (IPv4), либо отбрасывается с ICMP «Fragmentation needed» при выставленном флаге DF (актуально, например, при туннелировании — VPN/VXLAN добавляют заголовки поверх, съедая часть MTU, и это частая причина странных обрывов соединений именно на больших пакетах).
|
||||
|
||||
### Что такое пакет, кадр, фрейм?
|
||||
|
||||
Кадр (frame) — единица данных на канальном уровне (L2), с MAC-адресами отправителя/получателя (Ethernet-кадр). Пакет (packet) — единица данных на сетевом уровне (L3), с IP-адресами, инкапсулируется внутрь кадра при передаче по конкретному каналу. Термин «фрейм» обычно синоним кадра (тот же L2). Ha практике: один и тот же IP-пакет при прохождении через разные сетевые сегменты каждый раз заново упаковывается в новый кадр L2 (например, Ethernet-кадр в локальной сети, PPP-кадр на другом участке), а сам пакет остаётся неизменным до конечного получателя.
|
||||
|
||||
### На каком протоколе работает ping и на каком уровне модели OSI?
|
||||
|
||||
Ping использует ICMP (Internet Control Message Protocol) — протокол сетевого уровня (L3 в модели OSI), формально «поверх» IP, но не транспортный протокол в привычном смысле (нет портов, как у TCP/UDP). Отправляет Echo Request и ждёт Echo Reply от целевого хоста.
|
||||
|
||||
### Какая есть динамическая маршрутизация, что это?
|
||||
|
||||
Динамическая маршрутизация — протоколы, по которым маршрутизаторы автоматически обмениваются информацией о доступных сетях и строят/обновляют таблицы маршрутизации без ручной настройки каждого маршрута. Основные: OSPF и IS-IS (link-state протоколы внутри автономной системы, строят полную карту топологии), BGP (протокол между автономными системами — то, на чём фактически держится маршрутизация в интернете), RIP (более старый, distance-vector, для небольших сетей).
|
||||
|
||||
### Ввожу vk.com и нажимаю Enter — опиши весь путь до открытия страницы
|
||||
|
||||
1. Браузер проверяет DNS-кеш; если пусто — идёт запрос к рекурсивному резолверу, который резолвит домен в IP через цепочку root → TLD → authoritative-сервер.
|
||||
2. Браузер устанавливает TCP-соединение с полученным IP на порт 443 (three-way handshake: SYN → SYN-ACK → ACK).
|
||||
3. Поверх TCP — TLS handshake: обмен сертификатами, проверка цепочки доверия, согласование шифров, выработка сессионного ключа.
|
||||
4. Внутри зашифрованного канала браузер отправляет HTTP-запрос (GET /), сервер отвечает статус-кодом и телом (HTML).
|
||||
5. Браузер парсит HTML, находит ссылки на дополнительные ресурсы (CSS, JS, картинки) и повторяет для них аналогичный цикл (возможно, переиспользуя уже установленное TCP/TLS-соединение через keep-alive/HTTP2 multiplexing).
|
||||
6. Браузер рендерит DOM, применяет CSS, выполняет JS — страница становится видимой и интерактивной.
|
||||
|
||||
Каждый из этих этапов я лично видел раздельно через `curl -v` — команда явно печатает моменты TCP connect, TLS handshake и HTTP-обмена по отдельности.
|
||||
Reference in New Issue
Block a user