← Cloudflare One / cloudflare-one / networks / connectors / cloudflare-wan / reference
Maximální přenosová jednotka a maximální velikost segmentu
Cloudflare WAN zabaluje váš provoz do dalších hlaviček (zapouzdření), čímž se zmenšuje efektivní prostor dostupný pro vaše původní data v každém paketu. Pokud s touto režií nepočítáte, mohou být pakety pro danou síťovou cestu příliš velké a dojde k jejich zahození nebo fragmentaci, což vede ke snížení výkonu nebo výpadkům spojení. Tato stránka vysvětluje dvě klíčové hodnoty, které je třeba nastavit: maximální přenosovou jednotku (MTU) a maximální velikost segmentu (MSS).
MTU a MSS
maximální přenosová jednotka (MTU) ↗ je hodnota vyjadřující největší datový paket, který zařízení připojené k síti přijme. MTU se v síťové komunikaci téměř vždy vztahuje na vrstvu 3 modelu OSI (Open Systems Interconnection) a zahrnuje celý paket včetně všech hlaviček (Transmission Control Protocol (TCP), Internet Protocol (IP) atd.) i samotných dat (payloadu). Pakety například nesmí přesáhnout 1 500 bajtů, aby mohly být směrovány přes internet.
maximum segment size (MSS) ↗ označuje množství dat, které lze odeslat v jednom TCP datagramu. Tuto hodnotu určíte odečtením velikosti hlaviček IP a TCP od MTU, které routeru udává, jak velký může být payload. Vztahuje se na vrstvu 4 modelu OSI v síťování.
Jedním z běžných mylných představ o MSS/MTU je, že nastavení těchto hodnot negativně ovlivňuje výkon. Mírný dopad na výkon sice existuje, ale horší je tyto hodnoty nenastavit podle specifik vaší sítě.
Zapouzdření
Cloudflare WAN poskytuje své služby pomocí zapouzdření, proto je důležité rozumět tomu, proč v tomto případě záleží na hodnotách MTU a MSS.
Zapouzdření zvětšuje paket o několik bajtů, protože Cloudflare přidává ke každému paketu novou hlavičku IP a (často) i určitou zapouzdřující hlavičku. Například v případě Generic Routing Encapsulation (GRE) pro Internet Protocol version 4 (IPv4) přidává zapouzdření 24 bajtů: 20 bajtů pro hlavičku IPv4 a 4 bajty pro tunelovou hlavičku GRE.
Síťové rozhraní, které provádí zapouzdření GRE, musí kvůli přidané režii snížit svou hodnotu MTU. Maximální velikost MTU je 1,500 bajtů, takže u IPv4 se MTU sníží na 1,476 bajtů (původních 1,500 bajtů minus 24 bajtů na zapouzdření GRE). Tato snížená hodnota MTU určuje maximální velikost paketu IP, který dokáže GRE zapouzdřit.
Fragmentace
Pokud je datový paket větší, než dokáže síťové rozhraní přijmout, musí ho síť buď zahodit, nebo rozdělit na menší pakety. Při fragmentaci Cloudflare přijímá pouze datové pakety, které dokáže kompletně znovu sestavit. Pokud některé fragmenty chybí, Cloudflare zahodí všechny přijaté fragmenty. Cloudflare nepředává neúplné pakety zákazníkovi.
Nastavení bitu do not fragment (DF) v hlavičce TCP na 1 znamená, že síť musí paket zahodit, a ne fragmentovat, pokud je větší než MTU, které dokážou přijmout mezilehlá síťová zařízení. Většina implementací TCP nastavuje bit DF na 1 a zabraňte potenciálním problémům způsobeným fragmentací.
Pokud řešíte problémy s fragmentací a nemůžete nastavit MSS clamp, Cloudflare za vás může vymazat bit DF. Po zapnutí této možnosti Cloudflare fragmentuje pakety větší než 1,500 bajtů a vaše infrastruktura je po dekapsulaci znovu sestaví. Použijte tuto možnost jen jako poslední řešení. Pro další informace kontaktujte svůj account team.
Fragmentace v Cloudflare WAN
Uvažujme datagram UDP o velikosti 3,000 bajtů (8 bajtů pro hlavičku UDP + 2,992 bajtů pro data UDP). Aby se vešel do standardní MTU o velikosti 1,500 bajtů, byl by tento datagram UDP rozdělen do tří IP paketů následovně:
Předpokládejme, že datagram UDP má zdrojový port 389 a jehož cílem je IP adresa zákazníka Cloudflare WAN. Předpokládejme také, že zákazník Cloudflare WAN má nastavené pravidlo brány firewall, které zahazuje provoz UDP se zdrojovým portem 389, společný Bezspojový protokol Lightweight Directory Access Protocol (CLDAP) ↗ vektor reflexního útoku.
Tři předchozí fragmenty paketu dorazí do Cloudflare, ale pouze první fragment obsahuje hlavičku UDP s informací o zdrojovém portu. Druhý a třetí fragment obsahují data UDP, ale neobsahují informace z hlavičky UDP.
Otázkou tedy je, které z těchto fragmentů Cloudflare zahazuje a které doručuje zákazníkovi. Pokud Cloudflare zahazuje pouze první části fragmentovaných paketů, zbývající části mohou při útoku typu Denial of Service (DoS) stále generovat velké množství provozu.
Jak Cloudflare zpracovává fragmenty
Následující diagram znázorňuje, jak tři fragmenty UDP z předchozího příkladu procházejí přes Cloudflare a Cloudflare WAN. Hlavní poznatky jsou tyto:
- Cloudflare zákazníkům nikdy neposílá neúplné pakety: Pokud Cloudflare nevidí všechny části paketu potřebné k jeho úplnému opětovnému sestavení, neodešle částečné datové fragmenty zákazníkovi.
- Cloudflare Network Firewall pracuje s plně sestavenými pakety, nikoli s jednotlivými fragmenty: To znamená, že filtry, které se shodují například na informacích v hlavičce UDP/TCP, se použijí na celý znovu sestavený paket, nikoli jen na počáteční fragment. Cloudflare neposkytne zákazníkům jiné než počáteční fragmenty.
- Zákazníci mohou i nadále vidět fragmentované pakety: Ve výchozím nastavení (bez
clear_dont_fragment_bitnastaveno) Cloudflare fragmentuje pakety tak, aby se vešly do nakonfigurované MTU tunelu, než data odešle zákazníkovi. Pokud je paket větší než 1,476 bajtů, Cloudflare jej fragmentuje a fragmenty odešle zákazníkovi ke sloučení.
Ve všech případech Cloudflare odesílá zákazníkovi všechny fragmenty.
omezování MSS
Maximální velikost segmentu (MSS) je nastavení TCP, které omezuje velikost TCP segmentů. Tuto hodnotu nastavují pakety SYN během třícestného handshake.
TCP endpoint ve výchozím nastavení nastavuje hodnotu MSS na základě MTU svého místního síťového rozhraní. Pokud je například u IPv4 MTU 1,500 bajtů, MSS bude 1,460 bajtů (1,500 bajtů minus 20 bajtů za hlavičku IPv4 minus 20 bajtů za hlavičku TCP).
MSS je nástroj, který můžete použít k nastavení chování velikosti paketů TCP. Pokud endpoint TCP leží za sítí se sníženou hodnotou MTU, změna hodnoty MSS tak, aby odpovídala skutečné hodnotě MTU dané cesty, donutí vzdálené endpointy odesílat pakety, které se vejdou do zadané MTU. Pokud tedy endpoint TCP IPv4 leží za tunelem GRE s MTU 1,476 bajtů, hodnota MSS v jeho paketech TCP SYN by měla být 1,436 bajtů, tedy 1,476 bajtů minus 20 bajtů za hlavičku IPv4 a minus 20 bajtů za hlavičku TCP.
Jedním ze způsobů úpravy nastavení MSS je změna MTU síťového rozhraní na WAN rozhraní routeru tak, aby odpovídalo cestovnímu MTU. Dalším způsobem úpravy MSS je použití MSS clamp, kdy nakonfigurujete zprostředkující síťové zařízení, například router, aby za provozu upravovalo TCP volbu MSS v procházejících paketech. Změna MTU na rozhraní zprostředkujícího síťového zařízení není totéž jako použití MSS clamp a hodnotu TCP MSS nemění.
Viz doporučení pro omezování MSS pro informace o tom, na jakou hodnotu nastavit MSS clamping podle typu tunelu.
doporučení pro omezování MSS
Tunely GRE jako off-ramp
Hodnota MSS závisí na uspořádání vaší sítě.
- Na vašem hraničním routeru: Nastavte clamp na vnitřním rozhraní tunelu GRE (tedy tam, kudy bude procházet odchozí provoz). Nastavte MSS clamp na 1,436 bajtů. Vaše zařízení to mohou po nakonfigurování tunelu provést automaticky, ale záleží to na konkrétním zařízení.
Tunely IPsec
U tunelů IPsec závisí hodnota, kterou musíte zadat, na nastavení vaší sítě. Hodnota MSS clamping je nižší než u tunelů GRE, protože fyzické rozhraní vidí pakety šifrované protokolem IPsec, nikoli pakety TCP, a na ty se MSS clamping nevztahuje.
- Na vašem hraničním routeru: Použijte to na vnitřním rozhraní tunelu IPsec (tedy tam, kudy bude procházet odchozí provoz). Vaše zařízení to mohou po nakonfigurování tunelu provést automaticky, ale záleží to na konkrétním zařízení. Nastavte TCP MSS clamp maximálně na 1,360 bajtů.