Daniel Ginsburg ([info]dbg) wrote,
@ 2007-03-04 12:53:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
[info]netch показал небезынтересный тред в f.r.u.b. Собственно, обсуждение от конкретной ситуации там быстро перешло к фрагментации и PMTUD вообще. Это далеко не единственное обсуждение PMTUD, благо проблема реальная, вредная и до сих пор без удовлетворительного решения. Пожалуй, попробую изложить, что я по этому поводу думаю.

Итак, у нас есть пакетная сеть, как обычно, состоящая из узлов и линков между ними. Разные линки могут поддерживать разный максимальный размер пакета, который можно по этому линку передать. Это называется Hop MTU, или просто MTU. Часто MTU имеет некоторый гарантированное минимальное значение, например для IPv4 сетей - это 68 байт (распространенное заблуждение: 576 байт, но это неправильно. 576 байт - это минимальный reassembly buffer, т.е. это гарантии для end host'а, а не для сети), для IPv6 - 1280 байт. Минимальное значение Hop MTU на пути от узла A к узлу B называется Path MTU.

Если мы хотим, чтобы узлы A и B могли говорить друг с другом у нас есть следующие варианты:
1) посылать только пакеты не более чем минимального гарантированного размера
2) посылать пакеты побольше и позволить сети их фрагментировать, если потребуется
3) каким-то образом понять, каков Path MTU между общающимися узлами и использовать пакеты не более такого размера

Понятно, что вариант 1 - это ну очень неэффективно. В IPv6 с этим чуть полегче, но все равно недостаточно хорошо.

Вариант 2 тоже не очень хорош по нескольким причинам.

Во-первых, фрагментация в IPv4 сломана. По этому поводу есть "IPv4 Reassembly Errors at High Data Rates" (в предыдущих редакциях этот драфт назывался "Fragmentation Considered Very Harmful"). Очень советую прочитать.

Во-вторых, фрагментация неэффективна. Неэффективное использование полосы и увеличение packet rate, проблемы при потере фрагмента, трудности обратной сборки - это все описано в классической статье Kent & Mogul.

