Карта местности
TCP/IP — это 4 уровня, которые упаковывают данные друг в друга как матрёшки.
- Канальный (Link): провод/радио. Ethernet, Wi-Fi, VLAN, ARP.
- Интернет (IP): адреса и маршрутизация. IPv4/IPv6, ICMP.
- Транспорт (TCP/UDP): порты и надёжность.
- Прикладной: протоколы приложений — HTTP, DNS, SMTP и т. д.
Смотри, какая штука:
[Приложение: HTTP]
↓
[Транспорт: TCP или UDP]
↓
[Интернет: IP]
↓
[Канальный: Ethernet/Wi-Fi]
Каждый слой добавляет свои заголовки и свои правила.
1) Канальный уровень: «как дойти до соседей»
- MAC-адреса. Устройства узнают друг друга в локалке.
- ARP/ND. «Кто такой 192.168.1.10? Дайте MAC».
- MTU. Максимальный размер фрейма. Стандартно 1500 на Ethernet.
- Типичные беды: неверный VLAN, дуплекс/скорость, битая витая пара.
Мини-проверки:
ip link # интерфейсы и их состояние
ip addr # адреса на интерфейсах
ip neigh # ARP/ND-таблица
ping -c 3 192.168.1.1 # сосед/шлюз жив?
2) IP-уровень: «как дойти до чужих»
- IPv4 и IPv6. Адреса и маршруты.
- Маршрутизация. Какой следующий хоп к цели.
- ICMP. Служебные сообщения (TTL истёк, недоступно и т. п.).
- NAT. Подмена адресов на границе сети.
Проверки:
ip route # таблица маршрутов
traceroute example.com # путь пакета (Linux/macOS)
mtr -rw example.com # путь + потери в реальном времени
ping -c 3 -M do -s 1472 8.8.8.8 # оценка MTU (IPv4, DF=do)
3) Транспорт: TCP против UDP
TCP — с установкой соединения, порядком, повторами, окнами.
UDP — «просто отправь». Быстро, без гарантий.
Как TCP жмёт руки
- Клиент → Сервер: SYN (давай общаться).
- Сервер → Клиент: SYN+ACK (ок).
- Клиент → Сервер: ACK (поехали).
Дальше — данные, подтверждения, управление скоростью (окна, SACK, медленный старт).
Короткие команды:
ss -tuna | grep :443 # кто слушает/с кем соединены
nc -vz example.com 443 # открывается ли порт
tcpdump -n host example.com and port 443 # увидеть SYN/ACK и пакеты
4) Прикладной уровень: то, ради чего всё
Примеры: HTTP/HTTPS, DNS, SMTP, SSH.
Они едут поверх TCP или UDP и решают свои задачи (запросы/ответы, форматы, кеши).
Жизнь одного клика: https://example.com
Так что произошло вот что:
- DNS. Твой резолвер спрашивает IP домена (обычно UDP/53). Если ответ большой или нужна надёжность — TCP/53.
- TCP-рукопожатие с сервером на 443.
- TLS-рукопожатие. Обмен ключами, шифры, SNI, сертификат.
- HTTP/2 или HTTP/3. Запрос GET / и ответы.HTTP/2 идёт поверх TCP+TLS.
HTTP/3 идёт поверх QUIC (это UDP+TLS, упрощённо говоря).
Полезные проверки:
dig +short example.com # DNS A/AAAA
dig +short A example.com ; dig +short AAAA example.com
curl -I https://example.com # заголовки ответа
curl -vkI https://example.com # подробности TLS и причины ошибок
Где обычно ломается
Симптом: «Пинг есть, сайт не открывается».
Причины: 443 закрыт на фаерволе, TLS обрывается, прокси вмешивается, MTU ломает большие пакеты.
Симптом: «Медленно качает».
Причины: потери → ретрансмиссии, маленькое окно, bufferbloat на роутере.
Симптом: «Иногда рвётся VPN/сайт».
Причины: неверный MSS/PMTUD, фрагментация, асимметричная маршрутизация, NAT-таблица переполнена.
Симптом: «DNS не отвечает».
Причины: недоступен резолвер, блок UDP/53, только TCP/53 проходит, капча у провайдера.
Быстрые действия:
# порт и доступность
nc -vz example.com 443
# MTU-проблемы (IPv4)
ping -M do -s 1472 1.1.1.1
# DNS
dig @1.1.1.1 example.com
# трассировка
mtr -rw example.com
Важные поля, которые помогают понимать логи
IP:
- TTL — сколько «прыжков» осталось; маленький TTL на входе — сервер близко.
- DF (Don’t Fragment) — запрещает фрагментацию; важен для PMTUD.
- DSCP — подсказка для приоритета трафика.
TCP:
- Flags: SYN/ACK/FIN/RST — состояние соединения.
- Seq/Ack — номера байтов, помогают ловить потери.
- Window/WS/SACK — управление скоростью и восстановление после потерь.
- MSS — максимальный размер сегмента; связан с MTU.
Если видишь много RST — кто-то активно рвёт соединения (часто фаервол/прокси).
NAT в двух словах
- SNAT/PAT: много внутренних адресов выходят в интернет под одним публичным. Порты меняются.
- DNAT/порт-проброс: входящий порт на внешнем адресе пересылается на внутренний сервер.
- Stateful-фаервол: помнит «состояние» соединений и пускает ответный трафик.
Итог: из интернета к вашему серверу за NAT не попасть без DNAT/проброса/порт-форварда + правил фаервола.
IPv6 коротко и по делу
- Адреса длиннее, подсети обычно /64.
- SLAAC и ND вместо ARP и DHCPv4 (хотя DHCPv6 бывает).
- NAT почти не используют (NAT66 — редкость).
- Фаервол всё равно нужен.
- Частая проблема — IPv6 включён, но ничего не фильтруется/не маршрутизируется. Тогда браузер пытается по v6 и «зависает».
Проверки:
ip -6 addr
ping6 -c 3 ipv6.google.com
dig AAAA example.com
Мини-шпаргалка: чем смотреть сеть:
ip addr / ip route # адреса и маршруты
ip neigh # ARP/ND
ping / ping6 # жив ли хост
traceroute / mtr # путь и потери
dig / nslookup # DNS
nc -vz host port # проверка порта
curl -v https://host # HTTP/TLS детали
openssl s_client -connect host:443 -servername host # TLS рукопожатие
ss -tuna # сокеты и порты
tcpdump -n -i eth0 port 443 # пакетный сниффер
iperf3 -c server # реальная пропускная способность
Частые быстрые рецепты
Подобрать рабочий MTU для пути (IPv4):
for s in 1472 1464 1452 1440 1432 1400; do ping -c1 -M do -s $s 8.8.8.8 && echo "ok $s" && break; done
Понять, кто режет 443:
nc -vz example.com 443
tcpdump -n host example.com and port 443
# если SYN ушёл, но SYN+ACK не вернулся — ищи на пути/фаерволе
Проверить SNI/сертификат:
openssl s_client -connect example.com:443 -servername example.com </dev/null | openssl x509 -noout -subject -issuer -dates
Отладить DNS «через голову» системного резолвера:
dig @1.1.1.1 +nocmd example.com any +noall +answer
Ментальная модель, которая спасает время
Думай «снизу вверх»:
- Линк жив? (линк ап, ARP/ND ок, корректный VLAN, MTU)
- IP видит мир? (маршрут, шлюз, ICMP ошибки)
- Транспорт держится? (порт открыт, рукопожатие, ретрансмиссии)
- Приложение отвечает? (DNS, HTTP-коды, TLS)
Если на одном уровне всё плохо, выше обычно тоже плоховато. Так что проверяй слой за слоем.
Итоги
- Стек — это уровни с чёткими задачами.
- Разбор проблем — по слоям, без магии.
- Есть простой набор команд, который закрывает 80% кейсов.
Вот почему это важно: понимая, где искать, ты тратишь минуты, а не часы.