Kontrola a diagnostika kvality služieb internetového poskytovateľa. Rýchlosť prenosu, strata packeto

Dnes | 12:24 | Blog | Slavomír

Tento článok Vám nielenže pomôže urobiť kontrolu a diagnostiku kvality služieb internetového poskytovateľa, ale pomôže aj poctivým a pracovitým poskytovateľom internetu s diagnostikou, testovaním a zlepšovaním služieb, či už veľkým firmám ako mobilní operátori, tak aj malým lokálnym poskytovateľom internetu.

Čo to znamená strata packetov a retransmisie?

Pri nekvalitnom internetovom pripojení (ako je 4G LTE cez externú anténu za zlého počasia alebo pri preťažení vysielača) dochádza k javom, ktoré priamo spomaľujú internet. Sú to strata paketov (Packet Loss) a retransmisie (Retransmissions).

Dáta sa po internete neposielajú ako jeden veľký prúd, ale sú rozdelené do miliónov malých balíčkov – paketov. Predstaviť si to môžete ako kamióny naložené tovarom.

Čo je to strata paketov (Packet Loss)?

Strata paketov znamená, že niektoré z týchto balíčkov dát nedorazia do cieľa – cestou sa "stratia".

V prípade 4G internetu s externou anténou k tomu dochádza najčastejšie kvôli rušeniu rádiového signálu (hustý dážď, sneženie, prekážky ako stromy, alebo elektromagnetický šum v okolí). Signál zoslabne natoľko, že prijímač (váš router) nedokáže z rádiových vĺn prečítať jednotky a nuly konkrétneho paketu. Paket je nečitateľný, preto ho systém zahodí.

Čo sú to retransmisie (Retransmissions)?

Retransmisia je opakované zaslanie strateného balíčka dát. Je to priama obranná reakcia internetových protokolov (najmä protokolu TCP) na stratu paketov.

Keď váš počítač sťahuje súbor alebo načítava stránku, neustále posiela serveru potvrdenia: "Dostal som paket č. 1, dostal som paket č. 2..." Ak sa však paket č. 3 po ceste cez 4G sieť kvôli rušeniu stratí (Packet Loss), počítač upozorní server: "Paket č. 3 mi chýba!" Server v tej chvíli musí poslať paket č. 3 znova. Tento proces opätovného odoslania sa nazýva retransmisia.

Pri kvalitnom internete je strata paketov 0 %. Pri nekvalitnom 4G pripojení stačí strata 1 až 2 % paketov na to, aby ste pocítili výrazné sekanie pri hrách či videohovoroch. Ak strata stúpne nad 5 %, internet sa stáva pre mnohé služby takmer nepoužiteľný.

MTR (My Traceroute)

MTR. Open source linux program. MTR (My Traceroute). MTR nemá plnohodnotnú náhradu pre Windows. Fascinujúci nástroj ktorý odhalí cez ktoré routre musia pretiecť dáta aby sa prebiehala komunikácia / prenos dát medzi Vašim PC a daným serverom. Funguje na princípe, že vyžiada od routru odpoveď a ten pošle odpoveď naspäť. Odpoveď naspäť nedostane od routrov ktoré majú firewall a odpoveď zablokujú. Funguje na kombinovanom princípe dvoch klasických sieťových nástrojov: traceroute a ping.
Užitočný nástroj pre účel výpadku internetu - viete na ktorom routri je výpadok - v prípade na ktorej anténe je výpadok pri Wifi internete - IPS totižto prevažne používajú dátovú trasu cez viacero antén.

Príklady CLI príkazov

mtr facebook.com

mtr 8.8.8.8

mtr zive.sk

iPerf3. Open Source program príkazového riadku

Meranie maximálnej rýchlosti. Meranie Packet loss strata packetov pre download a upload osobitne je výborná funkcionalita ale percentuálny pomer nevypočíta natíve a je treba na to skript. Na Github je vidieť mimoriadne aktívny vývoj. Program bude fungovať len vtedy ak ho bude mať nainštalovaný daný skúšobný server a zároveň aj Váš PC.

Komerčný CLI Linux / Windows nástroj Speedtest. Speedtest.net od americkej spoločnosti Ookla

Program musí byť nainštalovaný na skúšobnom servery a zároveň aj na Vašom PC aby to fungovalo. V porovnaní s web verziou dokáže merať aj Packet loss hoci neudávať či pri downloade a uploade Program má ale skromné fukcionality, nie je ich veľa.

