- RFC 793 indicates that:
A control bit (finis) occupying one sequence number, which
indicates that the sender will send no more data or control
occupying sequence space.
If the sender has no more data to send, it sends a packet which its
FIN flag is set.
If the receiver doesn't receive data, it will send a duplicate
ACK to the sender.
So the sender waits for a time and if it doesn't receive acknowledgment of the
FIN or data within this time, or if it receives a duplicate
ACK, it will retransmit the packets.
ACK control flag is always sent once a connection is established; As RFC 793 says:
Acknowledgment Number: 32 bits
If the ACK control bit is set this field contains the value of the
next sequence number the sender of the segment is expecting to
receive. Once a connection is established this is always sent.
Edit: So until the connection is not established, packets can be sent without
For example, when one side of the connection sends
SYN packet and doesn't receive any acknowledgment; in this case, it can send a
FIN packet without
ACK, since there is nothing to acknowledge it.
RCF793:3.5. Closing a Connection also indicates that:
The user who CLOSEs may continue to RECEIVE
until he is told that the other side has CLOSED also.
ACK will tell to the sender that which sequence number is expected to receive and it prevents extra retransmissions that occur because of
Edited based on @ron-maupin 's comment.