»Velike prenose pošlji mimo VPN, majhne odgovore pa pusti na njem« zveni kot usmerjevalna politika, pa ni. Usmerjevalnik se odloča z informacijami, ki so na voljo v tistem trenutku: naslovi, vrata, protokol, oznake požarnega zidu, prepoznan tok. Končna velikost odgovora ni v tej množici, ker še ni prispela, in ko bi usmerjevalnik lahko izmeril bajte, jih že prenaša. Če želite usmerjati po opravilu, se mora odločitev preseliti v točko, ki opravilo pozna, in spodnji kontrolni seznam pokaže, ali ima vaš dizajn tako točko.

Zakaj usmerjevalnik ne more izmeriti odgovora

V trenutku, ko paket potrebuje pot, je usmerjevalnik videl največ prvih nekaj paketov toka. Lahko pove, kdo se pogovarja s kom, po katerem protokolu, s katero oznako in koliko bajtov je doslej prešlo. Dosedanji bajti opisujejo preteklost. Velikost odgovora je lastnost odgovora, ki še ni nastal, pri razdeljenih ali pretočnih odgovorih pa morda nikoli ni znana vnaprej.

Tudi lastni metapodatki protokola so šibkejši, kot se zdijo. HTTP dovoljuje odgovore, katerih dolžina ni objavljena pred telesom, in eno samo uporabniško dejanje lahko ustvari veliko zahtev, katerih skupni strošek ni podoben nobeni vrednosti glave. Obravnavati glavo kot velikost opravila je napaka pri modeliranju, preden je napaka pri usmerjanju.

Preveritev 1: ali obstaja odločitvena točka, ki lahko izbere pot?

Poimenujte komponento, ki bo opravila izbiro, nato pa poimenujte, kaj ve v trenutku izbire. Posodabljalnik, ki jemlje z dokumentiranega nabora gostiteljev, pozna svoj namen, preden se prenos začne. Storitev prenosa, ki pregleda metapodatke in nato odpre zahtevo, pozna opravilo, preden povezava obstaja. Sodelujoči proxy lahko uporabi politiko na ravni zahteve ali odgovor shrani v predpomnilnik, ne da bi se pretvarjal, da je usmerjevalnik.

Če je odgovor »prehod«, je kontrolni seznam že spodletel. Prehod lahko razvrsti znane tokove po cilju, oznaki ali odjemalskem segmentu in jih pošlje po določeni poti od prvega paketa, kar pogosto zadostuje odobrenemu posodabljalniku in nikoli ne zadostuje neznani velikosti odgovora.

Preveritev 2: kaj vam metapodatki v resnici povedo?

Usmerjanje zavedno aplikacije je le toliko dobro, kolikor dobra so polja, ki jih bere. Pravila o dolžini odgovora v semantika HTTP dovoljujejo primere, ko dolžina na začetku ni na voljo, kodiranja vsebine pa tako ali tako naredijo število prenesenih bajtov različno od velikosti predstavitve. Zato se bo politika, ki zamenja pot, ko glava preseže prag, obnašala nedosledno, in sicer predvsem prav pri velikih prenosih, ki naj bi jih ujela.

Kar lahko metapodatki aplikacije podprejo, je odločitev o opravilu: ta potek dela je množična sinhronizacija, ta je interaktiven, ta je posodobitev programske opreme z znanega vira. To je politika, zapisana v jeziku namere, in je dovolj stabilna za preizkus. »Ta odgovor bo večji od štirideset megabajtov« ni takšna politika.

Preveritev 3: ali tok že obstaja?

Usmerjanje se lahko za tok spremeni, ne da bi se spremenila identiteta povezave, in to razliko je vredno držati natančno. Povezava TCP je prepoznana po naslovih in vratih svojih koncev, paketi pa lahko gredo po drugi poti, če se usmerjevalna tabela spremeni pod njimi. Kar se ne more spremeniti nevidno, je stanje prevajanja omrežnih naslovov: premik prometa na drug izhod običajno spremeni javni izvorni tuple, oddaljeni konec pa bo videl drugega partnerja brez ustreznega stanja.

conntrack -L -p tcp --dport 443 | head -5
ip route get 203.0.113.10
ss -tn state established dst 203.0.113.10

Praktično pravilo je torej, da je premik sredi povezave z enega izhoda na drugega nova povezava, ne selitev. Če dizajn zahteva, da se ista povezava nadaljuje, je bilo treba odločitev sprejeti pred prvim SYN, in nobeno pozneje dodano pravilo paketov je ne more čisto rekonstruirati.

Preveritev 4: ali je resnična zahteva zakasnitev, ne izhod?

Zelo veliko zahtev »pošlji množični promet drugam« je v resnici pritožb, da velik prenos naredi interaktivno delo počasno. To je problem razvrščanja in ima odgovor razvrščanja: pošteno čakanje v vrsti ali podprta politika pasovne širine na obstoječi poti prepreči množičnemu toku, da bi izstradal sporočilo v klepetu, ne da bi premaknil katero koli od obeh.

tc qdisc replace dev eth0 root cake bandwidth 100mbit

Takšen pristop k simptomu pusti odločitev o izhodu tam, kam jo je postavila varnostna politika, in jo je mogoče razveljaviti z enim ukazom. Sprememba izhoda za cel razred prometa je sprememba politike s posledicami za overjanje, beleženje in pravila dostopa, zato ne bi smela biti prvo orodje pri pritožbi zaradi zakasnitve.

Če je zahteva res drug internetni izhod, to povejte s temi besedami in to izvedite na podprti meji: nova povezava iz odobrenega poteka dela ali aplikacija, ki odpre svojo zahtevo skozi izbrani izhod. Nato zabeležite, katere naloge uporabljajo kateri izhod, da naslednja oseba tega ne bi morala sklepati iz usmerjevalne tabele.

Kontrolni seznam hranite v zapisu spremembe: odločitveno točko, polje ali opravilo, ki jo vodi, ali tok že obstaja in ali je bil izmerjeni simptom zakasnitev ali izhod. Štiri vprašanja, in politika, ki odgovori na vsa štiri, je tista, ki jo lahko upravljate, namesto da bi jo branili.

Sorodni članki