Будет ли пассивный доводчик повторно отправить 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
и закрыл соединение.