В интернет-связи для доставки данных другой стороне используются разные способы связи. Самые типичные из них — TCP и UDP.
TCP делает акцент на точной доставке данных. UDP делает акцент на легкости самого способа связи и на том, чтобы задержку было проще снижать.
Но TCP и UDP не сравнивают как «что выше». Подходящий способ выбирают по цели связи.
Что такое TCP
TCP — способ связи, который делает акцент на надежности.
В TCP между сторонами устанавливается соединение, и данные передаются поверх этого соединения. TCP проверяет, дошли ли отправленные данные, и повторно отправляет потерянные.
Кроме того, в сети данные не всегда приходят в том порядке, в котором были отправлены. TCP добавляет информацию для управления порядком и на стороне получателя приводит данные к правильному порядку.
Поэтому TCP подходит для связи, где потеря или нарушение порядка данных создает проблему.
Например, при входе, передаче файлов, отправке почты, Web-связи через HTTP/1.1 или HTTP/2 важна точность данных. Если часть данных входа потеряется или часть файла повредится, обработка не получится.
TCP выполняет подтверждения, повторную отправку и другое управление ради надежности. Из-за этого управления больше, чем в UDP, но для связи, где данные нужно надежно обработать в правильном порядке, это важный механизм.
TCP управляет точной доставкой
Особенность TCP не просто в том, что он отправляет данные, а в управлении, которое делает отправленные данные полноценной связью.
TCP имеет такие свойства:
Свойство
Содержание
Ориентация на соединение
Передача начинается после установления соединения с другой стороной
Подтверждение доставки
Проверяет, дошли ли отправленные данные
Повторная отправка
При необходимости отправляет заново потерянные данные
Управление порядком
Упорядочивает данные, пришедшие не по порядку
Обработка дублей
Упорядочивает повторно пришедшие одинаковые данные
Благодаря этому TCP предоставляет приложению надежный поток данных с сохраненным порядком.
Однако TCP не сохраняет «одну порцию данных приложения» как отдельную единицу. TCP рассматривает данные как непрерывную последовательность байтов.
Поэтому приложение должно отдельно определить, где начинается и заканчивается одно сообщение. Верхние протоколы вроде HTTP имеют для этого свои правила.
Что такое UDP
UDP — способ связи, который делает акцент на легкости и низкой задержке.
UDP не устанавливает соединение перед связью так, как TCP. В самом UDP нет механизма повторной отправки потерянных данных и упорядочивания.
UDP отправляет данные относительно простыми единицами. Эти единицы называются датаграммами.
Так как UDP не несет много управления внутри самого способа связи, обработка становится легче. В результате он бывает удобен для связи, где важна реальная задержка.
Но мысль «UDP всегда быстрее» слишком упрощает картину. Реальная скорость и качество зависят от сети, проектирования приложения, шифрования, повторной отправки, перегрузки и других факторов.
Суть UDP в том, что сам способ связи содержит мало гарантий.
UDP уменьшает гарантии и дает гибкость
UDP не содержит надежных механизмов TCP внутри самого способа связи.
Свойство
Содержание
Без соединения
Не предполагает установление соединения, как TCP
Нет гарантии доставки
Сам UDP не гарантирует, что данные обязательно дойдут
Нет гарантии порядка
Сам UDP не гарантирует порядок прихода
Нет повторной отправки
Сам UDP не отправляет потерянные данные автоматически
Единицы датаграмм
Отправленная единица рассматривается как датаграмма
Так UDP может показаться неполной связью. Но его используют потому, что уменьшение гарантий позволяет приложению свободнее проектировать управление.
Например, в видеозвонке естественнее быстро доставить текущий звук, чем потом идеально досылать старый. В онлайн-игре иногда важнее быстро отразить текущее состояние, чем полностью досылать прошлое положение.
Приложение, использующее UDP, не обязательно не может ничего гарантировать. При необходимости приложение само добавляет подтверждения, повторную отправку, управление порядком, шифрование и другие механизмы.
QUIC — типичный пример. QUIC основан на UDP, но не является простой UDP-связью. Поверх UDP он добавляет управление соединением, шифрование, повторную отправку, управление потоками и другое.
Сравнение TCP и UDP
Разница TCP и UDP — не только в наличии надежности. У них разная логика проектирования связи.
Пункт
TCP
UDP
Базовая идея
Управляет связью, чтобы доставить точно
Облегчает сам способ связи и минимизирует управление
Соединение
Устанавливает соединение перед передачей
Не предполагает установление соединения
Обработка данных
Непрерывная последовательность байтов
Единицы датаграмм
Подтверждение доставки
Выполняет
Сам UDP не выполняет
Управление порядком
Выполняет
Сам UDP не выполняет
Повторная отправка
Выполняет при необходимости
Сам UDP не выполняет
Подходящие случаи
Связь, где важна точность
Связь, где важна низкая задержка или гибкое управление
TCP подходит для связи, где потеря данных или нарушение порядка легко вызывает проблему.
Например, при загрузке файла потеря части может повредить весь файл. При входе информация для аутентификации должна прийти правильно.
В Web-связи HTTP/1.1 и HTTP/2 работают поверх TCP. HTML, CSS, JavaScript, изображения и другие данные страницы в основном нужно получить правильно.
В таких случаях, где важна точность связи, подходит TCP.
Однако современная Web-связь не вся работает только на TCP. В HTTP/3 используется QUIC. QUIC — способ связи на основе UDP.
Поэтому запоминать только «Web = TCP» для современного Web неточно. Точнее: HTTP/1.1 и HTTP/2 используют TCP, а HTTP/3 использует QUIC.
Где подходит UDP
UDP подходит для связи, где важны реальное время и гибкость проектирования.
В видеозвонках важнее как можно быстрее получить текущий звук и изображение, чем потом полностью получить звук и изображение из прошлого. Даже если часть звука или видео потерялась, иногда естественнее продолжать связь, а не останавливать ее.
В онлайн-играх важна низкая задержка. Иногда лучше часто обновлять текущее состояние, чем полностью досылать прошлое.
В DNS тоже часто используется UDP. DNS — механизм запроса IP-адресов и других данных по доменному имени. Для коротких запросов и ответов UDP подходит.
Но DNS не всегда использует только UDP. TCP используется при больших ответах, зонной передаче или способах вроде DNS over TLS.
То есть DNS — типичный пример UDP, но не «только UDP».
Отношение QUIC и UDP
QUIC — способ связи, основанный на UDP. HTTP/3 работает поверх QUIC.
Важно, что QUIC не является «ненадежной связью, потому что это UDP».
Сам UDP не имеет подтверждений, повторной отправки, управления порядком и шифрования. Но QUIC поверх UDP реализует собственное управление, надежность и шифрование.
Почему он построен поверх UDP, а не TCP? Потому что менять сам TCP, глубоко встроенный в OS и сетевое оборудование, сложнее, чем проектировать новый способ связи поверх UDP.
Поэтому UDP — не просто «грубая связь». Он используется и как основа для новых способов связи.
Что лучше: TCP или UDP
TCP и UDP не находятся в отношении, где один всегда лучше другого.
TCP делает акцент на надежности связи. UDP облегчает сам способ связи и позволяет приложению гибче управлять.
Для связи, где важна точность, подходит TCP. Для связи, где важны низкая задержка и реальное время, может подходить UDP.
Даже при UDP приложение может добавлять надежность. И даже при TCP плохое состояние сети вызывает задержки и повторные отправки.
Поэтому TCP и UDP нельзя просто делить на «быстрый / медленный» или «безопасный / опасный». Их выбирают по цели связи, допустимой задержке, допустимости потерь и тому, сколько управления выполняет приложение.
Связь с анонимностью
Разница TCP и UDP важна и для понимания анонимности и видимости связи.
Например, , , DNS, HTTP/3, видеозвонки и онлайн-игры могут обрабатываться по-разному в зависимости от TCP или UDP.
У TCP сравнительно ясно видны начало, продолжение и конец соединения. UDP не имеет соединения в таком же явном виде, и короткие датаграммы могут идти прерывисто.
Эта разница важна для файрволов, NAT, VPN, прокси и сетей анонимизации.
Например, Tor в основном спроектирован для TCP-потоков. Поэтому UDP-связь приложений не всегда можно просто пропустить через Tor как есть.
Кроме того, в HTTP/3 используется QUIC, поэтому даже Web-связь может быть основана на UDP. В таких случаях видимость и управление связью могут отличаться от HTTP/1.1 или HTTP/2.
DNS тоже важен для анонимности и приватности. Видимость меняется в зависимости от того, выходит ли DNS-запрос наружу по UDP, TCP или через зашифрованный DNS.
Понимание TCP и UDP помогает видеть не просто факт связи, а какой вид связи как переносится.
Итоги
TCP — способ связи, который делает акцент на надежности. Он устанавливает соединение, проверяет доставку, повторно отправляет данные и выстраивает порядок.
UDP облегчает сам способ связи и не имеет подтверждения доставки, повторной отправки и управления порядком как базовых функций. За счет этого он используется там, где важны низкая задержка и гибкость.
TCP подходит для HTTP/1.1, HTTP/2, входа, передачи файлов, отправки почты и другого. UDP используется в DNS, видеозвонках, онлайн-играх, QUIC, HTTP/3 и другом.
Однако DNS использует не только UDP, но и TCP. QUIC основан на UDP, но не является простой UDP-связью и имеет собственные механизмы надежности и шифрования.
TCP и UDP не находятся в отношении «один лучше другого». Они выбираются по цели связи: нужна ли точность, низкая задержка или гибкое управление.
Связанные инструменты
DNS Leak Test
DNSLeakTest
Внешний ресурс, связанный с этой статьей. Открывайте его только если он подходит вашей ситуации и модели угроз.
Почему указано здесь: Он может помочь с темой статьи, но находится вне Anonymity Sense, поэтому перед использованием его нужно проверить.