Назад | Перейти на главную страницу

Продолжить отправку пакетов после отправки FIN

Моя wirehark захватила следующие пакеты:

2009    773 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448
2010    775 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK]  Seq=11680 Ack=559 Win=3847 Len=1448
2011    779 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448
2012    781 src dst TCP 66  51940 > http [FIN, ACK] Seq=15579 Ack=559 Win=3847 Len=0 <====FIN
2013    786 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448 
2014    802 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448 
2029    833 src dst TCP 1514    [TCP Retransmission] 51940 > http [ACK] Seq=11680 Ack=559 Win=3847 Len=1448

Итак, у меня есть несколько вопросов: когда приложение отправляет FIN, изменяется ли состояние TCP-соединения на fin_wait_1? Тогда почему он все еще отправляет пакеты?

Или я неправильно понял fin_wait_1?

Спасибо.

Интересный вопрос. Прежде всего, вы правы, когда приложение вызывает close () для сокета, отправляется FIN, и сокет переходит в состояние FIN-WAIT-1. В этом состоянии сокет не будет принимать дальнейшие вызовы на отправку, однако отправленные пакеты перед FIN, который еще не подтвержден, будет продолжать ретранслироваться. Похоже, именно это и происходит в вашем случае.

Источник: https://tools.ietf.org/html/rfc793#section-3.5