LINUX.ORG.RU

Транзитные пакеты, LRO vs MTU

 , lro, ,


0

2

Система FreeBSD.

Ситуация такая: входящие пакеты собираются сетевухой LRO в один большой tcp-сегмент. Дальше оно должно роутиться на другой интерфейс, в него такой большой пакет не влезает. Даже если послать назад icmp ошибку, исходный хост же не виноват в ситуации и исправить ничего не сможет. TSO на втором интерфейсе нет.

Очевидное решение - отключить LRO, но есть и нетранзитные соединения (их даже большинство), где он полезен. Какие у кого есть мысли по этому поводу?

Способов нарезать назад большой tcp-сегмент на маленькие же нет? (речь не про ip фрагментацию а перепаковать именно tcp)

★★★★★

Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от vel

При чём тут оффтопик?

И это не маршрутизатор, маршрутизация побочная функция.

А хотя кажется есть решение чтобы остальным LRO не отключать - можно транзитное на отдельную сетевуху вынести и на ней отключить.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Для меня freebsd здесь оффтопик :)
Сетевая карта собирает пакет и передает его в систему в виде набора фрагментов.
IMHO при форвардинге это список фрагментов повторно перепослать не так сложно.

А какой из интерфейсов у тебя не умеет tso?

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от firkax

можно транзитное на отдельную сетевуху вынести и на ней отключить

Создать отдельную таблицу для транзитных пакетов и в нее запихнуть трафик:

pass in on em0 proto tcp from any to <dst net> rtable 1

Второй интерфейс без LRO запихнуть в эту таблицу:

ifconfig em1 fib 1

Отроутить туда, куда нужно:

setfib 1 route delete default
setfib 1 route add default 192.168.2.1
iron ★★★★★
()
Ответ на: комментарий от firkax

Я пока не могу представить схему твоей сети, но если ты можешь поменять маршруты в своей сети так, чтобы транзитный трафик приходил на отдельный интерфейс, то IMHO это будет лучшим решением.

Из исходного поста непонятно, есть ли у тебя возможность изменять что-то за пределами хоста с бсд.

vel ★★★★★
()
Ответ на: комментарий от iron

Да нет, всё проще, айпишник на который приходит транзитный трафик назначается на другой интерфейс просто, и этот интерфейс включается в ту же локалку что и первый.

firkax ★★★★★
() автор топика
Ответ на: комментарий от vel

Маршруты внутри локалки управляются ARP-ом, так что управлять ими можно ничего снаружи не трогая. Вот если бы один и тот же айпи был одновременно и для собственного пользования и чьим-то гейтом то да, кроме как отключить LRO всем варианта бы наверно не было.

firkax ★★★★★
() автор топика
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от vel

У асимметричного трафика опасность такая: если интерфейс для входящих пакетов никогда ничего не шлёт в ответ - свитчи начинают его трафик рассылать широковещательно. Но, по крайней мере с фрибсд, я проверил - arp ответы уходят в тот же интерфейс где айпи-адрес назначен, т.е. всё норм. А так, можно и специальные правила чтобы транзит в обратную сторону тоже через него слать, но в данном случае это несущественно.

firkax ★★★★★
() автор топика