Стек TCP/IP: полное погружение в протоколы передачи данных
TCP/IP — это не два протокола, а целое семейство, которое обеспечивает работу интернета и большинства локальных сетей. Понимание того, как пакеты проходят от приложения до физического кабеля и обратно — ключевой навык для любого сетевого специалиста. В этой статье мы разберём каждый уровень модели TCP/IP, ключевые протоколы и посмотрим реальные дампы трафика.
Модель TCP/IP vs OSI
В отличие от теоретической модели OSI (7 уровней), TCP/IP имеет 4 уровня, которые отражают реальные протоколы:
- Прикладной уровень — HTTP, HTTPS, FTP, SSH, DNS, SMTP
- Транспортный уровень — TCP, UDP
- Межсетевой уровень — IP (IPv4/IPv6), ICMP, ARP
- Уровень сетевых интерфейсов — Ethernet, Wi-Fi, DSL,光纤
Уровень сетевых интерфейсов: Ethernet и MAC-адреса
Этот уровень отвечает за передачу кадров между устройствами в одной физической сети. Ethernet-кадр содержит MAC-адреса источника и назначения, тип протокола (например, 0x0800 для IPv4) и CRC для проверки целостности.
Пример Ethernet-кадра (упрощённо): ┌─────────┬─────────┬─────────┬─────────┬─────────┐ │ MAC dest│ MAC src │ Type │ Payload│ CRC │ │ 6 bytes │ 6 bytes │ 2 bytes │ 46-1500 │ 4 bytes │ └─────────┴─────────┴─────────┴─────────┴─────────┘
Межсетевой уровень: IP, маршрутизация и фрагментация
IP-пакет содержит IP-адреса источника и назначения. В отличие от MAC-адресов, IP-адреса могут быть маршрутизируемыми между разными сетями. Важные поля IPv4-заголовка:
- Version (4 бита) — 4 для IPv4, 6 для IPv6
- TTL (Time to Live) — количество хопов до отбрасывания пакета
- Protocol — тип протокола выше (6=TCP, 17=UDP, 1=ICMP)
- Source/Destination IP — 32 бита каждый
ICMP — диагностический протокол
ICMP используется для утилит ping и traceroute. Типы сообщений: Echo Request (8), Echo Reply (0), Destination Unreachable (3), Time Exceeded (11).
ARP — от IP к MAC
ARP (Address Resolution Protocol) позволяет узнать MAC-адрес по IP-адресу внутри одной сети. Когда компьютер хочет отправить пакет, он проверяет ARP-кэш. Если записи нет, отправляется ARP-запрос (broadcast).
# Просмотр ARP-таблицы в Windows/Linux arp -a
Транспортный уровень: TCP vs UDP
TCP — надёжная доставка с установкой соединения
TCP обеспечивает гарантированную доставку, контроль порядка пакетов, устранение дубликатов и контроль перегрузки. Процесс установки соединения — трёхэтапное рукопожатие (Three-Way Handshake):
Клиент --- SYN (seq=x) ---> Сервер Клиент <--- SYN+ACK (seq=y, ack=x+1) --- Сервер Клиент --- ACK (ack=y+1) ---> Сервер
Основные поля TCP-сегмента: Source Port, Destination Port, Sequence Number, Acknowledgment Number, Flags (SYN, ACK, FIN, RST, PSH, URG), Window Size.
UDP — быстрая, но ненадёжная доставка
UDP не устанавливает соединение, не подтверждает получение и не восстанавливает потери. Зато он быстрее и имеет меньшие накладные расходы (8 байт заголовка против 20+ у TCP). Используется в DNS, VoIP, видеоконференциях, потоковом видео, DHCP.
Прикладной уровень: HTTP/HTTPS, DNS
DNS — преобразование имён в IP
DNS работает поверх UDP (иногда TCP для больших ответов). Рекурсивный запрос: ваш компьютер спрашивает DNS-резолвер, тот идёт к корневым серверам, потом к TLD-серверам (.ru, .com), потом к авторитативным. Кэширование на всех уровнях ускоряет работу.
# Проверка DNS nslookup setevyetehnologii.ru dig setevyetehnologii.ru
HTTP/HTTPS — передача веб-контента
HTTP — текстовый протокол поверх TCP (порт 80). HTTPS добавляет шифрование TLS поверх TCP (порт 443). Пример HTTP-запроса:
GET /index.php HTTP/1.1 Host: setevyetehnologii.ru User-Agent: Mozilla/5.0 Accept: text/html
Практика: анализ трафика в Wireshark
Запустите Wireshark на интерфейсе, выполните ping google.com и посмотрите:
- Ethernet-кадр — MAC-адреса вашего компьютера и шлюза
- IP-пакет — TTL, адреса
- ICMP-пакет — Type 8 (Echo Request) и Type 0 (Echo Reply)
Откройте любой сайт — увидите TCP Three-Way Handshake, затем HTTP-запрос и ответ, затем TCP FIN для закрытия соединения.
Частые проблемы и диагностика
- Потеря пакетов — проверьте tcp.analysis.lost_segment в Wireshark, смотрите на retransmission
- Высокая задержка — tcp.time_delta покажет интервалы между сегментами
- Проблемы с TCP Window — если window size падает до нуля, приложение не успевает читать данные
- ARP-шторм — много ARP-запросов может указывать на петлю или неисправность сетевой карты
Заключение: TCP/IP — это фундамент, на котором построены все современные сети. Понимание того, как пакеты инкапсулируются, маршрутизируются и доставляются, поможет вам быстро находить неисправности и проектировать эффективные сети. Держите Wireshark под рукой и анализируйте реальный трафик — это лучший способ обучения.