TCP
TCP (Transmission Control Protocol) – это транспортный уровень протокола модели OSI, который обеспечивает надёжную передачу данных между двумя хостами через сеть IP. Основные характеристики:
Особенности TCP
- Надежность: TCP гарантирует доставку пакетов за счет использования подтверждения приема (ACK), повторной передачи потерянных сегментов и контроля перегрузки сети.
- Контроль потока: TCP использует механизм скользящего окна для управления потоком данных, чтобы отправитель не переполнял буфер получателя.
- Управление соединением: Перед началом передачи данных устанавливается соединение (три этапа рукопожатия: SYN, SYN+ACK, ACK).
- Последовательная передача: Данные передаются последовательно, и TCP следит за тем, чтобы пакеты были собраны в правильном порядке у получателя.
- Проверка целостности: Использует контрольные суммы для проверки целостности каждого сегмента.
- Поддерживает мультиплексирование: Позволяет нескольким приложениям использовать одно сетевое подключение одновременно благодаря портам.
- Протокол работает медленнее, чем UDP, из-за необходимости подтверждений и установления соединения.
Сравнение с UDP (User Datagram Protocol):
- Ненадежность: UDP не гарантирует доставку пакетов, так как отсутствует подтверждение получения данных и повторная передача потерянных пакетов.
- Отсутствие контроля потока: Нет механизма управления потоком данных, поэтому отправитель может передавать данные быстрее, чем их способен обработать получатель.
- Нет установления соединения: Передача данных начинается сразу без предварительного согласования параметров связи.
- Быстрота: UDP работает значительно быстрее, поскольку отсутствуют механизмы обеспечения надежности.
- Применение: Используется в случаях, когда скорость важнее надежности, например, в потоковом видео, голосовых звонках, онлайн-играх.
Сравнение с ICMP (Internet Control Message Protocol):
- Функция: ICMP используется для диагностики состояния сети и обмена сообщениями об ошибках. Например, сообщения о недоступности хоста или невозможности маршрутизации.
- Не предназначен для передачи пользовательских данных: В отличие от TCP и UDP, ICMP не передает пользовательские данные, а служит исключительно для служебных целей.
- Примеры сообщений: Echo Request/Reply (используется утилитой
ping), Destination Unreachable, Time Exceeded.
Использование TCP в стриминге
FFmpeg
В FFmpeg для этого используется параметр rtsp_transport с значением tcp. Вот пример команды для воспроизведения RTSP-потока по TCP:
ffmpeg -rtsp_transport tcp -i rtsp://example.com/live.sdp output.mp4
Здесь:
-rtsp_transport tcp: указывает FFmpeg использовать TCP для передачи RTSP-потока.rtsp://example.com/live.sdp: URL источника RTSP-потока.output.mp4: выходной файл, куда будет записан декодированный поток.
GStreamer
В GStreamer для этого также применяется параметр rtsp-config, чтобы задать использование TCP. Пример команды для воспроизведения RTSP-потока по TCP:
gst-launch-1.0 rtspsrc location=rtsp://example.com/live.sdp ! decodebin ! autovideosink
Добавляем параметр rtsp-config=interval=0,latency=0,tcp:
gst-launch-1.0 rtspsrc location=rtsp://example.com/live.sdp rtsp-config=interval=0,latency=0,tcp ! decodebin ! autovideosink
Здесь:
rtsp-config=interval=0,latency=0,tcp: указывает GStreamer использовать TCP для передачи RTSP-потока.decodebin: элемент для автоматического выбора подходящего декодера.autovideosink: выводит видеопоток на экран.