Atliekant daugelį užduočių, vėlavimai tarp kliento ir serverio yra labai svarbūs, pavyzdžiui, internetiniuose žaidimuose, vaizdo / balso konferencijose, IP telefonijoje, VPN ir kt. Jei serveris yra per toli nuo kliento IP tinklo lygiu, delsos (liaudiškai vadinamos „ping“, „lag“) trukdys darbui.
Geografinis serverio artumas ne visada prilygsta artumui IP maršruto parinkimo lygiu. Taigi, pavyzdžiui, serveris kitoje šalyje gali būti „arčiau“ nei serveris jūsų mieste. Viskas dėl maršruto parinkimo ir tinklo konstravimo ypatumų.
Kaip išsirinkti serverį, kuris būtų kuo arčiau visų potencialių klientų? Kas yra IP tinklo ryšys? Kaip nukreipti klientą į artimiausią serverį? Išsiaiškinkime straipsnyje.
Vėlavimų matavimas
Pirma, išmokime išmatuoti vėlavimą. Ši užduotis nėra tokia paprasta, kaip gali atrodyti, nes delsos gali skirtis priklausomai nuo skirtingų protokolų ir paketų dydžių. Taip pat galite praleisti trumpalaikius įvykius, pvz., keletą milisekundžių trunkančių kritimų.
ICMP – įprastas ping
Naudosime „Unix ping“ programą, kuri leidžia rankiniu būdu nustatyti intervalus tarp paketų siuntimo, ko „Windows“ skirta ping versija negali padaryti. Tai svarbu, nes jei tarp paketų yra ilgos pauzės, galite tiesiog nematyti, kas vyksta tarp jų.
Pakuotės dydis (parinktis -s) – pagal numatytuosius nustatymus ping programa siunčia 64 baitų dydžio paketus. Naudojant tokius mažus paketus, reiškiniai, atsirandantys su didesniais paketais, gali būti nepastebimi, todėl paketo dydį nustatysime iki 1300 baitų.
Intervalas tarp paketų (parinktis -i) – laikas tarp duomenų siuntimų. Pagal numatytuosius nustatymus paketai siunčiami kartą per sekundę, tai labai ilgai, realios programos siunčia šimtus ir tūkstančius paketų per sekundę, todėl nustatysime intervalą 0.1 sekundės. Programa tiesiog neleidžia mažiau.
Dėl to komanda atrodo taip:
ping -s 1300 -i 0.1 yandex.ru
Šis dizainas leidžia pamatyti tikroviškesnį vėlavimo vaizdą.
Ping per UDP ir TCP
Kai kuriais atvejais TCP ryšiai apdorojami kitaip nei ICMP paketai, todėl matavimai gali skirtis priklausomai nuo protokolo. Taip pat dažnai atsitinka, kad pagrindinis kompiuteris tiesiog nereaguoja į ICMP, o įprastas ping neveikia. Pavyzdžiui, tai šeimininkas daro visą gyvenimą. microsoft.com.
Naudingumas
Kadangi UDP ir TCP veikia tam tikruose, turime „ping“ konkrečiam prievadui. Pabandykime išsiųsti ping TCP 80, tai yra, žiniatinklio serverio prievadą:
$ sudo nping --tcp -p 80 --delay 0.1 -c 0 microsoft.com
Starting Nping 0.7.80 ( https://nmap.org/nping ) at 2020-04-30 13:07 MSK
SENT (0.0078s) TCP 10.0.0.1:63236 > 13.77.161.179:80 S ttl=64 id=49156 iplen=40 seq=3401731188 win=1480
SENT (0.1099s) TCP 10.0.0.1:63236 > 13.77.161.179:80 S ttl=64 id=49156 iplen=40 seq=3401731188 win=1480
RCVD (0.2068s) TCP 13.77.161.179:80 > 10.0.0.1:63236 SA ttl=43 id=0 iplen=44 seq=1480267007 win=64240 <mss 1440>
SENT (0.2107s) TCP 10.0.0.1:63236 > 13.77.161.179:80 S ttl=64 id=49156 iplen=40 seq=3401731188 win=1480
RCVD (0.3046s) TCP 13.77.161.179:80 > 10.0.0.1:63236 SA ttl=43 id=0 iplen=44 seq=1480267007 win=64240 <mss 1440>
SENT (0.3122s) TCP 10.0.0.1:63236 > 13.77.161.179:80 S ttl=64 id=49156 iplen=40 seq=3401731188 win=1480
RCVD (0.4247s) TCP 13.77.161.179:80 > 10.0.0.1:63236 SA ttl=42 id=0 iplen=44 seq=2876862274 win=64240 <mss 1398>
Max rtt: 112.572ms | Min rtt: 93.866ms | Avg rtt: 101.093ms
Raw packets sent: 4 (160B) | Rcvd: 3 (132B) | Lost: 1 (25.00%)
Nping done: 1 IP address pinged in 0.43 seconds
Pagal numatytuosius nustatymus nping siunčia 4 paketus ir sustabdo. Parinktis -c 0 m įgalina begalinį paketų siuntimą; norint sustabdyti programą, reikia paspausti Ctrl+C. Statistika bus rodoma pabaigoje. Matome, kad vidutinė rtt (atgalinės kelionės laikas) vertė yra 101 ms.
MTR – traceroute ant steroidų
Programa
$ sudo mtr microsoft.com
(Spustelėti) MTR programos sąsaja. Pradėtas maršruto sekimas į microsoft.com
MTR iš karto parodo ping kiekvienam grandinės kompiuteriui, o programai veikiant duomenys nuolat atnaujinami ir matomi trumpalaikiai pokyčiai.
Ekrano nuotraukoje matyti, kad mazgas #6 turi paketų nuostolių, tačiau iš tikrųjų tai nėra visiškai tiesa, nes kai kurie maršrutizatoriai gali tiesiog išmesti paketus su pasibaigusiu TTL ir negrįžti atsakymo į klaidą, todėl čia galima nepaisyti paketų praradimo duomenų.
WiFi vs kabelis
Ši tema nėra visiškai susijusi su straipsniu, tačiau, mano nuomone, ji yra labai svarbi vėlavimo kontekste. Labai mėgstu WiFi, bet jei turėsiu nors menkiausią galimybę prisijungti prie interneto laidu, pasinaudosiu. Taip pat visada atgrasau žmones nuo WiFi kamerų naudojimo.
Jei žaidžiate rimtus internetinius šaudymo žaidimus, transliuojate vaizdo įrašus arba prekiaujate biržoje: naudokite internetą kabeliu.
Pateikiame vizualinį „WiFi“ ir kabelių jungčių palyginimo testą. Tai yra „WiFi“ maršrutizatoriaus ping, ty dar net ne internetas.
(Spustelėti) Palyginimas su „WiFi“ maršruto parinktuvu kabeliu ir „WiFi“.
Matyti, kad per WiFi uždelsimas yra 1 ms ilgesnis, o kartais būna paketų, kurių vėlavimas yra dešimt kartų ilgesnis! Ir tai tik trumpas laiko tarpas. Tuo pačiu metu tas pats maršrutizatorius sukuria stabilų <1 ms vėlavimą.
Aukščiau pateiktame pavyzdyje naudojamas 802.11 GHz WiFi 2.4n, prie WiFi prieigos taško prijungtas tik nešiojamas kompiuteris ir telefonas. Jei prieigos taške būtų daugiau klientų, rezultatai būtų daug prastesni. Štai kodėl aš labai prieš, kad visi biuro kompiuteriai būtų perjungti į WiFi, jei įmanoma juos pasiekti kabeliu.
IP ryšys
Taigi, mes išmokome matuoti delsą iki serverio, pabandykime surasti artimiausią serverį. Norėdami tai padaryti, galime pažiūrėti, kaip veikia mūsų teikėjo maršruto parinkimas. Tam patogu naudotis paslauga
Kai patenkame į svetainę, matome, kad mūsų IP adresas priklauso autonominei sistemai
Žvelgdami į autonominių sistemų jungiamumo grafiką, matome, per kuriuos aukštesnio lygio teikėjus mūsų teikėjas yra prijungtas prie likusio pasaulio. Kiekvieną tašką galima spustelėti, galite įeiti ir perskaityti, koks tai teikėjas.
Tiekėjo autonominių sistemų jungiamumo grafikas
Naudodami šį įrankį galite ištirti, kaip yra sudaryti bet kurio teikėjo kanalai, įskaitant prieglobą. Pažiūrėkite, su kuriais teikėjais jis yra tiesiogiai prijungtas. Norėdami tai padaryti, ieškodami bgp.he.net turite įvesti serverio IP adresą ir pažvelgti į jo autonominės sistemos grafiką. Taip pat galite suprasti, kaip vienas duomenų centras arba prieglobos paslaugų teikėjas yra prijungtas prie kito.
Daugumoje srauto mainų punktų yra specialus įrankis, vadinamas look glass, kuris leidžia ping ir traceroute iš konkretaus maršruto parinktuvo mainų taške.
Pavyzdžiui, čia
Taigi, rinkdamiesi serverį galime iš anksto pamatyti, kaip jis atrodys iš skirtingų srauto mainų taškų. O jei mūsų potencialūs klientai yra tam tikroje geografinėje vietovėje, galime rasti optimalią serverio vietą.
Pasirinkite artimiausią serverį
Nusprendėme supaprastinti savo klientams optimalaus serverio paieškos procedūrą ir sukūrėme puslapį su automatiniu netoliese esančių vietų testavimu:
Kai lankotės puslapyje, scenarijus matuoja vėlavimą nuo jūsų naršyklės iki kiekvieno serverio ir parodo juos interaktyviame žemėlapyje. Spustelėjus duomenų centrą, rodoma informacija su bandymo rezultatais.
Mygtukas nukreipia jus į visų mūsų duomenų centrų delsos bandymo puslapį. Norėdami peržiūrėti bandymo rezultatus, spustelėkite duomenų centro tašką žemėlapyje
Šaltinis: www.habr.com