TCP: Nomenclatures
SACK: (selective ack), it is an option added to normal ack packets. Normally sack can specify at most 4 groups of seq_start, seq_end. Meaning bytes at these sequences are received at receiver side.
D-SACK: (duplicate sack), it uses the same bits as SACK, but the specified seq_start, seq_end are smaller than the ACK's sequence. Bytes specified within this interval are the bytes received multiple times at receiver side. [ See rfc-2883/4.1 section ] The data sender receives this infomation normally will try to unset the congestion flag of the connection.
FACK: (forward ack) an algorithm implemented to trigger fast retransmit while sack packets(sometimes while out-of-order situation). Subject to change in future.
About tcp fast retransmission and fast recovery from congestion avoidance and all the things interested, better to read rfc-5681. (2009)