ITED
bootcamp
Лекция 10.1 - Транспортный и прикладной уровни TCP/IP
Лекция объединяет закрепление материала по транспортному уровню (TCP и UDP с занятий 9 и 10) и введение в протоколы прикладного уровня модели TCP/IP. Вы систематизируете, когда и зачем используются TCP и UDP, и узнаете, какие прикладные протоколы работают поверх них в интернете.
Транспортный уровень располагается между сетевым (IP) и прикладным уровнями. Он обеспечивает доставку данных между приложениями на разных узлах, используя порты как адреса приложений. В стеке TCP/IP основными протоколами этого уровня являются TCP и UDP.
На одном узле может работать много сетевых приложений одновременно. Транспортный уровень использует номера портов (16 бит, от 0 до 65535), чтобы доставить данные нужному процессу. Серверные службы обычно слушают хорошо известные порты (0-1023); клиентские порты назначаются ОС динамически из диапазона кратковременных портов. В заголовке TCP или UDP указываются порт отправителя и порт получателя; пара IP-адрес и порт образует сокет.
TCP (Transmission Control Protocol, RFC 793, обновлён RFC 9293) предоставляет приложению сервис надёжной передачи потока байт. Данные от приложения разбиваются на сегменты; на стороне получателя сегменты собираются обратно в поток. Порядок байт сохраняется, потери компенсируются повторной передачей по таймеру при отсутствии подтверждения.
Установка соединения - трёхкратное рукопожатие: клиент отправляет SYN с начальным номером (ISN), сервер отвечает SYN+ACK и своим ISN, клиент отправляет ACK. Разрыв - по флагу FIN с каждой стороны или принудительный RST. В заголовке TCP: порты отправителя и получателя, порядковый номер, номер подтверждения, смещение данных (data offset), флаги (SYN, ACK, FIN, RST и др.), размер окна, контрольная сумма, опции (MSS, SACK, window scale).
Три сегмента устанавливают соединение: (1) клиент - SYN и свой ISN; (2) сервер - SYN, ACK и свой ISN, подтверждая получение первого сегмента; (3) клиент - ACK. После этого обе стороны знают начальные номера байт и могут передавать данные. Так синхронизируются счётчики и согласуются опции (MSS и др.). При разрыве каждая сторона отправляет FIN и получает ACK; при аварийном сбросе достаточно одного сегмента с RST. В Wireshark установку соединения легко найти по фильтру tcp.flags.syn==1 и последовательности из трёх пакетов.
Для эффективности используется скользящее окно - можно отправлять несколько сегментов без ожидания ACK на каждый. Управление потоком - через поле Window в заголовке (сколько байт готов принять получатель). Управление перегрузкой - окно перегрузки на стороне отправителя (AIMD, медленный старт). Итоговый объём неподтверждённых данных ограничен минимумом из окна управления потоком и окна перегрузки.
Флаги TCP: SYN (установка соединения), ACK (значимо поле подтверждения), FIN (корректное закрытие), RST (сброс соединения), PSH (передать данные приложению), URG (срочные данные; редко используется). Опции: MSS (максимальный размер сегмента), Window scale (масштаб окна для высокоскоростных каналов), SACK (выборочное подтверждение), Timestamps (для оценки RTT). Заголовок имеет переменную длину; поле Data offset указывает границу заголовка и данных.
UDP (User Datagram Protocol) - простой протокол транспортного уровня. Он передаёт отдельные сообщения - дейтаграммы - без установки соединения и без гарантий доставки и порядка. Заголовок UDP минимален: порт отправителя, порт получателя, длина и контрольная сумма. Приложение само решает, как реагировать на потери и перестановки пакетов.
Заголовок UDP занимает 8 байт. Поля: Source Port (порт отправителя), Destination Port (порт получателя), Length (длина дейтаграммы - заголовок плюс данные в байтах), Checksum (контрольная сумма; может быть нулём для IPv4). В отличие от TCP, нет порядкового номера, номера подтверждения, флагов и окна. Поэтому анализ UDP-трафика в Wireshark показывает только порты, длину и прикладные данные. Многие прикладные протоколы поверх UDP сами добавляют идентификаторы запросов для сопоставления ответов.
TCP выбирают, когда нужна гарантированная доставка и порядок: веб-страницы (HTTP/HTTPS), передача файлов (FTP), почта (SMTP, IMAP, POP3), удалённый доступ (SSH). UDP - когда важна минимальная задержка или приложение само управляет повторными запросами: DNS-запросы, голос и видео (VoIP, стриминг), телеметрия, онлайн-игры. По объёму трафика в интернете доминирует TCP; по количеству пакетов UDP также значим за счёт DNS и медиа.
Для загрузки страницы, файла или отправки письма потеря даже одного байта недопустима - нужен TCP. Для голоса или видео потеря нескольких пакетов может быть незаметна или компенсирована кодеком; задержка критична - часто используют UDP или специализированный транспорт. DNS-запрос обычно умещается в один UDP-пакет; при необходимости повторяют запрос. Игры и телеметрия часто используют UDP с собственной логикой повторной отправки только важных событий. Понимание этой разницы помогает при настройке файрволов и диагностике.
TCP обеспечивает надёжный упорядоченный поток байт с установкой соединения, подтверждениями, скользящим окном и управлением потоком и перегрузкой. UDP - простые дейтаграммы без соединения и без встроенной надёжности. Оба используют порты для адресации приложений. На занятиях 9 и 10 вы разбирали заголовки TCP и UDP в Wireshark, установку и разрыв соединения и механизмы окна. Эта лекция закрепляет эти темы и переходит к протоколам, которые работают поверх транспортного уровня.
Прикладной уровень модели TCP/IP - это протоколы, которые непосредственно используют приложения для обмена данными. Они работают поверх транспортного уровня: чаще всего поверх TCP или UDP. Каждый прикладной протокол определяет формат сообщений, порты по умолчанию и семантику запросов и ответов.
Прикладной протокол задаёт, какие сообщения отправлять (запросы, команды, данные) и как их интерпретировать (ответы, коды ошибок, форматы). Порты позволяют на одном узле одновременно работать многим службам: веб-сервер на 80/443, почтовый на 25, SSH на 22. В захвате трафика по порту и по содержимому первого обмена можно определить протокол и при необходимости применить декодер (например, в Wireshark). Стандартные порты описаны в документах IANA; нестандартные порты допустимы по соглашению между клиентом и сервером.
HTTP (HyperText Transfer Protocol) - основной протокол веба. Клиент (браузер или приложение) отправляет запрос на ресурс по URL; сервер возвращает ответ с телом (HTML, изображения, JSON и т.д.) и метаданными. Классический режим - запрос-ответ по одному соединению; современные версии поддерживают постоянные соединения и мультиплексирование.
Основные методы HTTP: GET (получить ресурс), POST (отправить данные, создание или обработка), PUT (заменить ресурс), DELETE (удалить), PATCH (частичное обновление). Коды ответа: 2xx - успех (200 OK, 201 Created), 3xx - перенаправление (301, 302), 4xx - ошибка клиента (400 Bad Request, 404 Not Found), 5xx - ошибка сервера (500 Internal Server Error). Заголовки задают тип содержимого (Content-Type), длину, кэширование и управление соединением. Эти элементы используются и в REST API поверх HTTP.
HTTPS - это HTTP поверх криптографического протокола TLS (ранее SSL). Данные между клиентом и сервером шифруются; обеспечиваются аутентификация сервера (и при необходимости клиента) и целостность. Порт по умолчанию 443 (TCP). Сертификаты и цепочки доверия позволяют убедиться, что соединение установлено с нужным сервером. HTTPS стал стандартом для веб-сайтов и API.
Помимо HTTPS (TLS поверх HTTP) шифрование и аутентификация применяются и в других протоколах: IMAPS, POP3S, LDAPS (почта и каталоги по TLS), SFTP и SCP (файлы через SSH). Нешифрованные протоколы (HTTP, FTP, Telnet, нешифрованная почта) уязвимы к перехвату и подмене. При настройке серверов рекомендуется отключать небезопасные варианты или допускать их только в изолированных сетях. Сертификаты и доверенные центры сертификации (CA) лежат в основе проверки подлинности сервера в TLS.
SMTP (Simple Mail Transfer Protocol) используется для отправки почты между серверами и от клиента к серверу (порт 25 или 587 с шифрованием). POP3 (Post Office Protocol) - для загрузки почты с сервера на устройство пользователя (порт 110, с шифрованием 995). IMAP (Internet Message Access Protocol) - для доступа к почте на сервере с возможностью работы с папками, поиска и синхронизации (порт 143, с шифрованием 993). Все три работают поверх TCP.
Отправка письма: клиент подключается к SMTP-серверу (своему или провайдера), аутентифицируется при необходимости (порт 587 с STARTTLS), передаёт отправителя, получателей и тело. Доставка между серверами - по SMTP (порт 25). Получение: клиент подключается к POP3 или IMAP к серверу, где хранится почтовый ящик. POP3 забирает письма на устройство; IMAP оставляет копии на сервере и синхронизирует папки. Для безопасной передачи используют TLS поверх того же порта или отдельные порты (995, 993).
FTP (File Transfer Protocol) - классический протокол передачи файлов по TCP (порты 20 для данных, 21 для управления). Поддерживает аутентификацию и список каталогов. TFTP (Trivial FTP) - упрощённый протокол поверх UDP (порт 69), без аутентификации; применяется для загрузки образов и конфигураций в сетевом оборудовании. SFTP - передача файлов через защищённый канал SSH (обычно порт 22), с шифрованием и целостностью.
FTP удобен для массовой выгрузки и загрузки на выделенных серверах; в современных средах часто заменяют на SFTP или передачу по HTTPS (веб-интерфейс или API). TFTP нужен там, где нет полноценной ОС и стека TCP - загрузка прошивок в маршрутизаторы, тонкие клиенты. SFTP объединяет доступ по SSH и передачу файлов - один порт 22, одна аутентификация, шифрование всего трафика. При настройке файрвола важно открыть нужные порты под выбранный протокол.
SSH (Secure Shell) - протокол удалённого входа и выполнения команд с шифрованием (порт 22, TCP). Заменяет небезопасный Telnet. Telnet (порт 23, TCP) передаёт данные в открытом виде; в производственных сетях не рекомендуется. RDP (Remote Desktop Protocol) - протокол удалённого рабочего стола Windows (порт 3389, TCP); обеспечивает графический сеанс и передачу периферии. Для администрирования серверов и сетевых устройств де-факто стандарт - SSH.
Telnet и нешифрованный FTP передают пароли и данные в открытом виде - при перехвате трафика злоумышленник получает полный доступ. SSH использует шифрование и проверку ключей; пароль или ключ не передаётся в открытом виде. RDP при правильной настройке может использовать TLS. В корпоративных сетях удалённый доступ обычно разрешён только по VPN и только по защищённым протоколам (SSH, RDP с шифрованием). Открытие Telnet и нешифрованного FTP в интернет считается недопустимым.
DNS (Domain Name System) преобразует доменные имена (например, example.com) в IP-адреса и обратно, а также хранит другие типы записей (MX для почты, TXT и т.д.). Запросы DNS обычно выполняются по UDP (порт 53); при большом ответе может использоваться TCP. Распределённая иерархическая база данных; кэширование на стороне клиента и резолвера снижает нагрузку и ускоряет ответы. Без DNS пользователям пришлось бы запоминать числовые IP-адреса.
Доменное имя имеет иерархию: корень, домены верхнего уровня (TLD), домены второго уровня и т.д. Запись A связывает имя с IPv4-адресом, AAAA - с IPv6. Запись MX указывает почтовые серверы для домена; PTR - обратное преобразование IP в имя. Резолвер запрашивает серверы DNS по цепочке от корня или использует кэш. DNSSEC добавляет криптографическую проверку подлинности ответов. Понимание DNS нужно для настройки доменов, почты и диагностики доступности сервисов.
SNMP (Simple Network Management Protocol) используется для мониторинга и управления сетевыми устройствами (маршрутизаторы, коммутаторы, серверы). Версии 1, 2c и 3; порты 161 (запросы) и 162 (трапы) по UDP. NTP (Network Time Protocol) - синхронизация времени между узлами (порт 123, UDP). Точное время важно для логов, сертификатов, распределённых систем и протоколов безопасности. Существует подмножество NTP - SNTP для простой синхронизации клиентов.
SNMP позволяет централизованно собирать метрики (загрузка интерфейсов, ошибки, температура) и менять конфигурацию устройств. Системы мониторинга (Zabbix, PRTG, LibreNMS) опрашивают устройства по SNMP и строят графики. NTP выравнивает часы всех узлов: без синхронизации времени трудно сопоставлять логи с разных серверов, а сертификаты и сессии могут работать некорректно. В типичной инфраструктуре есть один или несколько NTP-серверов (внутренних или публичных), к которым подстраиваются остальные узлы.
DHCP (Dynamic Host Configuration Protocol) выдаёт узлам IP-адрес, маску, шлюз и DNS-серверы (порты 67/68, UDP). LDAP (Lightweight Directory Access Protocol) - доступ к каталогам и аутентификации (порт 389, TCP; LDAPS - 636). SIP (Session Initiation Protocol) - установка сессий голоса и видео (VoIP). RTP (Real-time Transport Protocol) передаёт медиа-поток. WebSocket - полнодуплексный канал поверх HTTP для веб-приложений. Все перечисленные используют TCP или UDP в зависимости от протокола.
WebSocket устанавливается через HTTP (рукопожатие Upgrade), затем канал остаётся открытым для двустороннего обмена без повторных HTTP-запросов. Используется в чатах, уведомлениях, онлайн-играх и панелях мониторинга в браузере. SIP и RTP - основа многих VoIP-решений и видеоконференций; медиа часто идёт по UDP для низкой задержки. При проектировании приложений выбор между длинным опросом, WebSocket и чистыми UDP/TCP зависит от требований к задержке, надёжности и среде (браузер, сервер, мобильное приложение).
TCP: 20/21 FTP, 22 SSH, 23 Telnet, 25 SMTP, 80 HTTP, 110 POP3, 143 IMAP, 443 HTTPS, 993 IMAPS, 995 POP3S, 3389 RDP. UDP: 53 DNS, 67/68 DHCP, 69 TFTP, 123 NTP, 161/162 SNMP. Знание этих портов помогает быстро фильтровать трафик в Wireshark (например, tcp.port == 443 или udp.port == 53) и настраивать правила файрвола. Нестандартные порты часто используются для сокрытия служб или при нескольких экземплярах одного сервиса на одном узле.
Большинство прикладных протоколов работают поверх TCP: HTTP/HTTPS, SMTP, POP3, IMAP, FTP, SSH, RDP, LDAP. Поверх UDP типично работают DNS (запросы), TFTP, DHCP, NTP, SNMP (запросы и трапы), медиа-потоки (RTP) и часть VoIP. Понимание этой связки помогает при настройке файрволов, диагностике трафика в Wireshark и проектировании приложений.
Транспортный уровень представлен TCP (надёжный поток с соединением, подтверждениями, скользящим окном и управлением перегрузкой) и UDP (дейтаграммы без соединения и без встроенной надёжности). Прикладной уровень - это протоколы, которые используют приложения: веб (HTTP/HTTPS), почта (SMTP, POP3, IMAP), файлы (FTP, TFTP, SFTP), удалённый доступ (SSH, Telnet, RDP), разрешение имён (DNS), управление (SNMP), время (NTP), конфигурация (DHCP) и др. Каждый прикладной протокол опирается на TCP или UDP в зависимости от требований к доставке и задержке.
Закрепление материала по TCP и UDP (занятия 9 и 10) и обзор протоколов прикладного уровня дают единую картину: как данные доставляются до приложения (транспорт) и как приложения обмениваются смысловыми сообщениями (прикладной уровень). Для диагностики полезно уметь определять протокол по порту и по захвату трафика в Wireshark. Для проектирования - понимать, когда выбрать TCP, когда UDP и какой прикладной протокол подходит под задачу. Дальнейшее углубление: детали TLS для HTTPS, реализация REST API поверх HTTP, настройка DNS и почтовых серверов.