...а главное, зачем, спросите вы. О-о-о-о, это долгая история.
Когда коту нечем заняться, он [censored] лижет. А когда сисадмин не может ночью заснуть, он свой андроид ковыряет. И что-то вот у него никак не хотела по-нормальному синхронизироваться гугловская RSS-читалка с гугловским же сервером. Одминко задумался. А потом внезапно вспомнил, что это ж боян.
Почему-то именно на Linux при подключении к некоторым отдельно взятым провайдерам наблюдается проблема с MTU Path Discovery между клиентским устройством и серверами гугла. Притом, что характерно, только в одном направлении: от клиента на Google. Что больше всего странно, толстые пинги вполне себе долетают. Однако электронные письма с жирными аттачами или загружаемые в поисковый интерфейс картинки не проходят. Что это и почему, для меня до сих пор загадка. Хотя после приснопамятных приколов с йотой и TCP Timestamps я уже перестаю чему-либо удивляться.
[ Читать дальше]Но одно я знаю точно. Если на клиенте уменьшить MTU до 1440 байт, к примеру, то гугл начинает нормально работать. И такая ситуация наблюдается не только у меня, и не только в России, достаточно поискать по словам "Google MTU".
А потом я внезапно вспомнил о чём рассказывал Владимир Иванов на YaC-2012. Всё-таки не зря я туда съездил. Оказывается, если в операционной системе имеется поддержка одновременно и IPv4, и IPv6, то последний автоматически становится более приоритетным. И ежели от DNS-сервера на запрос разрешения какого-либо доменного имени внезапно прилетит AAAA-ответ, то есть будет присутствовать хотя бы один IPv6-адрес, а провайдер линка по IPv6 не предоставляет, то что будет? Ага, попытка коннекта по IPv6, отлуп либо таймаут, затем попытка коннекта по IPv4. А теперь представьте, что вы пытаетесь загрузить веб-страничку, на которой, к гадалке не ходи, куча всякой прилинкованной муры со 100500 различных доменов... Да-да, время загрузки браузером такой странички плавно улетает в небеса.
Поэтому если ваш провайдер не умеет IPv6, то единственным разумным решением является отключить поддержку последнего и у себя тоже. И если с виндой и линуксом всё более-менее понятно, то как это сделать на андроиде? На не-рутованном телефоне, увы, никак.
Но у меня телефон рутованный. И эмулятор терминала тоже установлен. Поэтому отца русской демократии спасают следующие заклинания в консоли:
su -
mount -o remount,rw /system
echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /system/etc/sysctl.conf
mount -o remount,ro /system
и после этого перезагрузка телефона.
Поцаны, я был просто в тихом [censored], когда попробовал после описанных нехитых манипуляций посерфить по инету. Оказывается, он может работать очень быстро! Реально быстро! Я раньше грешил на тормознутость самого телефона и на вроде как слабенький процессор. Но теперь я понял, что на самом деле у меня довольно крутой гаджет, и что на нём можно вполне себе комфортно смотреть странички и не только. Да и синхронизации со всякими онлайн-сервисами стали проходить просто "в лёт", Яндекс.Почта перестала тупить. Разница видна невооружённым глазом. Сказать что я офигел - значит не сказать ничего. Как только я не догадался вырубить IPv6 раньше...
Единственное, что во всей этой истории слегка ломает кайф - это необходимость запускать скрипт для уменьшения MTU на wlan0 (я для этого использую софтинку GScript Lite) всякий раз после реконнекта к беспроводной сети aka Wi-Fi. Я иногда забываю это сделать, а потом долго не фффтыкаю, почему синхронизация с гуглом идет так ме-е-е-едленно и с ошибками. А вот способа прибить гвоздями этот самый MTU, чтобы он сохранялся после перезагрузок и реконнектов, я так и не смог отыскать. Если мне кто-нибудь покажет на него пальцем, буду благодарен.