Перейти к содержанию

TCP/UDP

Введение в транспортный уровень модели OSI/TCP-IP

Транспортный уровень — это четвертый уровень модели OSI и второй уровень модели TCP/IP. Он отвечает за передачу данных между приложениями на разных устройствах. Основные задачи:

  • Обеспечение надежной доставки данных.
  • Управление потоком данных.
  • Обеспечение целостности данных.

Основные протоколы транспортного уровня:

  • TCP (Transmission Control Protocol) — ориентированный на соединение протокол.
  • UDP (User Datagram Protocol) — неориентированный на соединение протокол.

Протокол TCP

TCP (Transmission Control Protocol) — это один из основных протоколов транспортного уровня стека TCP/IP. Он обеспечивает надежную, упорядоченную и проверенную доставку данных между приложениями на разных устройствах.

Основные характеристики TCP:

  • Ориентирован на соединение: Перед передачей данных устанавливается соединение между отправителем и получателем.
  • Надежность: Гарантирует доставку данных без ошибок и в правильном порядке.
  • Управление потоком: Регулирует скорость передачи данных, чтобы избежать перегрузки сети.
  • Полнодуплексная передача: Данные могут передаваться в обоих направлениях одновременно.
  • Поддержка многопоточной передачи: Позволяет передавать данные между несколькими приложениями на одном устройстве.

Архитектура TCP: заголовок и структура сегмента

Сегмент TCP — это единица данных, передаваемая между устройствами. Каждый сегмент состоит из заголовка и данных.

Структура заголовка TCP (20 байт + опции):

  1. Порт источника (Source Port, 2 байта): Порт отправителя.
  2. Порт назначения (Destination Port, 2 байта): Порт получателя.
  3. Номер последовательности (Sequence Number, 4 байта): Указывает порядковый номер первого байта данных в сегменте.
  4. Номер подтверждения (Acknowledgment Number, 4 байта): Указывает номер следующего ожидаемого байта.
  5. Смещение данных (Data Offset, 4 бита): Указывает длину заголовка в 32-битных словах.
  6. Зарезервированные биты (Reserved, 6 бит): Зарезервированы для будущего использования.
  7. Флаги (Flags, 6 бит): Управляющие флаги (например, SYNACKFIN).
  8. Окно (Window Size, 2 байта): Указывает размер окна для управления потоком.
  9. Контрольная сумма (Checksum, 2 байта): Используется для проверки целостности данных.
  10. Указатель срочности (Urgent Pointer, 2 байта): Указывает на срочные данные (если установлен флаг URG).
  11. Опции (Options, переменная длина): Дополнительные параметры (например, максимальный размер сегмента).

Установление соединения (Three-way handshake)

Перед передачей данных TCP устанавливает соединение между клиентом и сервером. Этот процесс называется трехэтапным рукопожатием (Three-way handshake):

  1. Шаг 1: SYN

    Клиент отправляет серверу пакет с флагом SYN (синхронизация) и случайным начальным номером последовательности (Sequence Number).

  2. Шаг 2: SYN-ACK

    Сервер отвечает пакетом с флагами SYN и ACK (подтверждение). В пакете указывается свой начальный номер последовательности и подтверждение получения пакета от клиента.

  3. Шаг 3: ACK

    Клиент отправляет серверу пакет с флагом ACK, подтверждая получение ответа. После этого соединение считается установленным.


Передача данных: механизмы надежности и подтверждения

После установления соединения данные передаются сегментами. Каждый сегмент содержит:

  • Номер последовательности (Sequence Number).
  • Номер подтверждения (Acknowledgment Number).
  • Флаги (например, ACKFIN).

Механизм подтверждения:

  • Получатель отправляет отправителю пакет с флагом ACK, указывая номер следующего ожидаемого байта.
  • Если отправитель не получает подтверждение в течение определенного времени, он повторно отправляет данные.

Повторная передача:

  • Если данные потеряны или повреждены, отправитель повторно передает сегмент после истечения тайм-аута.

Управление потоком: окно передачи и скользящее окно

Управление потоком (Flow Control) — это механизм, который позволяет регулировать скорость передачи данных, чтобы избежать перегрузки получателя.

Окно передачи (Window Size):

  • Получатель указывает отправителю размер окна — количество байт, которые можно отправить без подтверждения.
  • Если окно заполнено, отправитель приостанавливает передачу данных.

Скользящее окно (Sliding Window):

  • Окно "скользит" по мере получения подтверждений, позволяя отправителю передавать новые данные.

Управление перегрузкой: алгоритмы и методы

Управление перегрузкой (Congestion Control) — это механизм, который позволяет регулировать скорость передачи данных в зависимости от загруженности сети.