В упомянутой дискусси [info]netch заметил: На самом деле здесь самая тяжёлая диверсия - то, что needfrag является ICMP.:(( Даже если ICMP не режется, часто ставится предельная субполоса на него (например до 5% канала). Если кто-то один вдруг начинает гнать мусор типа ping flood, страдают все.

Это верно, но не до конца. Проблема не столько в том, что это ICMP, а сколько в том, что обработка пакетов, непролезающих в следующий линк - дорогое удовольстивие, что с фрагментацией, что с генерацией "fragmentation needed and DF set", и эта операция реализуется в slow path. Поэтому, нередко ставятся rate limits на эту операцию. Соотвественно, можно как самому налететь на такой rate limit и получить существенную потерю пакетов, так и нарваться на намеренное и злоумышленное исчерпание этого лимита.

И, наконец, вариант 3. Всем бы он был хорош, если б работал. Проблемы классического PMTUD многократно перетерты и подробно расписывать их я не стану: обезьяна с гранатойМСЭ, сбрасывающие все ICMP без разбору, упомянутые выше rate limits на генерацию ICMP, органичения по полосе на ICMP - это все широко известно.

Попробуем порассуждать, как вообще можно было бы подойти к проблеме фрагментации и Path MTU.

Можно было бы заставить протокол маршрутизации распространять информацию о Path MTU к разным сетям. Такое уже делалось. Например IGRP и EIGRP в составе метрики приносят значение Path MTU к той или иной сети (правда, это никогда и никак не использовалось, насколько я помню). В принципе, ничто не мешало сделать такое и в BGP, и других IGP (одним только BGP обойтись нельзя из-за того, что iBGP соседи могут не быть соединены напрямую). Никакой особой хитрости тут нету. Добавляем атрибут MTU, при первичной генерации BGP-маршрута берем либо статически сконфигурированное значение, либо, если у нас редистрибуция, то берем значение оттуда, откуда редистрибутим. При дальнейшем анонсировании выбираем min(route MTU, MTU to next-hop). У агрегированного маршрута - min(MTU всех агрегируемых маршрутов).

Как это можно было бы использовать? Можно было бы заставить first hop router либо фрагментировать пакеты, либо отбиваться needfrag'ом. Как было б хорошо: first hop router разобрался с фрагментацией и понеслись пакеты по привольному интернету быстренько и гладенько. И ничего страшного, если FHR напряжется - это все-таки network edge, там положено напрягаться.

Сработало бы такое? Нет.

First hop router в подавляющем большинстве случаев сидит с одним единственным маршрутом, касающимся интернета, - с default route. А это значит, что с этим default route ассоциирован либо минимальный из всех MTU во всем интернете, если этот default - BGP-derived (поскольку порождение дефолта - это по сути дела экстремальная агрегация), либо MTU, взятый с потолка, если маршрут сконфигурен статически. Соответственно, либо совершенно ненужное понижение MTU для для всех пакетов, идущих через этот FHR, либо разборки с фрагментацией сдвинуты на первый в пути роутер с полной таблицей. Первое плохо - это не только неэффективно, но и просто опасно: кто-нибудь очень умный санонсировал маршрут с атрибутом MTU=100 и привет, 90% пакетов в интернете стали не длиннее сотни байт и интернет кончился. Второе тоже плохо: DFZ-роутеров не так уж много, получают они высокоскоростной агрегированный трафик, поэтому концентрировать еа них нагрузку по разборкам с фрагментацией - совершенно неправильно.

Т.е. идея это гиблая.

Значит, нам ничего не остается, кроме как заставить хосты заниматься "разведкой" Path MTU. Как это можно организовать?

Во-первых, классический PMTUD, основанный на ICMP needfrag. Во-вторых, PMTUD, основанный на потерях больших пакетов.

С первым мы уже разобрались, почему он работает через раз.

Второй действует довольно просто, я процитирую: "The proposed new method does not rely on ICMP or other messages from the network. It finds the proper MTU by starting a connection using relatively small packets (e.g. TCP segments) and searching upwards by probing with progressively larger test packets (containing application data). If a probe packet is successfully delivered, then the path MTU is raised. The isolated loss of a probe packet (with or without an ICMP can't fragment message) is treated as an indication of a MTU limit, and not a сongestion indicator."

Что можно сказать про второй метод, чем он хорош, и чем он нехорош? Хорош он, очевидно, тем, что от сети не надо никакого интеллекта, кроме умения сбрасывать пакеты, которые не лезут в следующий линк. Чем нехорош? Специфицирован он только для TCP и SCTP, но ничто не мешает поступить похожим образом для любого протокола с двунаправленным потоком между общающимися хостами. Однако, если поток однонаправленный, т.е. никаких подтверждений с той стороны не предусмотренно, то такой метод работать не будет. А вот классический PMTUD мог бы с такой ситуацией справиться.

Можно нафантазировать еще один метод. Метод Кровавого Обрезания. Пусть есть пакет, который не лезет в следующий линк. Вместо того чтобы его фрагментировать, берем и отрезаем ему половину жопы передаем от этого пакета сколько пролезает и устанавливаем ему в заголовке соотвественный битик. Получатель видит обрезанный пакет и сигнализирует передатчику "давай-ка помельче пакетики". Как сигнализирует? Лучше всего piggyback на протоколе повыше уровнем в рамках того же соединения - заведомо не дропнут файрволом, не зажмут полосу и т.п. Недостаток у этого метода тот же - работает только для двунаправленных протоколов. Достоинства: 1) Кровавое Обрезание легко реализуется в ASIC'е 2) нет нужды строить предположения из-за чего потерялся пакет: из-за MTU, из-за congestion, или из-за банальной битовой ошибки в канале. Но такой метод требует поддержки на всех хостах, так что вряд ли мы увидим его в реальной жизни.

Итого. Все плохо. По крайней мере сейчас. Завтра появятся реализации draft-ietf-pmtud-method и какую-то часть проблем это решит. Что же делать сегодня? Неформально стандартизоваться на гарантированном MTU 1500. В принципе, оно так и есть сейчас. А тех операторов сетей, которые не понимают, что это established industry practice и умудряются поломать MTU на транзите, надо расстреливатьучить.



(Post a new comment)


[info]iskatel
2007-03-04 11:43 am UTC (link)
Помнится, раньше многие веб-сервера типа того же mail.ru любили ставить DF бит., что создавало проблемы на тоннелях с кривой настройкой.
Эх, когда ж уже у всех будет гарантированнный mTU = 1500? 16К ещё лучше :)