Spustí sa mimoriadne jednoducho, stačí zadať do terminálu „speedtest“.

Zobrazí latenciu internetu v pokojovom stave a v stave kedy kedy ide na plnú záťaž. Rozdiely sú niekedy veľmi veľké, najmä v mojom prípade.

INŠTALÁCIA APLIKÁCIE SPEEDTEST

curl -Lo /tmp/speedtest.tgz https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-x86_64.tgz

tar -xzf /tmp/speedtest.tgz -C /tmp

sudo mv /tmp/speedtest /usr/local/bin/

sudo chmod +x /usr/local/bin/speedtest

rm -f /tmp/speedtest.tgz /tmp/speedtest.5 /tmp/speedtest.md

Zobrazí ktoré servery sú dostupné na Slovensku

speedtest -L | grep -E 'Slovakia|Bratislava|Zvolen|Banska|Kosice'

Výber konkrétneho testovacieho serveru príklad

speedtest -s 17164

 

KOMPLEXNÝ PYTHON SKRIPT ZALOŽENÝ NA IPERF3, PRIAMO VLOŽIŤ DO TERMINÁLU

Skript sa zameriava na extrémnu záťaž, paralelný 8 vláknový download a 8 vláknový upload, dokopy 16 vláken, počas 15 sekúnd, meria latenciu a stratu packetov. Keď dám len jedno vláknový a download a upload, výsledky ukáže radikálne lepšie. Viac vláknový test napodobňuje reálnu internetovú prevádzku.

python3 - << 'EOF'
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import sys
import time
import socket
import subprocess
import threading
import re

# Databáza stabilných európskych iperf3 serverov a ich alternatívnych portov
SERVERS_POOL = [
    ("fra.speedtest.clouvider.net", [5201, 5202, 5203, 5204, 5200], "Frankfurt, Nemecko"),
    ("speedtest.init7.net",         [5201],                         "Zürich, Švajčiarsko"),
    ("ams.speedtest.clouvider.net", [5201, 5202, 5203, 5204, 5200], "Amsterdam, Holandsko"),
    ("lon.speedtest.clouvider.net", [5201, 5202, 5203, 5204, 5200], "Londýn, UK"),
    ("iperf.worldstream.nl",        [5201],                         "Holandsko"),
]

DURATION = 15  # Dĺžka testu v sekundách
STREAMS = 8    # Počet paralelných vlákien pre každý smer

def get_tcp_mss():
    """Zistí presnú dohodnutú veľkosť TCP paketu (MSS) bez toho, aby blokoval iperf3 server."""
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(2.0)
        s.connect(("1.1.1.1", 443))
        mss = s.getsockopt(socket.IPPROTO_TCP, socket.TCP_MAXSEG)
        s.close()
        return mss
    except Exception:
        return 1448  # Štandardný nameraný MSS pre vašu linku

def to_bytes(val, unit):
    multipliers = {
        'kbytes': 1024,
        'mbytes': 1024**2,
        'gbytes': 1024**3,
        'bytes': 1,
        'kbits/sec': 1000,
        'mbits/sec': 1000**2,
        'gbits/sec': 1000**3,
        'bits/sec': 1
    }
    return float(val) * multipliers.get(unit.lower(), 1)

def ping_worker(host, duration, result_container, stop_event):
    count = int(duration * 2)
    cmd = ["ping", "-c", str(count), "-i", "0.5", "-q", host]
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    
    while proc.poll() is None:
        if stop_event.is_set():
            proc.terminate()
            break
        time.sleep(0.2)
        
    try:
        out, _ = proc.communicate(timeout=1.0)
    except Exception:
        out = ""
        
    rtt_match = re.search(r"rtt min/avg/max/mdev = ([0-9.]+)/([0-9.]+)/([0-9.]+)/([0-9.]+)", out)
    if rtt_match:
        result_container['min'] = rtt_match.group(1)
        result_container['avg'] = rtt_match.group(2)
        result_container['max'] = rtt_match.group(3)
        result_container['mdev'] = rtt_match.group(4)

