TCP suffers from problems attributable to its congestion control and flow control design decisions. A lot of these decisions were made in the the 70's/80's when wireless didn't really exist and high bandwidth connections weren't readily available.
The main issues with TCP's flow control are head of line blocking
and receive buffers that are too small.
The main issue with TCP's congestion control algorithm is its additive increase/ multiplicative decrease (AIMD) scheme heavily penalizes lossy networks. This means in practice even a small amount of packet loss in a network can seriously degrade performance.