(Reply to this) (Thread)


[info]netch
2007-03-04 06:34 pm UTC (link)
На TCP практически все сервера ставят DF. mail.ru тут не исключение.

(Reply to this) (Parent)(Thread)


[info]iskatel
2007-03-04 06:41 pm UTC (link)
Вот сочетание DF с mtu 1500 и дает нам грустную картину..

(Reply to this) (Parent)


[info]mt6561
2007-03-04 11:30 pm UTC (link)
Зато никто не мешает его снять по дороге.

(Reply to this) (Parent)


[info]tylersantisteb
2008-08-11 06:40 pm UTC (link)
MinSpareServers 1 MaxSpareServers 15 Параметры количества одновременно запускаемых серверов на каждый хост – первый не рекомендуют ставить 0, и не ставить достаточно большим из-за ограниченности памяти, второй – может быть достаточно большим.

(Reply to this) (Parent)


[info]mt6561
2007-03-04 12:45 pm UTC (link)
А что делать с VPN'ами?

(Reply to this) (Thread)


[info]dbg
2007-03-04 01:51 pm UTC (link)
Если твой VPN соединяет две подконтрольные тебе сети, то в этих сетях, наверное, все хорошо с прохождением needfrag?

(Reply to this) (Parent)(Thread)


[info]netch
2007-03-04 06:37 pm UTC (link)
А если нет возможности заставить реализацию IPSec или VPN работать как надо?

(Reply to this) (Parent)(Thread)

(no subject) - [info]dbg, 2007-03-04 06:48 pm UTC
(no subject) - [info]netch, 2007-03-04 07:52 pm UTC
(no subject) - [info]mt6561, 2007-03-04 11:29 pm UTC
(no subject) - [info]dbg, 2007-03-05 08:41 am UTC
(no subject) - [info]netch, 2007-03-05 09:25 am UTC
(no subject) - [info]dbg, 2007-03-05 10:02 am UTC
(no subject) - [info]iskatel, 2007-03-04 08:36 pm UTC
(no subject) - [info]mt6561, 2007-03-04 11:28 pm UTC
(no subject) - [info]netch, 2007-03-05 09:31 am UTC
(no subject) - [info]micahbeury, 2008-08-11 12:17 pm UTC
(no subject) - [info]mt6561, 2007-03-04 11:01 pm UTC
За что люблю профессионалов
[info]kir16
2007-03-04 01:03 pm UTC (link)
Прочел воспоминания подводника - удивился, как они вообще из походов возвращаются. Летчика гражданской авиации прочел - сразу мысли, может, не летать больше никогда? И здесь та же фигня - мы вообще как сейчас общаемся?

(Reply to this) (Thread)

Re: За что люблю профессионалов
[info]dbg
2007-03-04 02:03 pm UTC (link)
Так и общаемся, да. Кто-то гонит все с сетевой фрагментацией (т.е. без DF), кто-то выставил себе MTU на важных серверах 1400, чем обходит большинство подлянок с туннелизацией и т.п. Но вообще интернет в большей своей части 1500-transparent.

(Reply to this) (Parent)(Thread)

Re: За что люблю профессионалов - [info]kir16, 2007-03-04 02:06 pm UTC
Re: За что люблю профессионалов - [info]dbg, 2007-03-04 02:11 pm UTC
Re: За что люблю профессионалов - [info]kir16, 2007-03-04 02:33 pm UTC
Re: За что люблю профессионалов - (Anonymous), 2007-03-04 07:05 pm UTC
Re: За что люблю профессионалов - [info]dbg, 2007-03-04 07:07 pm UTC
Re: За что люблю профессионалов - [info]kir16, 2007-03-04 07:12 pm UTC

