Как ответить
Основное отличие TCP от UDP в том, как они гарантируют доставку данных. TCP — это протокол с установлением соединения, который гарантирует, что все пакеты дойдут в правильном порядке. UDP — это протокол без установления соединения, который просто отправляет данные и не заботится о том, дойдут ли они.
TCP (Transmission Control Protocol) работает так: перед отправкой данных клиент и сервер обмениваются SYN, SYN-ACK, ACK пакетами — это называется тройным рукопожатием. После этого устанавливается виртуальное соединение. Каждый отправленный пакет нумеруется, и получатель отправляет подтверждение (ACK) о получении. Если отправитель не получает ACK в течение таймаута (обычно 200-500 мс), он переотправляет пакет. TCP также управляет потоком — например, если получатель медленный, он может отправить окно нулевого размера, и отправитель приостановится. Из-за этих механизмов TCP медленнее, но надёжнее.
UDP (User Datagram Protocol) — это как почтовая открытка: вы пишете адрес и отправляете. Нет подтверждения, нет повторной отправки, нет гарантии порядка. Пакеты могут прийти в любом порядке или не прийти вообще. UDP быстрее, потому что не тратит время на handshake и подтверждения. Например, в DNS-запросах: клиент отправляет UDP-пакет на порт 53, сервер отвечает, и всё — никаких подтверждений. Если пакет потерялся, клиент просто повторяет запрос через таймаут.
В реальных проектах выбор зависит от задачи. TCP используют там, где важна целостность данных: HTTP/HTTPS, SSH, FTP, электронная почта (SMTP). UDP — там, где важна скорость и допустимы потери: видеозвонки (WebRTC), стриминг (RTMP), онлайн-игры (например, в Counter-Strike используется UDP для позиций игроков), DNS, DHCP.
Ещё стоит упомянуть, что есть гибридные решения. Например, QUIC (используется в HTTP/3) работает поверх UDP, но добавляет контроль потерь и шифрование. Это компромисс между скоростью UDP и надёжностью TCP.
На практике для junior-разработчика важно: если пишете сетевое приложение и не уверены — берите TCP. Он прощает ошибки. UDP требует ручной обработки потерь и переупорядочивания пакетов.