Меня особенно интересуют реализации FIX протокол через TCP, но я рад обсудить проблему в более общем плане.
Предположим, что клиент отправляет сегменты TCP серверу, и некоторые из задействованных IP-пакетов теряются. Тогда для сегментов TCP, которые не были доставлены полностью, клиент не получит ACK. Обычно это сигнал для клиента, чтобы повторно передать сегменты TCP по истечении периода ожидания.
Теперь давайте предположим, что клиент все-таки решает не отправлять эти недостающие сегменты TCP. Что тогда произойдет с неполным набором сегментов, которые сервер правильно получил?
Надеется ли сервер на лучшее и предполагает, что в конце концов появятся недостающие сегменты? Есть ли тайм-аут, по которому сервер очищает неполную информацию из своего буфера? Если да, то как долго это время ожидания?
Поддержание активности TCP обсуждается в разделе 4.2.3.6 RFC-1122 (http://www.rfc-editor.org/std/std3.txt).
Без повторных передач keepalive TCP-соединения могут оставаться открытыми бесконечно без обмена сегментами. Если соединение фактически разорвано, это обычно не обнаруживается, пока одна из сторон не попытается отправить новые данные и не получит тайм-аут или ошибку ICMP.