[info]reynaldobenord
2008-08-11 11:21 am UTC (link)
Что же касается разговора о риске, то его он вообще не принимал и, выслушивая наши предостережения, злился, так как считал, что обязан рисковать, когда это нужно для дела.

(Reply to this) (Parent)


[info]ru_pchel
2007-03-04 07:11 pm UTC (link)
А вот если представить на минутку, что можно за ночь весь Инет перевести на другие протоколы, технологии и так далее и сделать все по уму.... Ведь через 10 лет потомки опять костерить начнут?

И еще вопрос, в какой момент в классическом Инете появился первый костыль?

(Reply to this) (Thread)


[info]dbg
2007-03-04 07:17 pm UTC (link)
Хехе. Если посмотреть на всю историю интернета, то он и развивался как самоподдерживающаяся система костылей и подпорок. Одна только эволюция TCP чего стоит.

(Reply to this) (Parent)(Thread)

(no subject) - [info]ru_pchel, 2007-03-04 07:23 pm UTC
(no subject) - [info]dbg, 2007-03-04 07:27 pm UTC
(no subject) - [info]ru_pchel, 2007-03-04 07:28 pm UTC

[info]ishc
2007-03-05 01:59 pm UTC (link)
есть ещё одна ситуация, которая лечится только через анализ дропов или КО. Это когда хост и рад бы ответить fragmentation required, да не может: карточка дропает такой пакет ещё до обработки чем-либо. Частый пример -- max size пакет завёрнутый во vlan.

(Reply to this) (Thread)


[info]dbg
2007-03-05 02:40 pm UTC (link)
Да, точно. И такой сценарий тоже бывает. Это частный случай ситуации, когда узлы с общим линком имеют разные идеи о том, каков MTU этого линка. Многие роутинговые протоколы в такой ситуации adjacency не поднимут, что есть, безусловно, гут.

КО, кстати, тут не поможет. Получающий узел не обрежет, ибо пакета не увидит. А отправляющий не обрежет, т.к. не знает, что надо бы обрезать.

(Reply to this) (Parent)(Thread)

(no subject) - (Anonymous), 2007-03-05 02:58 pm UTC
(no subject) - [info]ishc, 2007-03-05 03:03 pm UTC

[info]semenyaka
2007-03-05 08:57 pm UTC (link)
Кровавое обрезание, взятое, по-видимому из DNS (где оно, однако, на конечном хосте живёт), не очень выход. Потому что там, где есть асики, обычно нет (и даже и быть не может по причине неработы, например) тунелей. А где они есть - там нет асиков. В результате КО пойдёт по [very] slow path, и некуда бедному крестьянину подяться. Про переделку всех протоколов (начиная с самого IPv4, в свете существования IPIP, например) сказано. Про потоковые протоколы, особенно мультикастовые, можно и не упоминать.

(Reply to this) (Thread)


[info]dbg
2007-03-05 09:11 pm UTC (link)
Ох, не знаю я, откуда я спер идею про КО. Я этот метод сымпровизировал по ходу пьесы. Мог и из DNS'а.

Что касается ASIC'ов и неACIS'ов:

> там, где есть асики, обычно нет (и даже и быть не может по причине неработы, например) тунелей

Ну, проблема разных MTU она ведь не только на туннелях вылезает. Линков с разными MTU навалом.

> В результате КО пойдёт по [very] slow path, и некуда бедному крестьянину подяться

Не согласен. КО легко реализовать в том же самом forwarding path, что и обработку остальных пакетов.

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

Ну, а про всякие однонаправленные вещательные штуки я тоже вроде бы упомянул.

(Reply to this) (Parent)(Thread)

