Разница в использовании сети между одним и несколькими TCP-соединениями

381
xavier666

Мы знаем, что способ (базовый) TCP работает, начиная с фазы медленного старта с последующим линейным увеличением окна перегрузки (CWD). CWD настраивается в соответствии с состоянием сети. Поэтому, как только мы установим соединение, потребуется некоторое время, чтобы соединение достигло стабильного CWD, в зависимости от состояния сети.

Таким образом, по этой логике TCP-соединение будет пытаться заполнить все доступные ч / б ссылки. Таким образом, если имеется несколько TCP-соединений, каждое из них настроит свой CWD таким образом, чтобы минимальная перегрузка.

Итак, предположим, у меня есть канал 100 Мбит / с (топология приведена ниже). У меня есть приложение, которое отправляет UDP-трафик. У меня есть другое приложение, iperfкоторое может инициировать параллельные соединения TCP по той же ссылке.

[h1] ---- 100 Mbps ---- [h2]  h1 (UDP + iperf client) h2 (UDP + iperf server) 

Я делаю эксперимент следующим образом

  1. 1 UDP + 1 TCP
  2. 1 UDP + 2 TCP
  3. 1 UDP + 4 TCP
  4. 1 UDP + 8 TCP и т. Д.

Мой вывод говорит, что пропускная способность 1 TCP-соединения ниже, чем пропускная способность 8 TCP-соединений вместе взятых (Exp 1 против Exp 4). Следует иметь в виду, что индивидуальная пропускная способность 8 соединений значительно ниже (что очевидно).

Итак, мой вопрос: почему одно TCP-соединение не может использовать полное ч / б, которое 8 TCP может сделать вместе?

1
Вы не добавили подробности того, как вы использовали `iperf`, но предполагаете: 8 соединений TCP приводят к тому, что больше пакетов UDP отбрасывается, чем 1 соединение TCP, поэтому один UDP получает меньшую пропускную способность, поэтому общая используемая пропускная способность 8 соединений TCP выше , Первое, что я хотел бы сделать, это измерить, сколько пакетов UDP отброшено во всех случаях. dirkt 6 лет назад 0

1 ответ на вопрос

1
Spiff

Если вы используете CUBIC или другой алгоритм управления перегрузкой AIMD, когда он достигает перегруженности, он быстро немного понижает скорость, а затем медленно увеличивает ее, чтобы снова найти максимум. Это оставляет небольшие «гребешки» (в графике tcptrace) неиспользованной полосы пропускания, которые могут заполнять другие потоки. Если поток UDP имеет фиксированную скорость, он не заполнит эти пробелы. Но другие конкурирующие потоки TCP, безусловно, будут. Я подозреваю, что чем больше у вас потоков TCP, тем больше они будут заполнять любую полосу пропускания, оставленную мерами контроля перегрузки других.