def run_benchmark():
    print("=" * 70)
    print("      IPERF3 ANALÝZA: VEĽKOSŤ PAKETOV, RÝCHLOSŤ A PACKET LOSS")
    print("=" * 70)
    mss = get_tcp_mss()
    mtu = mss + 40
    print(f" Zistená veľkosť paketu: {mss} B (TCP MSS) | ~{mtu} B (MTU rámec)")
    print(f" Parametre testu       : {DURATION} s, {STREAMS} vlákien obojsmerne (Download + Upload naraz)")
    print("-" * 70)
    targets = SERVERS_POOL

    for host, ports, location in targets:
        for port in ports:
            print(f" 🔍 Skúšam {host}:{port} ({location})...", end="", flush=True)
            ping_data = {}
            stop_event = threading.Event()
            ping_thread = threading.Thread(target=ping_worker, args=(host, DURATION, ping_data, stop_event))
            cmd = [
                "iperf3", "-c", host, "-p", str(port),
                "-4", "-t", str(DURATION), "-P", str(STREAMS), "--bidir"
            ]
            ping_thread.start()
            try:
                proc = subprocess.run(cmd, capture_output=True, text=True, timeout=DURATION + 8)
            except subprocess.TimeoutExpired:
                stop_event.set()
                ping_thread.join()
                print(" ⏱️ Timeout (neodpovedá).")
                continue
            except KeyboardInterrupt:
                stop_event.set()
                ping_thread.join()
                print("\n\n⚠️ Test prerušený používateľom.")
                sys.exit(0)

            stop_event.set()
            ping_thread.join()

            if proc.returncode == 0:
                print(" ✅ Spojenie nadviazané!")
                print("    Prebieha 15s obojsmerné meranie na plný výkon...", flush=True)
                parse_and_print_results(proc.stdout, mss, ping_data, host, port)
                return
            else:
                err = (proc.stderr or proc.stdout).strip().lower()
                if "busy" in err:
                    print(" ⚠️ Obsadený.")
                elif "refused" in err:
                    print(" ⚠️ Odmietnutý.")
                else:
                    print(" ❌ Nedostupný.")
                    
    print("\n❌ Nepodarilo sa nájsť žiadny voľný server. Všetky verejné servery sú momentálne vyťažené. Skúste to o chvíľu.")

def parse_and_print_results(stdout, mss, ping_data, host, port):
    lines = stdout.splitlines()
    tx_sent_bytes = tx_retr = 0
    tx_speed = "N/A"
    rx_sent_bytes = rx_retr = 0
    rx_speed = "N/A"
    
    for line in lines:
        if "[SUM][TX-C]" in line and "sender" in line:
            m = re.search(r"(\d+(?:\.\d+)?)\s+([KMGT]?Bytes)\s+(\d+(?:\.\d+)?)\s+([KMGT]?bits/sec)\s+(\d+)\s+sender", line)
            if m:
                tx_sent_bytes = to_bytes(m.group(1), m.group(2))
                tx_speed = f"{m.group(3)} {m.group(4)}"
                tx_retr = int(m.group(5))
        elif "[SUM][RX-C]" in line and "sender" in line:
            m = re.search(r"(\d+(?:\.\d+)?)\s+([KMGT]?Bytes)\s+(\d+(?:\.\d+)?)\s+([KMGT]?bits/sec)\s+(\d+)\s+sender", line)
            if m:
                rx_sent_bytes = to_bytes(m.group(1), m.group(2))
                rx_speed = f"{m.group(3)} {m.group(4)}"
                rx_retr = int(m.group(5))

    tx_packets = int(tx_sent_bytes / mss) if mss else 0
    tx_total = tx_packets + tx_retr
    tx_loss_pct = (tx_retr / tx_total * 100) if tx_total > 0 else 0.0

    rx_packets = int(rx_sent_bytes / mss) if mss else 0
    rx_total = rx_packets + rx_retr
    rx_loss_pct = (rx_retr / rx_total * 100) if rx_total > 0 else 0.0

    print("\n" + "=" * 70)
    print(f"            ZÁVEREČNÝ VÝSLEDOK TESTU ({host}:{port})")
    print("=" * 70)
    print(" ⬇️  DOWNLOAD (Sťahovanie zo servera k vám):")
    print(f"     • Rýchlosť            : {rx_speed}")
    print(f"     • Prenesené dáta      : {rx_sent_bytes / (1024**2):.2f} MB")
    print(f"     • Počet paketov       : {rx_packets:,} ks (každý po {mss} B)")
    print(f"     • Stratené pakety     : {rx_retr:,} retransmisií")
    print(f"     • PACKET LOSS         : {rx_loss_pct:.2f} %")
    print("-" * 70)
    print(" ⬆️  UPLOAD (Odosielanie z vášho PC na server):")
    print(f"     • Rýchlosť            : {tx_speed}")
    print(f"     • Prenesené dáta      : {tx_sent_bytes / (1024**2):.2f} MB")
    print(f"     • Počet paketov       : {tx_packets:,} ks (každý po {mss} B)")
    print(f"     • Stratené pakety     : {tx_retr:,} retransmisií")
    print(f"     • PACKET LOSS         : {tx_loss_pct:.2f} %")
    print("-" * 70)
    print(" ⏱️  LATENCIA POČAS TEJTO ZÁŤAŽE (Bufferbloat):")
    if ping_data:
        print(f"     • Odozva v pokoji/min : {ping_data.get('min', 'N/A')} ms")
        print(f"     • Priemerná odozva    : {ping_data.get('avg', 'N/A')} ms")
        print(f"     • Špičkový zásek (max): {ping_data.get('max', 'N/A')} ms")
        print(f"     • Jitter (rozkmit)    : {ping_data.get('mdev', 'N/A')} ms")
    else:
        print("     • Dáta o odozve sa nepodarilo získať.")
    print("=" * 70)

