Назад | Перейти на главную страницу

Повторная передача TCP застряла

Повторные передачи TCP застряли

У меня есть клиент и сервер tcp, работающие на Ubuntu 14.04 (ядро 3.13.0-170-generic). Клиент выгружает данные на сервер. Если во время передачи теряется довольно большой объем данных (например, 60 сегментов TCP, 1460 байт каждый), мой клиент застревает при повторной передаче сегментов TCP. После каждой повторной передачи клиент также отправляет 2 автоматических сегмента и затем ожидает времени RTO. Наконец, RTO становится равным 120 секундам, и мой клиент повторно передает один сегмент каждые 2 минуты, пока все эти 60 потерянных сегментов не будут повторно переданы. После этого все снова идет хорошо. Скриншот дампа TCP

SACK выключен, вот вывод ss -i (где значение cwnd?):

tcp    ESTAB      0      436150    192.168.3.10:51530     198.73.21.200:9081    
 cubic wscale:7,7 rto:120000 rtt:80.5/10 ato:40 mss:1460 ssthresh:2 send 290.2Kbps unacked:272 retrans:0/34 lost:270 rcv_space:29200

Итак, вопрос - это правильное поведение протокола TCP? Эта повторная передача может занять довольно много времени и резко снизить производительность.