Основные алгоритмы:

  1. Медленный старт (Slow Start):
    • Скорость передачи данных увеличивается экспоненциально.
    • При достижении порога переходит в режим предотвращения перегрузки.
  2. Предотвращение перегрузки (Congestion Avoidance):
    • Скорость передачи данных увеличивается линейно.
  3. Быстрая передача (Fast Retransmit):
    • Если отправитель получает три дублирующих подтверждения (ACK), он повторно передает данные без ожидания тайм-аута.
  4. Быстрое восстановление (Fast Recovery):
    • После быстрой передачи отправитель переходит в режим предотвращения перегрузки.

Завершение соединения

Соединение закрывается с помощью четырехэтапного процесса:

  1. Шаг 1: FIN

    Одна из сторон отправляет пакет с флагом FIN (завершение).

  2. Шаг 2: ACK

    Вторая сторона подтверждает получение пакета FIN.

  3. Шаг 3: FIN

    Вторая сторона отправляет свой пакет FIN.

  4. Шаг 4: ACK

    Первая сторона подтверждает получение пакета FIN. После этого соединение закрывается.


Практическое применение TCP

TCP используется в приложениях, где важна надежная доставка данных:

  • Веб-браузеры: HTTP/HTTPS.
  • Электронная почта: SMTP, IMAP, POP3.
  • Передача файлов: FTP, SFTP.
  • Удаленный доступ: SSH, RDP.

Протокол UDP

UDP (User Datagram Protocol) — это один из основных протоколов транспортного уровня стека TCP/IP. В отличие от TCP, UDP не ориентирован на соединение и не гарантирует надежную доставку данных. Он обеспечивает быструю передачу данных с минимальной накладной нагрузкой.

Основные характеристики UDP:

  • Без установления соединения: Данные передаются без предварительного согласования между отправителем и получателем.
  • Ненадежная доставка: Нет гарантии, что данные будут доставлены без ошибок или в правильном порядке.
  • Минимальная накладная нагрузка: Заголовок UDP занимает всего 8 байт.
  • Высокая скорость: Подходит для приложений, где важна скорость передачи данных.
  • Поддержка широковещательной и multicast-передачи: UDP может отправлять данные сразу нескольким получателям.

Архитектура UDP: заголовок и структура датаграммы

Датаграмма UDP — это единица данных, передаваемая между устройствами. Каждая датаграмма состоит из заголовка и данных.

Структура заголовка UDP (8 байт):

  1. Порт источника (Source Port, 2 байта): Порт отправителя. Если не используется, устанавливается в 0.
  2. Порт назначения (Destination Port, 2 байта): Порт получателя.
  3. Длина (Length, 2 байта): Общая длина датаграммы (заголовок + данные) в байтах.
  4. Контрольная сумма (Checksum, 2 байта): Используется для проверки целостности данных. Если не используется, устанавливается в 0.

Особенности заголовка UDP:

  • Минимальный размер заголовка — 8 байт.
  • Нет номеров последовательности и подтверждений.
  • Нет флагов управления (например, SYNACKFIN).

Принципы работы UDP: передача данных без установления соединения

UDP передает данные в виде датаграмм — независимых пакетов, которые не требуют установления соединения. Каждая датаграмма содержит:

  • Порт отправителя.
  • Порт получателя.
  • Длину данных.
  • Контрольную сумму (для проверки целостности данных).

Процесс передачи данных:

  1. Отправка данных:

    Отправитель создает датаграмму и отправляет ее получателю.

  2. Получение данных:

    Получатель принимает датаграмму и обрабатывает данные.

  3. Отсутствие подтверждения:

    Получатель не отправляет подтверждение о получении данных.


Особенности UDP: отсутствие подтверждения и управления потоком

Отсутствие подтверждения:

  • UDP не гарантирует доставку данных. Если датаграмма потеряна или повреждена, она не будет передана повторно.
  • Получатель не отправляет отправителю подтверждение о получении данных.

Отсутствие управления потоком:

  • UDP не регулирует скорость передачи данных. Отправитель может отправлять данные с максимальной скоростью, что может привести к перегрузке сети.
  • Нет механизмов для управления перегрузкой.

Отсутствие упорядочивания:

  • UDP не гарантирует, что данные будут доставлены в правильном порядке. Если порядок важен, его должен обеспечить вышестоящий протокол или приложение.

Преимущества и недостатки UDP

Преимущества UDP:

  1. Высокая скорость передачи:

    Минимальная накладная нагрузка и отсутствие подтверждений делают UDP быстрым протоколом.

  2. Низкая задержка:

    Подходит для приложений реального времени, таких как видеостриминг и VoIP.

  3. Простота реализации:

    UDP легче реализовать и поддерживать, чем TCP.

  4. Поддержка широковещательной и multicast-передачи:

    UDP может отправлять данные сразу нескольким получателям.

Недостатки UDP:

  1. Ненадежная доставка:

    Нет гарантии, что данные будут доставлены без ошибок или в правильном порядке.

  2. Отсутствие управления потоком:

    Может привести к перегрузке сети.

  3. Отсутствие механизмов восстановления:

    Если данные потеряны или повреждены, они не будут переданы повторно.


Практическое применение UDP