if __name__ == "__main__":
    run_benchmark()
EOF

Skript by mal fungovať OK, v prípade že by tam bola chyba, môžete na to upozorniť.

Wifi poskytovateľ internetu vs rušenie konkurenčnými ISP. Môžu rušiť externú Wifi anténu aj bežné Wifi routre ktoré majú ľudia v interiéri alebo zosilňovače týchto zariadení?

Bežné domáce Wi-Fi routery, zosilňovače (extendery) a mesh systémy v interiéri môžu rušiť externú Wi-Fi anténu poskytovateľa internetu (=ISP).

Kým medzi dvoma konkurenčnými poskytovateľmi internetu prebieha "boj o frekvencie" na otvorenom priestranstve, domáce zariadenia môžu za určitých okolností tento boj nevedomky ovplyvniť.

Ako môže vnútorný router rušiť vonkajšiu anténu?

Rádiové vlny nekončia na obvodovej stene domu. Hoci tehla, betón či zateplenie signál výrazne oslabujú, časť z neho prenikne von. K rušeniu dochádza vtedy, ak sa stretnú rovnaké frekvencie a kanály:

  1. Zhodná frekvencia: Vonkajší bezdrôtový internet (WISP) najčastejšie funguje v pásme 5 GHz (prípadne staršie inštalácie na 2,4 GHz, alebo licencované pásma ako 60 GHz). Súčasné domáce Wi-Fi routery a zosilňovače vysielajú presne v tom istom pásme 5 GHz.
  2. Prekrytie kanálov: Ak vaša externá anténa prijíma internet od ISP na kanáli napr. 52 a váš domáci Wi-Fi router (alebo router vášho suseda) vysiela interiéri na rovnakom kanáli, dochádza k takzvanému co-channel rušeniu.
  3. Zosilňovače (Extendery): Tieto zariadenia sú z hľadiska rušenia najagresívnejšie. Často opakujú signál na rovnakom kanáli s vysokým výkonom, čím generujú dodatočný šum v éteri.

Kedy je toto rušenie reálnym problémom?

Vo firmvéri exteriérových antén od ISP existuje pokročilá diagnostika, analýza a nastavenia ako nastaviť anténu na ideálnu frekvenciu

Firmvér profesionálnych exteriérových antén, ktoré poskytovatelia internetu (ISP) používajú, obsahuje mimoriadne pokročilé diagnostické nástroje, spektrálne analyzátory a algoritmy na hľadanie ideálnej frekvencie.

Tieto systémy sú neporovnateľne komplexnejšie než to, čo poznáte z bežného domáceho routera. Najčastejšie ide o operačné systémy ako RouterOS (od MikroTiku), airOS (od Ubiquiti) či systémy od značky Cambium Networks.

Tu sú hlavné pokročilé nástroje, ktoré v nich technici (alebo pokročilí používatelia) využívajú:


Vstavaný spektrálny analyzátor (napr. airView alebo Spectral Scan)

Toto je kľúčový nástroj. Anténa dokáže úplne vypnúť prijímanie internetu a prepnúť sa do režimu rádiového skenera. V reálnom čase vykreslí graf celého frekvenčného pásma (napríklad od 4.9 GHz do 6.1 GHz).

Smerovacie nástroje (Alignment Tools)

Pri inštalácii technik neháda smer. Firmvér antény obsahuje akustický alebo vizuálny indikátor sily signálu.

Automatický výber frekvencie (DFS a ATS)

Poskytovatelia internetu nemusia frekvenciu nastavovať iba "natvrdo". Firmvéry podporujú pokročilú automatiku:

