Как Linux препятствует тому, чтобы приложения отправили больше пакетов, чем ссылка может обработать, не отбрасывая пакеты?

Я не мог сделать вопрос немного более ясным, таким образом, вот сценарий в качестве примера:

Учитывая машину Linux, подключенную к сети IP через физический интерфейс пропускной способности 10 Мбит/с (или более высокая скорость взаимодействуют через интерфейс с tc маркерным фильтром блока для ограничения уровня 10 Мбит/с).

На удаленной машине (с равной скоростью или более быстрой ссылкой) запускают iperf сервер UDP:

iperf -s -u -i 1

На локальной машине запускают iperf клиент с bw=20Mbps:

iperf -c <server ip> -u -i 1 -b 20M

Наблюдение: отправитель никогда не превышает уровень на 10 Мбит/с (определенный на канальном уровне или в аппаратных средствах или в tc qdisc).

Я ожидал видеть, что отправитель выставляет ценность на 20 мегабит пакетов, второе порождение локальной tx очереди интерфейса расти и потери пакетов начинает происходить. Но дело обстоит не так. Почему?

Я попытался изучить net/sched папку к ядру Linux, но я, может казаться, не нахожу источник этого поведения.

Цените Вас справка. Также не стесняйтесь предлагать, чтобы изменения в заголовке сделали это более релевантным.

2
28.02.2015, 01:49
2 ответа

Локальная машина ограничена полосой пропускания NIC, которая передается от NIC в стек.У вас будет дросселирование потока на основе этого значения.

Вы можете попробовать параллельные потоки (-Параметр P )для создания нескольких потоков, каждый из которых ограничен скоростью сетевой карты, но все пытаются продвигать 10 Мбит/с

0
27.01.2020, 22:21

Грубо говоря, обычно пакеты хранятся в так называемых корзинах, в хранилище -и -пересылке -подобным образом, и отправляются по сети с течением времени, обеспечивая предопределенную пропускную способность. Их не всегда выбрасывают. Вот почему в зависимости от того, какой метод QoS вы используете, количества клиентов, за которыми вы следите, и общей конфигурации, затраты ЦП и памяти могут быстро возрасти.

Мы можем реализовать QoS (Качество обслуживания )на нескольких уровнях OSI. Мы можем сделать это в Squid Proxy Server, в интерфейсе RouterOS или предоставить определенные сетевые протоколы через соответствующие порты.

С уважением.

0
27.01.2020, 22:21

Теги

Похожие вопросы