(no subject) - [info]semenyaka, 2007-03-05 09:29 pm UTC
(no subject) - [info]dbg, 2007-03-05 09:44 pm UTC
(no subject) - [info]semenyaka, 2007-03-05 10:19 pm UTC
(no subject) - [info]dbg, 2007-03-06 09:06 am UTC
(no subject) - [info]semenyaka, 2007-03-06 09:57 am UTC
(no subject) - [info]dbg, 2007-03-06 11:55 am UTC
(no subject) - [info]semenyaka, 2007-03-06 01:31 pm UTC
(no subject) - [info]dbg, 2007-03-06 01:49 pm UTC
(no subject) - [info]semenyaka, 2007-03-06 02:24 pm UTC
(no subject) - [info]dbg, 2007-03-06 04:00 pm UTC
(no subject) - [info]semenyaka, 2007-03-07 01:22 pm UTC
(no subject) - [info]dbg, 2007-03-07 02:15 pm UTC

[info]gadm
2007-03-07 11:32 am UTC (link)
К сожалению, реальность жизни такова, что проблемы с Path MTU Discovery пока приходится лечить именно отрубанием яицголовы: выставлением на серверах MTU 1400. :(

(Reply to this) (Thread)


[info]visir
2007-03-08 07:10 pm UTC (link)
посмотрел какой mss приходит от наиболее популярных (на мой взгляд) ресурсов, нашел лишь два с mss отличным от 1460:

yandex.ru -- 1410 (=> mtu = 1450 ?)
mamba.ru -- 1380 (=> mtu = 1420 ?)

получается что у остальных проверенных (rambler.ru, mail.ru, aport.ru, rbc.ru, vz.ru, liveinternet.ru, livejournal.com, google.ru, youtube.com, dating.ru, spylog.ru, list.ru, photosight.ru, stream.ru, и некоторые другие) mtu таки 1500.

PS: не менее интересно чем обусловлен именно такой выбор mtu яндексом и мамбой... а может это только mss, а мту на интерфейсах 1500 ? )

(Reply to this) (Parent)(Thread)

(no subject) - [info]dbg, 2007-03-08 07:40 pm UTC
(no subject) - [info]dbg, 2007-03-08 07:50 pm UTC

[info]vovster
2007-03-11 04:16 pm UTC (link)
Интересна дискуссия ! Позвольте добавить свои пять копеек. В то время как
космические корабли бороздят просторы вселенной поддержка PMTU 1500 является насущной проблемой
есть необходимость подумать и о корректной поддержке больших PMTU например
9K или около того. Гигабитный Ethernet уже достаточно распространен (впереди 10G),
возможность включить Jumbo Frames тоже обычное дело. В такой сети тотальная поддержка PMTUD
и needfrag на граничном маршрутизаторе видимо единственный выход.

(Reply to this)

с опозданием замечу
[info]ivlad
2007-05-02 11:24 am UTC (link)
а почему б не повторить идею с FECN и BECN из FR с использованием IP Options?

(Reply to this) (Thread)

Re: с опозданием замечу
[info]dbg
2007-05-02 11:52 am UTC (link)
А, собственно, идея "кровавого обрезания" как раз использует некоторый мифический битик, который выполняет функции forward explicit mtu notification и обратную сигналицию. Про недостатки я уже писал.

(Reply to this) (Parent)

Знакомства с шотенкой Антониной
(Anonymous)
2008-02-17 10:16 pm UTC (link)
Незабываемые московские знакомства ждут вас на нашем сайте. Познакомьтесь с самыми красивыми девушками и парнями Москвы. Устройте себе лучшее московское знакомство. Любовь, дружба, страсть – все это так возможно. Знакомьтесь, общайтесь, и отдыхайте налегке. Наши чаты, новости и анекдоты, вам в этом помогут. http://www.ukrainianbride.biz/

(Reply to this)

Знакомства красивых девушек и парней
(Anonymous)
2008-03-27 12:55 pm UTC (link)
Современные знакомства часто начинаются со знакомств в Интернете. Для вас открыт проект, который позволяет найти партнера для любви, дружбы, переписки. Каждая девушка имеет возможность выбрать парня из тысячи анкет, а также завести знакомство с чувственными и богатыми иностранцами. Для вас работает чат, новости, и всегда свежие анекдоты
http://www.mallvina.com/

(Reply to this)


[info]lola04r
2009-02-18 03:43 pm UTC (link)
Доброе утро! А я замуж хочу. Знакомства с иностранцами, бесплатно это реально.

P.S. Благодарю за внимание.

(Reply to this)


Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…