Helló mindenki,
felmerült egy MTU-probléma: rengeteg telephely között VPN tunnel van, sok helyen 1372 vagy akár csak 1360 az MTU. Ugyanakkor sok site meg megy csupasz interneten keresztül, 1500-as MTU-val. Az alkalmazás amit használunk UDP-n küld videót, és a videó stream-re DONTFRAGMENT-et állít be (IPv4 természetesen). A rúterek sok helyen viszont eldobják az ICMP "Fragmentation Needed" hibaüzeneteket, tehát a küldő nem tud alkalmazkodni az útközbeni v. akár az endpoint oldali alacsonyabb MTU-hoz. Az esetlegesen az endpoint-ban létező Path MTU Discovery logika így nem is tud működni.
Próba kedvéért levettük a site-on az endpoint-ok MTU-ját, mint lehetséges megoldást. Ha egy endpoint-on beállítom az MTU-t a default 1500-ról 1360-ra, akkor ezzel tudom befolyásolni mekkora csomagokat KÜLD az endpoint. De mi a helyzet a másik oldallal: az alkalmazkodni fog ehhez az MTU mérethez, illetve mi történik ha továbbra is 1500-as IPv4/UDP csomagokat küld? A fogadó oldal, HA MEGKAPJA SIKERESEN, akkor is eldobja a network stack-je a túl nagy MTU-jú csomagokat? Vagy ez már inkább buffering témakör (ugyebár egy IP csomag mérete max. 64k lehet fragmentálással).
- 877 megtekintés
Hozzászólások
UDP-n az alkalmazásnak (jelen esetben, a video streamernek) kell megoldania az MTU-val kapcsolatos problémákat. (fragmentálás, újraküldés, satöbbi.) TCP-n ugye ezt az IP stack out-of-box megcsinálja.
Ha az alkalmazás nem képes erre, akkor így járt. (A video "droppos" lesz)
A fogadó oldal, HA MEGKAPJA SIKERESEN, akkor is eldobja a network stack-je a túl nagy MTU-jú csomagokat?
Hö? Valami vagy átfér a csövön és akkor hurrá van, vagy nem fér át. Nem értem, mi az, hogy "megkapja sikeresen, de túl nagy MTU-jú csomagok"?
- A hozzászóláshoz be kell jelentkezni
"UDP-n az alkalmazásnak (jelen esetben, a video streamernek) kell megoldania az MTU-val kapcsolatos problémákat. (fragmentálás, újraküldés, satöbbi.) TCP-n ugye ezt az IP stack out-of-box megcsinálja."
Mármint az egész fragmentálás, újraküldés dolgot nem az IP csinálja, hanem a TCP.
Az UDP ugyanúgy IP réteg felett megy, ha az IP réteg megcsinálna mindent, amit mondasz, akkor az UDP is ezt készen kapná.
Az IP réteg az irányítást végez (honnan hova kell mennie a csomagnak ha A és B között kell mennie, és ha valamerre nem mehet, van-e alternatív útvonal), a TCP meg azt, hogy a sok-sok kis egyedi csomagból (ami sokféle útvonalon elmehetett A-ból B-be) te egy bytestreamet látsz végül. Ehhez neki kezelnie kell az újraküldést, a fragmentációt stb.
Az UDP esetén nincs meg az, hogy bytestream legyen a sok-sok csomagból, de nem is erre van kitalálva az UDP.
Valamint ha az IP csomagban be van állítva a DF fejléc-flag, akkor az IP csomagot egyik router sem tudja eltörni, TCP esetén sem, és ha nem megy át, akkor a csomagméretet csökkenteni kell. Ezt az IP protokoll nem fogja neked megtenni (az IP nem végez újraküldést például), de a TCP igen, erre találták ki.
- A hozzászóláshoz be kell jelentkezni
Mármint az egész fragmentálás, újraküldés dolgot nem az IP csinálja, hanem a TCP.
Ezért írtam IP stack-et, nem simán IP-t. Az IP stack nem csak az IP réteget kezeli, hanem a TCP-t is. Most fuss neki újra ennek a mondatnak: "TCP-n ugye ezt az IP stack out-of-box megcsinálja."
- A hozzászóláshoz be kell jelentkezni
Nincs olyan, hogy IP stack. Olyan van, hogy TCP/IP stack, ekkor a stack tetején ott csücsül a TCP, aki intézi a lényeget. Meg olyan is van, hogy UDP/IP stack, ekkor totál más szemantika érvényesül.
- A hozzászóláshoz be kell jelentkezni
Az MTU egy IP layer (L3) paraméter, nem transport layer (L4)!
A PMTD pedig éppen ezért transzparensen támogatja TCP-t és UDP-t is:
PMTUD is only supported by TCP and UDP. Other protocols do not support it. If PMTUD is enabled on a host, and it almost always is, all TCP and UDP packets from the host will have the DF bit set.
- A hozzászóláshoz be kell jelentkezni
Pontosabban egy L2 tulajdonsag.
- A hozzászóláshoz be kell jelentkezni
Ha a fizikai link MTU-nál alacsonyabb értéket állítok be egy endpoint-nak, attól a fizikai linken egy másik endpoint-tól (aminek nagyobb az MTU-ja) érkezhet nagyobb méretű csomag. Erre gondoltam.
- A hozzászóláshoz be kell jelentkezni
Igen, érkezhet, az UDP-s esetben biztosan. TCP-nél leegyeztetik az MSS-okat és a kisebbiket fogják használni. Hogy hogy lehetne megoldani arra nincs ötletem. Lehet érdemes lenne valami daemont írni, ami pingel no fragment bittel az endpoint felé és az ICMP errorokból belövi az jó MTU-t, amit beállít aztán. A VPN részt nem egészen értettem, az miért fontos most?
- A hozzászóláshoz be kell jelentkezni
Csak az UDP a problémás, a média afölött megy. Egy nagy cég, több ezer telephely, több ezer hálózat, amik intraneten routoltak egymás között. A fizikai réteg viszont össze-vissza használ MTU-kat, leginkább az eltérő site-to-site VPN-ek miatt.
- A hozzászóláshoz be kell jelentkezni
Ja értem. UDP-re nem fog menni ez a PMTU discovery, mint ahogy a TCP belövi magának az MSS-t. Manuálisan kellene valahogy kezelni ezt az egészet. Ekkora nagy cégnél nem is nagyon tudom, hogyan lenne érdemes megoldani a problémát. A videókonferencia program gondolom minden gépre központi repóból frissül, lehet érdemes lenne abban átírni, hogy mekkora üzeneteket használjon max. Zárt forráskódnál mondjuk még ha technikailag lehetséges is belehackelni, nem tudom licensz engedné-e. Még amit nem tudok, hogy a site-to-site tunnelek mit takarnak. Csak IP tunnelek, vagy TAP módban tunneleznek (így + 2xMAC cím + ethertype méretet is hozzá kell számolni a tunnel fejléchez)? IPv6 van-e, esetleg IPv6 tunnelben IPv6? Ilyen esetben már nagyon kis MTU-t kellene a tunnel interfészeken beállítani. Wiresharkban látszik-e ICMP error a videós progi DF bitet beállított csomagjaira? Azokat el lehetne kapni és valami daemont írni ami ilyen esetben felderíti az adott cím felé a korrekt MTU-t és beállítja helyileg. Ha helyileg megvan akkor szintén ez a daemon megküldi a túloldali párjának és az is beállítja. Így nem kell módosítani a konferencia progit (márha nem baj, hogy az első(néhány) csomag esélyesen kuka).
- A hozzászóláshoz be kell jelentkezni
Proprietary zárt forrású kereskedelmi videó konf szoftver és hardver van szerver és kliens oldalon is, nem írkálunk át benne semmit, meg proxy-kat se kódolunk le hozzá :)
A PMTD-d meg cisco szerint TCP/UDP is támogatja, mert L3 fícsör, nem MSS.
- A hozzászóláshoz be kell jelentkezni
Hiába támogatja, ha a proprietary hulladék nem kezd semmit az ICMP errorokkal.
- A hozzászóláshoz be kell jelentkezni
A proprietary cucc biztosan támogatja a PMTD-t. A probléma valószínűleg ott van, hogy sok helyen szűrik az ICMP-t, tehát az endpoint nem kap vissza semmilyen ICMP error-t.
- A hozzászóláshoz be kell jelentkezni
Hello,
Ezt az egész problémát a videokonferencia-rendszer okozza szerintem, és a problémát is alkalmazás-szinten kellene megoldani (mivel a hálózatot, főleg ha nem a sajátod, nem tudod minden alkalmazáshoz hozzáigazítani).
Voice-nál ok, hogy bebillenti a dontfragment-et, de video-stream-nél mi értelme van? Ott nem számít a jitter, és mivel írtad, hogy ez egy hardware-es megoldás, gondolom a hozzá illő árral, ezért gondolom kellene lennie benne valami intelligenciának, adaptive codec change, MOS-mérés, meg hasonlók, amikkel a hálózathoz igazítja magát (az adott session-t, mivel más irányba más paraméterek lehetnek). Ha lekorlátozod az MTU-t a videokonf-rendszeren, akkor mindenkivel max. olyan méretű csomagokkal fog tudni kommunikálni.
Nézzetek utána, hogy ezt a DF-bitet nem lehet-e kikapcsolni a videoconf-rendszerben valahogy, mert ez elég érdekes így (gyártót érdemes lenne megkérdezni hivatalosan).
Üdv.
- A hozzászóláshoz be kell jelentkezni
Sajnos pont a kommentben amire válaszoltál írta, hogy lehetnek ICMP blackholeok a hálózatban és így normálisan sosem fog a DF flag miatti ICMP errorról értesülni. És az tényleg igaz, hogy alkalmazás szinten kéne megoldani ezt a problémát. Ekkora cégnél valid ticket lenne, hogy építsék be ezt a funkciót a programba (PMTU meghatározás valami UDP-s vagy TCP-s próbálgatással session felépítésnél) gondolom nem ingyen kapja a cég.
- A hozzászóláshoz be kell jelentkezni
Igen, érkezhet, az UDP-s esetben biztosan
De erre a fogadó oldal hogy reagál? Fogadja hiba nélkül vagy droppolja pl. méretellenőrzés miatt?
- A hozzászóláshoz be kell jelentkezni
" Az alkalmazás amit használunk UDP-n küld videót, és a videó stream-re DONTFRAGMENT-et állít be"
-----------> na ez a legnagyobb baromság, hülye alkalmazásprogramozók, akiknek fingjuk sincs a hálózatok működéséről:
-mi ez a DF-bit a fejlécben?
-- add ide a söröm, beállítom 1-esre!!!
- A hozzászóláshoz be kell jelentkezni
A Path MTU Discovery az úgy működik, hogy MINDEN kimenő csomag DF bitje set.
https://www.cisco.com/c/en/us/support/docs/ip/generic-routing-encapsula…
PMTUD is done continually on all packets because the path between sender and receiver can change dynamically. Each time a sender receives a "Can't Fragment" ICMP messages it will update the routing information (where it stores the PMTUD).
- A hozzászóláshoz be kell jelentkezni
ööö, nem, csak akkor, ha be van billentve 1-esre, különben nem szól vissza, mert minek?
- A hozzászóláshoz be kell jelentkezni
Hát bevallom, ezt nem értettem meg mit szerettél volna mondani.
- A hozzászóláshoz be kell jelentkezni
> Próba kedvéért levettük a site-on az endpoint-ok MTU-ját
És akkor mi történt? Ha működött, akkor ez nem megoldás?
- A hozzászóláshoz be kell jelentkezni
A mi videószerverünket át tudjuk állítani, az endpointjainkat is. De össze vannak kötve számtalan más külsős videószerverekkel és endpointokkal, amikre 0 ráhatásunk van. Ha a mi rendszerünkben levesszük minden résztvevő MTU-ját egy alacsonyabb értékre, vajon okozunk ezzel a fogadó oldalunkon nagyobb bajt, mintha mindent hagynánk a default 1500-on, és oldja meg valahogy az alkalmazás az eltérő MTU problematikáját?
- A hozzászóláshoz be kell jelentkezni
Nem okoztok vele nagyobb bajt. A végpontok interfészen redukált MTU-ja abszolút észszerű ha tudod hogy a fontos távoli végpontok jó része csak adott MTU-val érhető el. Nem szép, de észszerű.
- A hozzászóláshoz be kell jelentkezni
Köszi a megerősítést, feltéve ha biztosan úgy van ahogyan leírtad ;)
Most már csak arra vagyok kíváncsi, vajon az endpoint-ok mit kezdenek a MTU-juknál nagyobb méretű ingress csomagokkal.
- A hozzászóláshoz be kell jelentkezni
Elfogadják. Az MTU csak a küldésre vonatkozó szabály.
- A hozzászóláshoz be kell jelentkezni
Erre tudnál valami RFC-féle hivatkozást adni?
- A hozzászóláshoz be kell jelentkezni
Elnézést a beleszólásért, de miért kellene erre neki kikeresnie RFC-t? Őt terheli bizonyítási kényszer? Szerintem nem, csak segíteni akar.
A paraméter neve MTU: Maximum Transmission Unit. Ezen nincs mit tovább magyarázni. A párja (ami egy másik független paraméter) az MRU: Maximum Receive Unit. Ezen sincs mit tovább magyarázni szerintem.
Egy csomag (DF bit set) akkor nem megy végig egy adott vonalon, ha van olyan továbbító állomás, aminek az 1) MRU értéke kisebb a csomag méretnél, így érkezéskor eldobja, 2) MTU értéke kisebb a csomag méretnél, így nem képes tovább küldeni. Ez nem feltétlenül egyetlen állomás. Persze általában az MTU és MRU egyezik, de ez nem kötelező egyébként.
Nem RFC, de szerintem érthető: http://www.networkers-online.com/blog/2016/03/understand-mtu-and-mru-the-full-story/
- A hozzászóláshoz be kell jelentkezni
Ha már így kéretlenül becsatlakoztál: nem követeltem senkitől semmilyen bizonyítási kényszert, csak rákérdeztem tudna-e mondani rá RFC-t is. Mert néha nem elég csak sejteni mi hogy működik, Nem dolgoztál még támogatásban. Na ott az ügyfelek tudnak ám követelőzni, és az nagyon nem úgy hangzik mint amit én írtam! Abban pedig megegyezhetünk, hogy amiről networking-ben nincs RFC, az kb. nem is létezik.
A linkelt írás kb. ok színvonal, de nagyon felületes és összecsapott, főleg az MRU.
- A hozzászóláshoz be kell jelentkezni
A modern hálókártyák összevonják a bejövő csomagokat és egyben adják át az oprendszernek feldolgozásra amivel sok terhet levesznek a CPU válláról, cserébe az IP layer jó nagynak látja őket. Ezt azért tehetik meg, mert IP layernek nem dolga korlátozni a fogadott csomagok méretét, csak azzal kell törődnie, hogy képes-e feldolgozni vagy nem.
Az RFC 791 annyit követel meg, hogy minden állomás minimum 68 bájtos csomagot tudjon fogadni, illetve 576 bájtos csomagot képes legyen feldolgozni. Minden ami e fölött van "best effort" alapon működik.
- A hozzászóláshoz be kell jelentkezni
Kössz, nemsokára megcsináljuk az MTU módosítást, aztán kiderül mennyit nyertünk vele.
- A hozzászóláshoz be kell jelentkezni
Mi a videó rendszer gyártójának ajánlása erre a felhasználásra? Ők mit mondanak? Nem hiszem, ahogy akár az MTU korlátozását 1500 alá, akár garantált 1500 MTU-s linket írnának elő. Vagy alapból csak szigorúan belső Ethernet hálózatra szánták, csak Ti használnátok inter-site?
Egyébkét én, mikor muszáj egy MTU<1500 linken MTU >=1500 csomagokat átnyomnom, olyan VPN-t használok (Mikrotik EoIP, multilink L2TP, satöbbi), ami ezt megoldja (kezeli a fragmentálást-összeillesztést transzparens módon, a két végpontján a beállított MTU-t mutatja-fogadja). Az persze más kérdés, hogy real-time adatfolyam esetében ez okoz-e és milyen problémákat...
- A hozzászóláshoz be kell jelentkezni
Esetleg
--clamp-mss-to-pmtu
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
Kedves write-only kolléga, a topicnyitó UDP-ről beszélt.
- A hozzászóláshoz be kell jelentkezni
Johos, bocsi
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
- A hozzászóláshoz be kell jelentkezni
Esetleg mangle táblában DF bit levétel?
Ahogy elnézem, kevés eszköz tudja, Linux kernelhez viszont van modul: https://github.com/semverchenko/dontfragment
- A hozzászóláshoz be kell jelentkezni
Céleszközök, nem lehet piszkálni ilyen mélységben.
- A hozzászóláshoz be kell jelentkezni
A VPN tunnel az eszközből indul, azaz nem rakhatsz elé semmiféle hálózati eszközt, amely leveszi a DF flag-et erről a forgalomról?
- A hozzászóláshoz be kell jelentkezni
Nem tudunk 1500+ tunnelen és 2000+ endpointon DF flag-et leszedetni, nem is szeretnénk.
- A hozzászóláshoz be kell jelentkezni