Будет ли пассивный доводчик повторно отправить FIN, и тогда активный доводчик узнает, что ACK был потерян?
Да. Цитирование из иллюстрированного тома TCP / IP 1 , в разделе «Управление TCP-соединениями»:
- Чтобы завершить закрытие, последний сегмент содержит ACK для последнего FIN. Обратите внимание, что если FIN потерян, он повторно передается до тех пор, пока не будет получен ACK для него.
Тайм-аут При LAST_ACKвходе пассивный доводчик будет повторно отправляться FINпри истечении времени ожидания, предполагая, что он был потерян. Если он действительно был потерян, то активный доводчик в конечном итоге получит ретранслируемый FINи войдет TIME_WAIT. Если FINне был потерян, но финал ACKбыл потерян, то активный ближе находится TIME_WAITи получает FINснова. Когда это произойдет - поступает FINв TIME_WAIT- ACKретранслируется.
Значение тайм - аута в TIME_WAITэто НЕ используется для целей повторной передачи. Когда истекает тайм-аут TIME_WAIT, предполагается, что финал ACKбыл успешно доставлен, потому что пассивный доводчик не ретранслировал FINпакеты. Таким образом, тайм-аут в TIME_WAITэто просто количество времени, после которого мы можем с уверенностью предположить, что если другой конец ничего не отправил, то это потому, что он получил финал ACKи закрыл соединение.