Найти в Дзене
bashninja | DevOps & SRE ⚙️

TCP/IP стек простыми словами: как интернет реально работает

TCP/IP — это 4 уровня, которые упаковывают данные друг в друга как матрёшки. Смотри, какая штука: [Приложение: HTTP]
[Транспорт: TCP или UDP]
[Интернет: IP]
[Канальный: Ethernet/Wi-Fi] Каждый слой добавляет свои заголовки и свои правила. Мини-проверки: ip link # интерфейсы и их состояние
ip addr # адреса на интерфейсах
ip neigh # ARP/ND-таблица
ping -c 3 192.168.1.1 # сосед/шлюз жив? Проверки: 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) TCP — с установкой соединения, порядком, повторами, окнами.
UDP — «просто отправь». Быстро, без гарантий. Дальше — данные, подтверждения, управление скоростью (окна, SACK, медленный старт). Короткие команды: ss -tuna | grep :443 # кто слуш
Оглавление
Хочешь понимать, почему «пинг есть, а сайт не открывается»?
Вот как это работает и где смотреть, когда ломается.
Хочешь понимать, почему «пинг есть, а сайт не открывается»? Вот как это работает и где смотреть, когда ломается.

Карта местности

TCP/IP — это 4 уровня, которые упаковывают данные друг в друга как матрёшки.

  1. Канальный (Link): провод/радио. Ethernet, Wi-Fi, VLAN, ARP.
  2. Интернет (IP): адреса и маршрутизация. IPv4/IPv6, ICMP.
  3. Транспорт (TCP/UDP): порты и надёжность.
  4. Прикладной: протоколы приложений — 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 жмёт руки

  1. Клиент → Сервер: SYN (давай общаться).
  2. Сервер → Клиент: SYN+ACK (ок).
  3. Клиент → Сервер: 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

Так что произошло вот что:

  1. DNS. Твой резолвер спрашивает IP домена (обычно UDP/53). Если ответ большой или нужна надёжность — TCP/53.
  2. TCP-рукопожатие с сервером на 443.
  3. TLS-рукопожатие. Обмен ключами, шифры, SNI, сертификат.
  4. 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

Ментальная модель, которая спасает время

Думай «снизу вверх»:

  1. Линк жив? (линк ап, ARP/ND ок, корректный VLAN, MTU)
  2. IP видит мир? (маршрут, шлюз, ICMP ошибки)
  3. Транспорт держится? (порт открыт, рукопожатие, ретрансмиссии)
  4. Приложение отвечает? (DNS, HTTP-коды, TLS)

Если на одном уровне всё плохо, выше обычно тоже плоховато. Так что проверяй слой за слоем.

Итоги

  • Стек — это уровни с чёткими задачами.
  • Разбор проблем — по слоям, без магии.
  • Есть простой набор команд, который закрывает 80% кейсов.

Вот почему это важно: понимая, где искать, ты тратишь минуты, а не часы.