Основная проблема TCP на мобильных сетях, да и, на самом деле, на любых сетях, которые работают по радио и теряют пакеты из-за помех в процессе своей нормальной работы — это то, что большинство используемых алгоритмов congestion control воспринимают потери пакетов как сигнал о том, что канал забит и надо снизить скорость. В итоге получаем, что на том же EDGE оно выглядит как "интернета нет совсем".
Гугл попробовал решить эту проблему с помощью TCP BBR, который предполагается накатывать на сервер, и который на потери пакетов смотрит не особо, зато смотрит на увеличение RTT при увеличении количества отправляемых пакетов в единицу времени. Использует его, например, ютуб для отдачи видео. Ещё я себе на сервер поставил недавно)