Здравствуйте, ononim, Вы писали:
O>Ненене. Не нужно никаких ICMP. Они считать что ICMP проходит — то вообще ничего не нужно, PMTU discovery придуман давно, но он не работает когда ICMP блочится. Что является корнем проблемы с PMTU. Т.о. нужно определять PMTU без использования ICMP.
Ок, пытаемся.
C>>И всё, пользователь видит застывшую полосу загрузки. Через некоторый таймаут Гугл поймёт, что переборщил с размером пакетов и уменьшит его. Но тайамаут — это тормоза. O>Это однократный таймаут, потом все пакеты такому клиенту надо слать с определенным MTU, периодически в фоне проверяя нельзя ли его подрастить. Причем оптимальный MTU должен запоминать не только гугл, но и сам клиент.
ОК, сделали (кстати, оно реально тестировалось Гуглом). Но всё равно не работает. У части клиентов странички периодически затормаживаются на несколько секунд.
Проблема в том, что IPv4 пакеты могут сами по себе фрагментироваться и пересобираться. Но вот пересборка часто глючит (см. "middlebox") или вообще запрещена, как сатанистский ритуал, порочащий доброе имя IPv4. Если установить DF, то можно потерять ответы о невозможности доставки.
И в TCP для контроля за этим есть только настройка MSS, которая согласуется только один раз в SYN-пакетах в начале. Так что вот и получается, что оно как-то всё вместе не работает.
O>Встречный вопрос: а как тогда решается данная проблема QUIC'ом? Ведь явно на тех же таймаутах. Потому что больше надежных путем нету. Потому все еще в упор не вижу преимуществ QUIC'а над тюнингом TCP.
В QUIC периодически посылаются тестовые пакеты параллельно основному соединению. Для них замеряется время в пути и при удачности измерения — размер окна переключается на них.
C>>Сразу начинают придумываться идеи типа: "А что если одновременно послать один большой пакет, пока мы в фоне посылаем маленькие?". Но от этого middlebox'ам плохеет так, что они вообще соединение разрывают. O>О да, а от QUIC'а мидлбоксы будут расслабленно плевать в потолок
Да, так как они НИЧЕГО не смогут сделать без полноценной MITM-атаки. В QUIC нет никаких зацепок для middlebox'ов, кроме одного бита (который с трудом протащили в стандарт).