Vzdialený manažment (UNMS / WISPSwitch)

K týmto pokročilým nastaveniam sa bežný zákazník spravidla nedostane. Firmvér antény je uzamknutý heslom poskytovateľa. Všetky tieto analýzy robí operátor na diaľku zo svojej centrály. Ak operátorovi zavoláte, že vám padá internet, technik si dokáže otvoriť spektrálnu analýzu vašej antény priamo zo stola a prepnúť vás na lepšiu frekvenciu v priebehu niekoľkých sekúnd.

Zaujímavosti ako funguje internet

Chrbtica slovenského internetu SIX (Slovak Internet eXchange)

SIX (Slovak Internet eXchange) je najvýznamnejšie slovenské peeringové centrum. Zjednodušene povedané, je to "hlavná križovatka", stredisko a strategický bod, kde sa fyzicky prepájajú siete jednotlivých poskytovateľov internetu (ISP) pôsobiacich na Slovensku. 

Namiesto toho, aby dáta slovenských používateľov putovali zložito cez zahraničné servery, vďaka SIX-u si operátori vymieňajú dáta medzi sebou priamo na našom území, čo radikálne zefektívňuje, zrýchľuje a zlacňuje slovenský internet.
 

Sú naň napojení mnohí poskytovatelia internetu?

Áno, takmer všetci veľkí hráči. K sieti SIX je pripojených približne 70 sietí. Patria sem nielen klasickí telekomunikační operátori a poskytovatelia domáceho internetu (ako Orange, Telekom, Slovanet, Swan atď.), ale aj poskytovatelia obsahu, televízni vysielatelia (napr. JOJ, STVR) či technologické firmy (napr. Websupport).

Dátová prevádzka v tomto centre pravidelne dosahuje obrovské hodnoty a prepisuje rekordy najmä vtedy, keď Slováci masovo sledujú dôležité športové prenosy cez internet (rekordná prevádzka presiahla 1,26 Tbit/s počas hokejových majstrovstiev sveta).
 

Je to komunikácia medzi routrami viacero spoločností v centrále

Predstavte si veľkú technologickú miestnosť (dátové centrum) plnú rackov (skríň s hardvérom). Každá internetová spoločnosť má v tomto centre umiestnený svoj vlastný výkonný priemyselný router. Všetky tieto routery sú následne zapojené pomocou extrémne rýchlych optických (alebo metalických) káblov do hlavných centrálnych switchov (prepínačov) samotného SIX-u. Vďaka tejto „centrále“ môžu dáta z routera operátora A skočiť priamo do routera operátora B za zlomok milisekundy.
 

Je za tým univerzita?

Áno, garantom a prevádzkovateľom sú slovenské technické univerzity.

Prečo je za tým univerzita? Ide o strategický ťah. Akademická pôda funguje ako neutrálna zóna. Keďže univerzita nepredáva komerčný internet bežným ľuďom, nie je v konkurenčnom postavení voči žiadnemu operátorovi (Orange, Telekom a pod.). To zaručuje, že centrum funguje nezávisle, spravodlivo pre všetkých členov a zároveň prináša najmodernejšie technológie rýchlo do slovenskej praxe.

České alternatívy ku SIX

Českou priamou alternatívou k slovenskému SIX-u je NIX.CZ (Neutral Internet eXchange)

Je to najväčšie a najvýznamnejšie české peeringové centrum, ktoré funguje na rovnakom princípe ako slovenský SIX. Slúži ako hlavná neutrálna križovatka pre prepojenie sietí českých aj zahraničných internetových poskytovateľov, operátorov a tvorcov obsahu.

Kľúčové fakty o NIX.CZ:


Presah na Slovensko

Zaujímavosťou je, že NIX.CZ nezostáva len v Českej republike. V Bratislave prevádzkuje svoju vlastnú dcérsku vetvu pod názvom NIX.SK. Na slovenskom trhu tak pôsobia dve nezávislé peeringové centrá, ktoré si konkurujú: akademický SIX (prevádzkovaný STU) a komerčne riadený NIX.SK.

Druhá česká alternatíva: Peering.cz

Okrem NIX-u existuje v Česku ešte jedna významná sieťová križovatka s názvom Peering.cz. Ide o čisto komerčný projekt, ktorý spája vyše 190 sietí naprieč strednou Európou (Česko, Slovensko, Rakúsko, Nemecko) a slúži ako druhá dôležitá alternatíva pre operátorov, ktorí chcú diverzifikovať svoje prepojenia.

Prílohy