UDP используется в приложениях, где важна скорость передачи данных, а надежность может быть обеспечена на уровне приложения:

  1. Видеостриминг:

    Приложения, такие как YouTube и Twitch, используют UDP для передачи видео в реальном времени.

  2. Голосовая связь (VoIP):

    Звонки через Skype, Zoom и другие VoIP-сервисы используют UDP для минимизации задержек.

  3. Онлайн-игры:

    Многопользовательские игры используют UDP для передачи данных в реальном времени.

  4. Системы доменных имен (DNS):

    Запросы DNS используют UDP для быстрого разрешения имен.

  5. Трансляция мультимедиа (Multicast):

    UDP используется для передачи данных сразу нескольким получателям (например, IPTV).


Сравнение TCP и UDP

Характеристика TCP UDP
Тип соединения Ориентирован на соединение Без установления соединения
Надежность Гарантирует доставку Нет гарантии доставки
Упорядочивание данных Да Нет
Скорость Медленнее Быстрее
Накладная нагрузка Высокая Низкая
Использование Веб-браузеры, почта, файлы Видеостримы, VoIP, игры

Вопросы безопасности при использовании TCP и UDP

Угрозы безопасности TCP

SYN-флуд (SYN Flood)

Описание:

Атака SYN-флуд заключается в отправке большого количества запросов на установление соединения (пакетов с флагом SYN) на сервер, но без завершения процесса установления соединения (отсутствие пакета ACK). Это приводит к переполнению очереди полуоткрытых соединений на сервере, что делает его недоступным для легитимных запросов.

Методы защиты:

  • SYN Cookies: Механизм, при котором сервер не сохраняет состояние соединения до получения подтверждения от клиента.
  • Ограничение числа полуоткрытых соединений: Установка лимита на количество одновременно открытых соединений.
  • Использование брандмауэров: Фильтрация подозрительного трафика.

Подделка пакетов (Spoofing)

Описание:

Злоумышленник может подделать IP-адрес отправителя и отправить поддельные пакеты, чтобы нарушить работу TCP-соединения или вызвать сбои в работе приложения.

Методы защиты:

  • Использование механизмов аутентификации: Например, IPsec или TLS.
  • Фильтрация пакетов: Использование брандмауэров для блокировки подозрительных пакетов.

Атаки на переполнение буфера (Buffer Overflow)

Описание:

Злоумышленник может отправить данные, которые превышают размер буфера, что может привести к выполнению произвольного кода или сбою приложения.

Методы защиты:

  • Регулярное обновление ПО: Устранение уязвимостей в программном обеспечении.
  • Использование защитных механизмов: Например, ASLR (Address Space Layout Randomization) и DEP (Data Execution Prevention).

Угрозы безопасности UDP

Атаки на переполнение буфера (Buffer Overflow)

Описание:

Аналогично TCP, UDP также уязвим к атакам на переполнение буфера, когда злоумышленник отправляет данные, превышающие размер буфера, что может привести к выполнению произвольного кода или сбою приложения.

Методы защиты:

  • Регулярное обновление ПО: Устранение уязвимостей в программном обеспечении.
  • Использование защитных механизмов: Например, ASLR и DEP.

Амплификация (DNS Amplification)

Описание:

Злоумышленник отправляет поддельные запросы DNS на серверы, используя IP-адрес жертвы в качестве отправителя. Серверы отправляют ответы жертве, что приводит к перегрузке ее сети.

Методы защиты:

  • Ограничение рекурсивных запросов: Настройка DNS-серверов для ограничения рекурсивных запросов.
  • Использование брандмауэров: Фильтрация подозрительного трафика.

Подделка пакетов (Spoofing)

Описание:

Злоумышленник может подделать IP-адрес отправителя и отправить поддельные UDP-пакеты, чтобы нарушить работу приложения или вызвать сбои.

Методы защиты:

  • Использование механизмов аутентификации: Например, DTLS (Datagram Transport Layer Security).
  • Фильтрация пакетов: Использование брандмауэров для блокировки подозрительных пакетов.

Методы защиты для TCP и UDP

Использование брандмауэров

Описание:

Брандмауэры позволяют фильтровать входящий и исходящий трафик, блокируя подозрительные пакеты и предотвращая атаки.

Примеры:

  • Сетевые брандмауэры: Фильтрация трафика на уровне сети.
  • Хостовые брандмауэры: Фильтрация трафика на уровне отдельных устройств.

Шифрование данных

Описание:

Шифрование данных позволяет защитить информацию от перехвата и подделки.

Примеры:

  • TLS/SSL: Для защиты TCP-соединений (например, HTTPS).
  • DTLS: Для защиты UDP-соединений (например, VoIP).

Регулярное обновление ПО

Описание:

Регулярное обновление программного обеспечения позволяет устранять уязвимости и предотвращать атаки.

Примеры:

  • Обновление операционных систем: Установка последних патчей и обновлений.
  • Обновление сетевого оборудования: Обновление прошивок маршрутизаторов и коммутаторов.