Off the top of my head the classic principle for full utilisation of a link using TCP used to be quite simple - in theory. Much harder to achieve in practice.
1) An assumption is made that any packet losses are blips that are detected immediately by the receiving end. Also that there are no underlying load-sharing links that might arbitrarily change the order of the IP packets at the receiver.
2) The transmit data has to keep the outgoing link full for at least as long as it takes for a Selective Ack to return for any missing packet. The solicited packets are re-inserted into the outgoing data stream immediately.
3) It has to have enough transmit buffering to hold the data until a positive Ack returns - even if several retransmits of the same packet are solicited. This is several times larger than in 2) above.
4) It has to have enough receive buffering to hold the data until that section of data is complete. Size as per 3) above.
5) Parallel connections are required if the bandwidth and latency of the link means that 3 & 4 approach the maximum size of the TCP receive window parameter.
Anything else?