Proc? Vzdyt koukam ze tam delaj realloc ? Teda jenom podle toho co pise autor clanku ( do zdrojaku jsem samozrejme nekoukal ). Takze spis sigsegv ..bych si tipnul ..
BGP protokol je v tom nevinne. Sami pak priznavate, ze problem byl v jedne jeho implementaci. Ten nazev mi zavani pokusem o senzaci nez seriozni informaci. Sam jsem si to s quaggou uzil na prelomu duben/kveten, kdy zacala padat po natazeni prefixu. Pomohl az downgrade na nepostizenou verzi.
Jinak velmi zajimavy clanek. Diky. A to to zrovna o BGP pisu na abclinuxu :-)
Tak zkuste navrhnout název, který by to popisoval lépe, nezacházel do podrobností a byl vcelku srozumitelný :-). Rád se pro příště nechám inspirovat. Od podrobnějšího popisu je anotace článku a ta je v pořádku, ne?
Jinak díky za chválu... snad nebudeme za chvíli muset psát další článek o BGP...byl bych docela nerad, kdyby zrovna z popisu chyb "in the wild" vznikl seriál :-)
No priznam se, nazev je hodne tezke vymyslet, ale co treba "Zavazna chyba v routovacim demonu Quagga zpusobila nedostupnost nekterych casti Internetu". I kdyz to je asi taky taky zavanejici senzaci. Nejspis bych to asi lip nenapsal. Nelibi se mi v nazvu ten protokol, myslim, ze by tam melo byt misto toho jedna z implementaci. Myslim ze samotny protokol je v tom nevinne. Jen se desim toho, az si to precte nekdo z TV NOHA a totalne to prekrouti jako tu posledni aferku s delkou as-path. Srozumitelne a bez senzaci jste to pekne popsali na blogu nic.cz, diky.
Nikoli. Základním problémem je, pokud titulek uvádí zjevnou nepravdu. Což je i tento případ, protože nešlo o "nestabilitu v BGP protokolu", ale o "nestabilitu v jedné z implementací BGP protokolu".
Což by myslím nebylo až tak dlouhé, například ve srovnání s titulkem: "Petr Opletal: RIO Media sází na optiku a HD, má však co nabídnout i babičce z Benešova" :-)
Ona implementace BGP neni uplne trivialni zalezitost, pokud bereme v uvahu naroky na rychlost prepocitavani. Takze tech chyb se tam da zanest pomerne hodne. Takze dlasi clanek urcite bude, akorat doufejme ze to nebude moc brzo...
Proč by ten patch měla být prasečina? Možná vám to přijde divné, ale ten patch dělá téměř přesně to, co běžné implementace řetězců (např.) v C++, a dělá se to tak kvůli lepší časové složitosti. MMCH, když ta délka řetězce začíná na 32 a zvětšuje se v jednom kroku max. o (asi) 10, jaký je rozdíl mezi realokací na konci a po každém spočtení...? (žádný, že)
Co byste použil vy? asprintf() nebo něco ekvivalentního?
Neměl jsem možnost a čas studovat kód Quaggy do detailu, takže teď budu trochu obecně plkat :-).
1) Ta transformace na string je tam úplně zbytečně. Protokol BGP je binární, takže textová reprezentace má smysl pouze v případě zobrazování (log, debug, konzole, atp.), a to se dá vždycky nasypat v případě, že je potřeba textovou reprezentaci vypsat.
2) Pokud by to opravdu nějaký smysl mělo, tak bych použil statický buffer. Maximální velikost BGP zprávy je 4k a například Cisco natvrdo omezuje počet AS na max 2000.
#bgp maxas-limit ? <1-2000> Number of ASes in the AS-PATH attribute
Jinými slovy nemá smysl dělat víc, protože to skrz Cisca stejně dál neprojde (druhá věc je, že standardní omezení je 255). A 22kB buffer (v maximálním případě) není zas tolik.
Taky jsem nestudoval kód do detailu. Například nevím, co se stane, když ten jejich XMALLOC selže :)
1) V obecné rovině máte možná pravdu. V kontextu toho patche je to ale trochu mimo.
Je možné, že celý ten kód je zbytečný (a věřím, že kdybyste napsal patch, který ho odstraňuje a zbytek toho démona zjednoduší, byli by vývojáři rádi), ale ta transformace tam jednou je, mrtvý kód to není, a ať už ji používají k čemukoli (kromě důvodů, které jste vypsal, to třeba ukládají někam do texťáku), bude patch, který ji odstraní, mnohem složitější, než pouhá oprava té funkce. Což je ale špatná vlastnost pro rychlou opravu.
BTW není mi úplně jasné, co znamená "dá se vždycky nasypat".
2) Dovedu si představit statický buffer (i menší), pokud bude dobře vyřešeno jeho přetečení. Ale nemyslím si, že je to menší nebo větší prasárna, než to, co tam nakonec dali. Na Cisco bych se radši neohlížel, ti si své užili nedávno.
BTW pro (ultra)rychlou opravu stačilo z "5 + 1" udělat "10 + 1".
BGP démon zpracovává mnoho UPDATE a potřebuje to dělat hodně rychle, což se skoro přímo vylučuje s funkcí realloc(). Což mimo jiné odpovídá i na otázku jaký je rozdíl mezi (pokud není počet opakování while cyklu roven jedné):
"dá se vždycky nasypat" -> převést binární reprezentaci AS path na textovou v případě, že to zrovna potřebujete. Hádám (tak nějak z principu věci), že počet takových případů bude menší než potřeba rychle zpracovat BGP UPDATE. Ale teď už opravdu jenom spekuluju...
ultra-rychlá úprava: ano. Proč to nepoužili, nevím.
"potřebuje to dělat hodně rychle" a "vylučuje ... realloc()": Co přesně znamená hodně rychle? Máte nějaká data, která ukazují na realloc jako zásadní brzdu toho kódu?
"pokud není počet opakování ... roven jedné": Klíčová otázka je, jaký bude počet opakování toho cyklu v daném kusu kódu. (MMCH ten while si skutečně mohli ušetřit).
Skoro dole je tabulka, a logscale graf s BGP update za sekundu.
realloc je vždy z principu brzda. Prostě když musíte (v nejhorším případě) přehazovat v paměti data do nově alokovaného bloku, tak to bude vždycky pomalé. Samozřejmě že je otázka, jak často se tento kus kódu vlastně vykoná -> a tenhle konkrétní případ spíš ukazuje na celkovou koncepci než, že by tenhle kus kódu byl tím zásadním problémem, který zpomaluje celou quaggu.
Každopádně už vedeme čistě akademickou debatu, aniž bychom opravdu znali vnitřnosti tohoto vyhynulého zvířete.
No to je hlavne proto, protoze normalni kod neni duvod ukazovat. Duvod ukazovat je jen praseciny.
"Zase vidim ve zpravach bouchacku a zase s ni nekoho zabili."
"Zase vidim ve zpravach podnikatele a zase vytuneloval firmu."
"Zase vidim ve zpravach felicii a zase se v ni nekdo zabil."
Hmm, spravuju jeden nejmenovany ERP a dobytky kteri to vyvyjeli bych mohl naplnit cele staje.
Ostatne obcas mam dojem, ze programator == dobytek.
Jenze kdyz pak clovek vidi, jak to ve vyvojarske firme "funguje" ("mas na to hodinu, tak to sprav"), tak se divit prestane.
U os je to zkraka obcas o tom, ze nekdo neco napise aby "to fungovalo", s tim, ze pozdeji tomu kodu da lepsi formu. Jenze pak uz se k tomu nedostane a nikdo jiny to neopravi, protoze "to funguje". Pripadne nejaky bug opravi "neprogramator", protoze se k tomu nikdo jiny nema.
BTW: Pocitam ze cs aplikace maji kod obecne omoc horsi. Nikdo to nevidi, takje to preci jedno ne ?
Nekteri programatori proste nejsou schopni domyslet "co se stane kdyz". Verim tomu, ze tenhle takovy kod napise i kdyz by na to mel mraky casu. Proc premyslet, kdyz 5 je tak krasne cislo a dosud fungovalo.
Jinymi slovy, je rozdil napsat v casove nouzi neefektivni kod (tezko to mit programatorovi za zle) a napsat to blbe s tim, ze dnes to tak funguje a zitra potopa. fuj
No za me (podotykam, ze se nezivim jako programator, i kdyz obcas neco napisu) sme se uz na zs (krouzek) ucili, ze 20% kodu je to, co vykonava funkci a 80% to, co osetruje chybovy stavy. Ono to pak celkem logicky dopada tak,ze programator napise tu funkci a chyby uz neosetri. Proc by mel, vzdyt preci "nikdo neni tak blby, aby misto cisla vlozil string".
Vysledek je v extremnim pripade ten, ze vyvojari samozrejme vse funguje, protoze "vi", co ma kam zadat, ale prvni uzivatel aplikaci spolehlive sestreli, protoze zada nejakou blbost.
BTW: Pouzivat ruzna "magicka" cisla je dost rozsireny zpusob programovani. Prca nastava, kdyz kod potrebuje upravit nekdo jiny nebo i tvurce po par mesicich/letech ;) .
To je trochu sentimentalni nazor. Vzbuzuje predstavu firmy, ktera se s kazdou drobnosti hrozne pipla, vysledek je fakt perfektni ... jenze pro nej neni trh, protoze je prilis drahy. Firma se stahuje do ulity "nam nikdo nerozumi" a "jaktoze nechapou, ze to {konkurence} pise uplne amatersky". A je nakonec trhem prevalcovana.
Kazde rozhodnuti *dobreho* programatora je predevsim cost-effective (pardon, jaky je cesky ekvivalent? efektivni vzhledem k nakladum?). Externality jsou proste externality. Pokud nasledky me chyby neplatim ja, ale nekdo jiny, tak rozhodne nesmim venovat usili, abych tu chybu neudelal; jinak plytvam. Pokud oprava chyby zpozdi vydani softwaru o mesic, je to take naklad (ztracene prodeje za ten mesic, konkurent me predbehne apod.), tedy take plytvani.
Dobry programator mimo jine vi, kdy je software "dostatecne dobry".
V softwarech typu "rizeni letadel" a "kardiostimulatory" je to jasne. Naklady za chybu v softwaru plati tvurce softwaru. Takze se software vyviji bez chyb (a desive draho a desive pomalu). V softwarech typu "enterprise" a "mass market kancelarsky balid" je to take jasne. Dusledkem chyby je nejvys ztrata reputace, naklady nese uzivatel.
Jestli se vam nelibi, ze tohle je realita trhu, cesta ke zmene vede pres zmenu zakonneho ramce. Postaveny dum vam nesmi spadnout na hlavu a stavebni firma se nesmi pokusit to riziko na vas prenest; i kdyby tim byl ten dum desetkrat levnejsi. Pokud zakon zamezi tomu, aby naklad za sw chybu na vas autor sw prenesl, pak uvidite, jak rychle se zacne psat dobry software. A jak rychle budou ti "taky-programatori", kteri psat bez chyb neumeji, preskoleni nebo odlozeni. A take uvidite, jak sakra drahy ten software bude.
Jednou jsem poslouchal prednasku jednoho pana s Airbusu. Krom toho, ze v letadle jsou ruzna serva jak hydraulicka, tak elektromechanicka a vicekrat paralelne vedle sebe, tak i palubni pocitace tam jsou dvojmo. Rikal, ze v ramci snizeni rizika to jsou dve ruzne platformy, ruzne procesory, ruzne operacni systemy (pokud lze o operacnim systemu hovorit), ruzne vyvojove tymy... Pak se bezradne usmal: "Jenze oni se stejne znaji ze skoly a chodi spolu do hospody..."
Jenze letadlo neni ISP. Tam to znamena ucit obsluhu pracovat s vice platformami, z toho pak akorat vzniknou chyby vlivem lidskeho faktoru, takze si moc nepomuzete. Nehlede na to, ze ne vzdy si ruzne implementace uplne dobre rozumi...
Já se z těch Husákových dětí, kteří teď dělají technické ředitele, jednou asi zblázním.
Přece jediný správný závěr článku musí být ten, že nedostatečně vyzkoušené specifikace se musí používat jen velmi opatrně. Ale začátečníci z NICu teď pouze píší, jak kdo co kde (před lety) naprogramoval špatně.
O co těm dětem z NICu jde, když tuhle úvahu vždy odmítnou? Určitě ne o to, aby Internet co nejlépe fungoval!
P.S.
A hlavně zase na Lupě nezapomeňte hned můj příspěvek demokraticky smazat, aby to náhodou nevypadalo, že v NICu pracují životem nepoučení pracovníci.
Je zajimavy, ze ty zacatecnici vedou provoz domeny .cz celkem slusne, zatimco o kvalite vystupu z VSE bychom mohli myslim sahodlouze diskutovat, neniliz pravda?
Vedou provoz domény .cz tak slušně, že jsme se zařadili mezi rozvojové země jako Pakistán, Morava a Egypt.
Jak je možné, že se obdobné věci nedějí na západ od nás.
Asi proto, že tam občas někdo tuší, co je třeba neodzkoušené a co dokonce může způsobovat i výpadky rooterů. Proto tam asi experimentují s jistou opatrností.
Zná někdo nějaké postupy, jak se dají neodzkoušené specifikace ladit? Těchto informací by se měl člověk dočkat z NICu - ale odtud za součesného obsazení není reálné.
(Proto si myslím, že se případ Uherský Brod dříve nebo později opět bude opakovat, abychom konečně alespoň Egypt předhonili v penetraci sítí.)
1. CZ.NIC z.s.p.o. nema s BGP nic moc spolecneho. Stara se o chod .cz domeny a to velice dobre (naopak vetsina ostatnich spravcu TLD domen by se od nas mohla ucit a take se uci).
2. Morava neni samostatna zeme pane studovany ekonom. To Vas na VSE uci pekne veci... :D :D :D
3. Cely internet je vlastne jeden velky experiment - vzdyt to vzniklo jako propojeni nejprve vojenske vyzkumne site a pote univerzit.
4. Internetove protokoly se jinde nez na internetu testovat nedaji - on totiz Internet existuje jen jeden. Ikdyz mozna ze u Vas na VSE mate nejaky svuj vlastni, ktery pred zbytkem sveta tajite, co? :D A az nam ho ukazete, tak vsichni umrem smichy!!!
Vy jste si patrne nevsiml, ze tahle kauza vznikla v siti AfNOGu a s CZ.NICem nemela nic spolecneho. Systemu CZ.NICu se to vubec nedotklo. Jedine co se stalo, ze 2 lidi z CZ.NICu o te chybe napsali clanek. :-)
Jinak skutecna pricina problemu je, ze v routovacim demonu, ktery jako projekt puvodne zacali delat Japonci byla chyba. Opet tam stopu Ceske Republiky ani sdruzeni CZ.NIC nevidim. Cesky routovaci demon BIRD tuto chybu nemel. :-)
A podobne kauza z Uherskeho Brodu vznikla predevsim kvuli chybe v routerech, ktere vyvijeji hlavne Americane (byt u tehle globalnich firem se to jiste takhle neda postavit).
No to je otazka, pravda asi uz to neni takovej tunel jako era pred husakovcema ale porad bych si dokazal predstavit odpusteni vecirku a jinych hovadin okolo. Bud at penize sysli a pak investuji do technologii nebo at zlevni domenu nebo at je pro me za me treba rozdaji na grantech.
Dotyčný osoba se Vám snaží vysvětlit, že nejchybnější závěr všech Vaši úvah je ten, že někdo jiný někde jinde něco špatně odladil.
Tady přece nejde o to, kolik řádků kde je jak špatně. Tady jde o to, že to se někdy stává všude, ale patrně v nerozvojových zemích s tím předem počítají než něco neobvyklého nakonfigurují. A patrně také již vědí, jak si věci odzkoušet.
A to je potřeba, aby se noví lidé z NICu naučili, - Ale konečně to je tak skoro všude, Husákovy děti se naučí jeden instalační program a celkem dva programovací jazyky a zbytek obtahnou z amerických internetových zdrojů. A strašně se diví, že si je někdo odváží nerespektovat jako nejvyšší odbornou autoritu u nás. (v nejhorším přece napíšou na Lupu, jaké příspěvky se mají smazat.)
Nejlepsi je, kdyz nejaky anonymni takymanazer z VSE kritizuje Husakovy deti. Patrne to bude nejaky z expertu typu prof. Miroslav Tucek, agent StB s krycim jmenem "Kral", za bolsevika dlouholety prorektor VSE, ktery se po revoluci zviditelnim jako jeden z hlavnich mozku stojicich za vykradenim IPB, mezi studenty prosluly hulvatskym chovanim a hulenim odpornych doutniku behem prednasek, coz mu bylo vedenim VSE nepochopitelne tolerovano. A takovych tam jsou mraky.
A máte doma taky malou kapličku s obrázkem "nerozvojových" zemí? Vaše adorace tímto směrem mě fascinuje. Nechcete nám povyprávět, co všechno ještě dalšího dělají v Americe lépe?
Zatim jste nam jeste nerozrkyl, co udelaly Husakovy deti z NICu spatne. Teda krome toho, ze odstavily od penezovodu skupinku "zaslouzilcu", diky cemuz klesla rocni cena domeny na nejakych 20% puvodni ceny.
No, on je trochu problém v tom, že tento problém nebyl dostatečně opatrně ozkoušen programátory quaggy ani případně univerzitami v rámci síťařských předmětů. Chyby jsou a je potřeba s nimi počítat. To, že se před chybou schováme a tváříme se, že chyba není, chybu neodstraní. Naopak zveřejnění příčiny a možnosti opravy je správné řešení problému. Dává možnost programátorovi si připomenout, že co fungovalo předtím nemusí být v pořádku. Pokud by se měly používat nové technologie příliš opatrně, pravděpodobně by se nempožily vůbec. Bylo by asi trochu kontraproduktivní je vůbec zlepšovat a rozšiřovat, pokud se nikdy nerozhoupete s nasazením do ostrého provozu.
Já teda nevím, jak kvalitní studenty mají na VŠE, ani v NICu, ale na mojí univerzitě jsou omylní studenti, a často i přednášející. Není mě úplně jasné, jestli jste tam u vás vyšší kasta, nebo vás tam učí jinou poučku: zatloukat, zatloukat, hlavně nic neříct.
Ne. Byli tam v databázi nějací rogue uživatelé, ale jak se tam dostali nevím. Měl jsem nainstalovanou poslední verzi WordPressu (takže jsem křivdil sám sobě :). Tak buď prošli dovnitř před aktualizací a zaktivovali se až teď nebo je ve WordPressu zase nějaká díra.
A nejspíš jeden z těchto bot-uživatelů změnil první článek a vložil do něj IFRAME s odkazem někam dopryč. Osobně používám NoScript, takže jsem to chvíli musel hledat...
Nemam pocit, ze by treba u Cisca meli asicy na vsechno vcetne BGP, proto o hardwarovem/softwarovem routeru mluvit je trosku na hrane, protoze neco do toho hw ty smerovaci informace ladovat musi, coz v pripade L3 prepinani je v drtive vetsine software.
Ono stejne to, co asi uznavate jako "hardwarovy router", jsou stejne jenom pocitace (= Vas softwarovy router?) s hardwarovou akceleraci prepinani (L2/L3...) a nejakych dalsich veci, to je stejne jako bezny domaci pocitac s hardwarovou akceleraci grafiky... :)
Mate naprostou pravdu. V tzv hardwarovych routerech se pochopitelne o routing stara SW a HW se obvykle stara o forwarding. Ale tohle je pomerne vzita terminologie. Mozna jsme mohli pouzit komercni a opensource routovaci reseni nebo neco podobneho.
Ale jak je videt, co jsme tim mysleli jste pochopil, tak snad nam tyto terminy odpustite. :-)
Ono to mozna stacilo preformulovat... :) Ono i na tom Ciscu muze bezet treba nejaky open source. Ale ja jsem na to trosku sensitivni... :)
Jinak chapu, ze clanek je napsany pro "kompatibilni" lidi, ale mozna by to chtelo bud trosku "pocestit" nebo minimalne ustalit nazvoslovi, treba pouzivani router - smerovac. Treba v nejake akademicke praci by Vas s timhle vyrazili dverma a utesnili vsechny okna, dvere i vetraci pruduchy. :)
Ona ta spojit s hardware tam ale tak trochu skrytě je...
Hardwarový směrovač (tady vidíte odkud vítr vane v onom názvosloví ;-)) je takový, který k běhu svého software potřebuje speciální hardware, který se většinou kupuje se software (IOS, JUNOS, atp.).
Softwarový směrovač je takový, který běží na běžně dostupnám hardware.
Jen tak na okraj, už jsem viděl mnoho (i recenzovaných) článků, kde se autor naopak vyžíval v používání různých synonym... :-) (Ale máte pravdu, měli jsme to sjednotit.)
V zásadě i tato definice je lehce problémová. Pokud se dobře pamatuju, tak i řada 76xx měla protokol IPv6 implementován v SW. Je to pak HW nebo SW směrovač?
V zásadě je asi lepší (z důvodů vágnosti a nejasnosti tohoto rozlišení) se termínům sw a hw směrovač vyhnout úplně.
Ono obecne jsou i smerovace s hw akceleraci smerovani schopne "l3 prepinat" v procesoru a nezridka se tomu deje. Akcelerace je jenom pro ocekavanou vetsinu provozu, kterou maji zpracovavat. Neakcelerovane muzou smerovat z mnoha duvodu (neimplementace akcelerace IPv6, nestihani akcelerace, fragmentace, VPN, kdovico...).
Btw. mozna prave nazev smerovac s/bez hardwarove akcelerace smerovani je presnejsi, ma nekdo neco lepsiho? :)
to je zase otazka miry te akcelerace. klasicky ip cef na 72xx nebo 36xx do te definice sice spada, ale stejne tam load CPU koreluje se zatezi i pri IPv4 forwardingu...
Autorem článku je přece Earl Zmijewski. Tak proč se nějací
dva IT-áci vydávají za autory a ne překladatele? Dva na překlad byli, ale ani jeden z nich nevyprodukoval jinou myšlenku než dotyčný pravý autor.
Asi by se nad vydáváním překladu za vlastní dílo měli zamyslet jejich vyučující na Masarykově univerzitě. Přece tímhle jednáním poškozují celou MU v Brně.
Nevim zda autor clanku pouziva stejnou terminologii jako ja, ale ja chyba rikam necemu, kdy se programator splete. Tady se programator nesplet, tady to napsal vedome blbe a vedel, ze to jednou bouchne.