Ответ
TCP гарантирует надежную доставку данных через механизмы подтверждения (ACK) и повторной передачи. Если соединение прервется во время отправки, пакет не будет доставлен, и приложение получит уведомление об ошибке.
Что происходит при обрыве:
- Повторная передача (Retransmission): Клиент отправляет сегмент данных и запускает таймер. Если подтверждение (ACK) от сервера не приходит до истечения таймаута, клиент повторяет отправку. Этот процесс повторяется несколько раз (зависит от настроек ОС, например,
net.ipv4.tcp_retries2в Linux). - Восстановление соединения: TCP попытается обнаружить обрыв и восстановить соединение, отправляя keep-alive probes (если включены) или реагируя на таймауты.
- Финальная ошибка: Если все попытки повторной передачи исчерпаны или соединение признано разорванным (например, получен RST-пакет), стек TCP сообщит об ошибке приложению (например, вернет ошибку
ETIMEDOUTилиECONNRESET).
Пример на уровне приложения:
# Команда curl завершится с ошибкой, если TCP не сможет доставить данные
$ curl https://example.com
curl: (28) Connection timed out after 10000 milliseconds
Вывод: TCP обеспечивает надежность в условиях временных сетевых проблем, но не может гарантировать доставку при постоянном физическом обрыве соединения. Приложение всегда будет проинформировано о статусе операции (успех или конкретная ошибка).