This will be a really long answer, So here it goes.
First things first the rate at which TCP will send the data is dependent on 3 things- application generating data, receive window, congestion window. The effective rate will be determined by the minimum these three.
Now for this question let us assume there is no flow and congestion control required and the application always has data to send.
Now as you pointed out, TCP uses buffers to send data. the buffer size decides the maximum of packets TCP can sent without waiting for an ack.
Now when TCP sends the any data, the packet will travel at link speed ie 100% link utilization and reach the sender. The sender will reply with an ack that again travels with link speed to reach the sender. Thus time elapsed during this activity is equal to RTT. Note that the amount of traffic sent by the TCP during this RTT time is equal to buffer size. The average utilization is given by total data set in the given time. Thus utilization is :- window size / RTT.
Now if we want to send data where average utilization equal to bandwidth then
window size / RTT = bandwidth
Thus, if we can have window size = bandwidth * RTT, then utilization is equal to bandwidth.
Now apart from the maths, Try to understand why this is the case. The TCP has to wait a time equal to RTT, before transmitting again, This is how TCP works. So the only way we can control utilization is by sending the number of packets at a time on the link. If we want to transmit at full bandwidth for continuously for RTT units of time but we cannot pump data continuously so we send bandwidth * RTT units of data together.
Thus to for utilization = bandwidth --> window size = bandwidth * RTT