ECN: Explicit Congestion Notification

Od jisté doby se mi www stránky na některých veřejných serverech nezobrazují. Skončí třeba na 20 procentech nebo s chybou vypršení časového limitu - vypadá to, jako by server neexistoval nebo neodpovídal na požadavky. Přitom na ping odpovídá, a kamarád z windows se na stejný web dostane. Co je špatně a co se s tím dá dělat?

Linuxová jádra z řady 2.4, novější a také některá starší přidávají podporu TCP Explicit Congestion Notification, zkráceně ECN. V řadě distribucí se tato možnost implicitně zapíná. Avšak zdaleka ne všechna síťová zařízení, jako např. firemní směrovače (včetně hardwarových řešení značky jako je Cisco) a nedokonale spravované servery, podporují ECN správně: paket označený tcp příznakem ECN například zahodí jako neplatný jen proto, že ve starší specifikaci normy je bit označen jako rezervovaný, byť zároveň norma v takovém případě přikazuje bit ignorovat. Na požadavek uživatele pak nepřijde žádná odpověď, což prohlížeč interpretuje jako nefunkční web. Pokud směrovač ECN nepodporuje, má congestion bit ignorovat a nic hrozného se nestane nikomu.

Možnosti jsou v zásadě 2: upozornit druhou stranu na chybné chování a doufat v rychlou nápravu nebo ECN na svém stroji s pomocí sysctl vypnout. Nejprve se přesvědčte, že je to opravdu váš případ:

$ sysctl net.ipv4.tcp_ecn
net.ipv4.tcp_ecn = 1

Poté změňte hodnotu tcp_ecn na 0:

# sysctl -w net.ipv4.tcp_ecn=0
net.ipv4.tcp_ecn = 0

Požadovanou změnu může provést pochopitelně jen uživatel s administrátorským oprávněním. V případě www proxy/cache může být nutné provést tuto změnu i na ní.

Další informace a odkazy:

Dostatečně dobré vysvětlení ale podává už nápověda při konfiguraci jádra:

CONFIG_INET_ECN:
Explicit Congestion Notification (ECN) allows routers to notify
clients about network congestion, resulting in fewer dropped packets
and increased network performance. This option adds ECN support to the
Linux kernel, as well as a sysctl (/proc/sys/net/ipv4/tcp_ecn) which
allows ECN support to be disabled at runtime.

Note that, on the Internet, there are many broken firewalls which
refuse connections from ECN-enabled machines, and it may be a while
before these firewalls are fixed. Until then, to access a site behind
such a firewall (some of which are major sites, at the time of this
writing) you will have to disable this option, either by saying N now
or by using the sysctl.