Есть сервер и клиент, все работает по инету, жуткому GPRS, поэтому не все пакеты 100% доходят. Клиент отсылает какие то данные серверу, сервер их сохраняет и отсылает ответ клиенту что данные сохранены, затем клиент говорит серверу что понял что данные сохранены. Если на каком то этапе сбой то данные на сервер должны быть потерты, а на клиенте была пометка что данные не доставлены.
Грубо говоря нужен алгоритм чтобы чтобы клиент и сервер 100% знали что данные доставлены или нет.
TCP гарантирует доставить целостный пакет. Об этом знает получатель но не отправитель, отправитель(вроде так, я в этом не особо силен). Мне нужно что то типа
<-отправка данных
->все ок сохранил
<-понял, пометил что сохранил
->ок понял что ты понял и тоже пометил
Что то не до конца ясно из описания закрытия соединения. Завершение соединения можно рассмотреть в три этапа:
1. Посылка серверу от клиента флагов FIN и ACK на завершение соединения.
2. Сервер посылает клиенту флаги ответа ACK , FIN, что соединение закрыто.
3. После получения этих флагов клиент закрывает соединение и в подтверждение отправляет серверу ACK , что соединение закрыто.
А если на 3 этапе клиент не получит пакет, и закроется по таймауту, сервер считает что все, процесс прошел удачно, а клиент посчитал что соединение оборвалось.
Ладно, а если он так и не получает ACK? Он считает что соединение оборвано? Клиент то уже все, закрыл соединение и посчитал что все чики-пуки. Мне просто знакомый подсказывает что последнее ACK не на что не влияет поэтому я и начал разговор пункта 3.