Стек TCP/IP и маршрутизация пакетов
Четыре уровня TCP/IP и их соответствие OSI, отличие TCP от UDP, установление соединения, таблица маршрутизации, работа шлюза и NAT, инкапсуляция данных.
Модель OSI — теоретическая схема, а работает сеть по стеку TCP/IP. Четыре уровня вместо семи, зато это реальные протоколы, которые вы увидите в Wireshark при выполнении лабораторной.
| Уровень TCP/IP | Соответствие OSI | Протоколы | Единица данных |
|---|---|---|---|
| Прикладной | 7, 6, 5 | HTTP, DNS, FTP, SMTP, SSH | Данные |
| Транспортный | 4 | TCP, UDP | Сегмент / датаграмма |
| Межсетевой | 3 | IP, ICMP, ARP | Пакет |
| Канальный | 2, 1 | Ethernet, Wi-Fi, PPP | Кадр |
Инкапсуляция
Данные приложения
→ + TCP-заголовок (порты, номера) = сегмент
→ + IP-заголовок (адреса, TTL) = пакет
→ + Ethernet-заголовок (MAC) и хвост = кадр
→ биты в среду передачи
На приёмной стороне заголовки снимаются в обратном порядке
TCP или UDP
| Признак | TCP | UDP |
|---|---|---|
| Соединение | Устанавливается | Нет, отправил и забыл |
| Доставка | Гарантирована, с повторами | Не гарантирована |
| Порядок | Восстанавливается | Как придёт |
| Заголовок | 20 байт и больше | 8 байт |
| Контроль перегрузки | Есть | Нет |
| Где применяют | Веб, почта, файлы, БД | DNS, видеозвонки, игры, стриминг |
Выбор объясняется просто: потерянный байт файла недопустим, а потерянный кадр видеозвонка незаметен — зато задержка на повторную передачу разрушила бы разговор.
Установление и разрыв соединения TCP
Тройное рукопожатие:
Клиент → SYN (seq = x) → Сервер
Клиент ← SYN-ACK (seq = y, ack=x+1) ← Сервер
Клиент → ACK (ack = y+1) → Сервер
Соединение установлено
Завершение (четыре шага):
FIN → , ← ACK , ← FIN , ACK →
Маршрутизация
Получив пакет, маршрутизатор сравнивает адрес назначения с таблицей маршрутов и выбирает запись с самой длинной совпадающей маской — правило самого точного совпадения. Если ничего не подошло, пакет уходит по маршруту по умолчанию 0.0.0.0/0.
Сеть назначения Маска Шлюз Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.1.1 eth0 10
192.168.1.0 255.255.255.0 0.0.0.0 eth0 0
10.0.0.0 255.255.255.0 192.168.1.254 eth0 20
127.0.0.0 255.0.0.0 0.0.0.0 lo 0
Пакет на 10.0.0.5 → совпали /8 (default) и /24 (10.0.0.0)
→ выбирается /24, шлюз 192.168.1.254
- Шлюз 0.0.0.0 означает, что сеть подключена напрямую и пересылка не нужна.
- Метрика — стоимость маршрута, при равных префиксах выбирается меньшая.
- TTL уменьшается на единицу каждым маршрутизатором; при нуле пакет отбрасывается и отправителю уходит ICMP-сообщение. На этом работает traceroute.
Статическая и динамическая маршрутизация
| Статическая | Динамическая | |
|---|---|---|
| Настройка | Вручную | Протоколом RIP, OSPF, BGP |
| Реакция на обрыв | Нет, нужна правка | Автоматический пересчёт |
| Нагрузка | Нулевая | Обмен служебными пакетами |
| Применение | Малые сети, курсовая | Провайдеры, крупные сети |
NAT
Частные адреса (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) в интернете не маршрутизируются. NAT подменяет адрес отправителя на публичный адрес шлюза и запоминает соответствие, чтобы вернуть ответ нужному хосту. При PAT различение идёт по номеру порта, поэтому за одним публичным адресом живут сотни устройств.
Исходящий: 192.168.1.5:51234 → 93.184.216.34:443
После NAT: 203.0.113.7:40001 → 93.184.216.34:443
Таблица трансляций шлюза:
203.0.113.7:40001 ↔ 192.168.1.5:51234
Диагностика для лабораторной
ping 8.8.8.8 # доступность узла и время отклика
tracert 8.8.8.8 # traceroute в Linux/macOS — путь пакета по узлам
ipconfig /all # ifconfig или ip a в Linux
route print # ip route — таблица маршрутизации
netstat -an # ss -tuln — открытые порты и соединения
nslookup example.com # dig — разрешение имени в адрес
Частые вопросы
Почему в TCP/IP четыре уровня, а в OSI семь?
OSI создавалась как универсальная теоретическая модель, TCP/IP вырос из практики. Прикладной уровень TCP/IP вобрал в себя три верхних уровня OSI, а канальный — два нижних.
Что произойдёт, если в таблице нет подходящего маршрута и нет шлюза по умолчанию?
Пакет отбрасывается, отправителю возвращается ICMP «Destination unreachable». Именно это видно, когда узел «не пингуется» при неверно заданном шлюзе.
Зачем нужен ARP, если есть IP-адреса?
Кадр внутри сегмента доставляется по MAC-адресу. ARP выясняет, какому MAC соответствует нужный IP, — без этого пакет не покинет локальную сеть.