1 23:08:29.110089 IP cli.43512 > srv.22: Flags [S], seq 818015366, win 29200, options [mss 1460,sackOK,TS val 28178215 ecr 0,nop,wscale 7], length 0
2 23:08:29.294750 IP srv.22 > cli.43512: Flags [S.], seq 3935023731, ack 818015367, win 16384, options [mss 1460,nop,nop,sackOK,nop,wscale 3,nop,nop,TS val 1301048581 ecr 28178215], length 0
3 23:08:29.294810 IP cli.43512 > srv.22: Flags [.], ack 1, win 229, options [nop,nop,TS val 28178400 ecr 1301048581], length 0
4 23:08:29.499011 IP srv.22 > cli.43512: Flags [P.], seq 1:22, ack 1, win 2172, options [nop,nop,TS val 1301048582 ecr 28178400], length 21
5 23:08:29.499059 IP cli.43512 > srv.22: Flags [.], ack 22, win 229, options [nop,nop,TS val 28178604 ecr 1301048582], length 0
6 23:08:35.134925 IP cli.43512 > srv.22: Flags [F.], seq 1, ack 22, win 229, options [nop,nop,TS val 28184240 ecr 1301048582], length 0
7 23:08:35.319602 IP srv.22 > cli.43512: Flags [.], ack 2, win 2172, options [nop,nop,TS val 1301048593 ecr 28184240], length 0
8 23:08:35.319796 IP srv.22 > cli.43512: Flags [F.], seq 22, ack 2, win 2172, options [nop,nop,TS val 1301048593 ecr 28184240], length 0
9 23:08:35.319843 IP cli.43512 > srv.22: Flags [.], ack 23, win 229, options [nop,nop,TS val 28184425 ecr 1301048593], length 0
На приведенном дампе видно как клиент подключается к SSH-серверу (1-3), который отправляет клиенту свой баннер (4) после чего клиент подтверждает прием (5).
Через шесть секунд клиент производит активное закрытие (6), выставляя в сегменте FIN зачем-то еще флаг ACK, таким образом подтверждая уже подтвержденные данные.
Вопрос: зачем это делается?
Почти во всей литературе, в которой разбирается TCP, можно наблюдать такую схему: https://upload.wikimedia.org/wikipedia/commons/5/55/TCP_CLOSE.svg
В RFC 793 в разделе 3.5 (Closing a Connection) говорится:
Case 1: Local user initiates the close
In this case, a FIN segment can be constructed and placed on the outgoing segment queue.
cli: Linux 3.18.7
srv: OpenBSD 5.4