TCP - методы LRO / TSO - PullRequest
       3

TCP - методы LRO / TSO

0 голосов
/ 12 сентября 2011

Почему все задействованные интерфейсы (маршрутизаторы и мосты) должны поддерживать технологию LRO / TSO?

1 Ответ

2 голосов
/ 22 августа 2012

Маршрутизаторы нет.Мосты справляются.

Внешние маршрутизаторы, концентраторы, коммутаторы или что-либо еще, внешне подключенное к сети, не увидят эффектов TSO, только интерфейсы внутри устройства с TSO будут испытывать какие-либо эффекты - это программная вещь.

Маршрутизатор - это внешнее устройство, которое подключается к сети с помощью кабелей Ethernet, оптоволоконных кабелей, беспроводных коммуникаций и т. Д. Эти средства связи соответствуют международным стандартам, таким как 803.2 для Ethernet или 803.11 для беспроводных - ониАппаратные устройства и аппаратные устройства имеют очень строгие правила взаимодействия.

Мост - это внутренняя программная конструкция, специфичная для вашей ОС.

Давайте использовать 803.2 (ethernet)и хост Linux в качестве примера.

Приложение требует создания сокета, а затем помещает большой кусок данных в сокет.Ядро linux определяет, по какому интерфейсу должны передаваться эти данные.Затем ядро ​​запросит драйвер для этого интерфейса, чтобы определить его возможности. Если интерфейс поддерживает TSO, ядро ​​передаст интерфейсу sk_buff с единственным заголовком «шаблона» и огромным порцией данных (стоимостью более 1 пакета).Водитель.

Давайте сначала рассмотрим стандартный интерфейс непосредственно к аппаратной сетевой плате:

Некоторые интерфейсы имеют поддельное TSO (они сегментируют пакет в драйвере), а некоторые имеют истинное TSO (заголовок шаблона и данные передаются на оборудование с минимальными изменениями).На этом этапе Ether драйвер или аппаратная плата NIC преобразуют этот большой сегмент данных в несколько стандартных 803.2 Ethernet-фреймов, соответствующих стандарту. Именно эти фреймы соответствуют внешнему устройству, например маршрутизатору, концентратору, коммутатору, модему или другому хосту.увидим по проводам.

Теперь давайте рассмотрим несколько сетевых карт за программным мостом:

Хотя ядро ​​знает о каждом сетевом адаптере на низком уровне, сетевой стекзнает только о невесте, таким образом, только возможности, которые ВСЕ базовые NIC имеют, должны быть переданы на мост.Если sk_buff передается мосту, то ВСЕ интерфейсы в мосте получат один и тот же sk_buff.Предположим, что кернал еще раз передал наш большой TSO sk_buff мосту, если какой-либо из нижележащих интерфейсов не поддерживает TSO, то пакет, скорее всего, будет отброшен рассматриваемой сетевой платой.

В итоге:

В худшем случае мост будет многократно повторять попытку отправить один и тот же кусок данных на сломанном интерфейсе, и весь мост будет заблокирован, пока приложение не решит отказаться.В лучшем случае, NIC, не являющийся TSO, просто будет казаться мертвым.

При этом, если у NIC есть небезопасный код в драйвере, это может вызвать ошибку сегментации, которая может привести к поломке всей системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...