Problem z adresacją IP - pytanie.

ROZWIĄZANE

Poziom 18, Badacz Przestworzy
  • 156
  • 564
  • 0

Problem z adresacją IP - pytanie.

OK, po dwóch dniach mam następujące obserwacje:

 

1. router się nie rozłącza, ALE

2. Speedtest pokazuje na IPv6 wyniki gorsze o 15-20% (ping, download, upload) niż na IPv4. Zwłaszcza dotyczy do upload-u. A powinno być dokładnie odwrotnie!

 

Nie ma tutaj przypadku, ponieważ pomiary przeprowadziłem kilka razy (najpierw na IPv6 a potem po 20 minutach na IPv4) do tych samych punktów. Dodatkowo sam pomiar na IPv6 jest mniej stabilny.

 

Pytanie - czy możliwe jest, że routing dla IPv6 idzie inną trasą niż IPv4?

 

Póki co pozostałem przy IPv4.


Poziom 30, Pasjonat Galaktyczny
  • 2321
  • 10649
  • 72

Problem z adresacją IP - pytanie.

@ptr1  nie wszyscy jeszcze korzystają w równej mierze z ipv6.


Poziom 38, Pomocnik Międzygalaktyczny
  • 9660
  • 40057
  • 331

Problem z adresacją IP - pytanie.


@ptr1napisał(-a)

OK, po dwóch dniach mam następujące obserwacje:

 

1. router się nie rozłącza, ALE

2. Speedtest pokazuje na IPv6 wyniki gorsze o 15-20% (ping, download, upload) niż na IPv4. Zwłaszcza dotyczy do upload-u. A powinno być dokładnie odwrotnie!

 

Nie ma tutaj przypadku, ponieważ pomiary przeprowadziłem kilka razy (najpierw na IPv6 a potem po 20 minutach na IPv4) do tych samych punktów. Dodatkowo sam pomiar na IPv6 jest mniej stabilny.

 

Pytanie - czy możliwe jest, że routing dla IPv6 idzie inną trasą niż IPv4?

 

Póki co pozostałem przy IPv4.


Rad byłbym poznać metodologie tych pomiarów, bo nie jest to takie proste. 

Trasy oczywiście są różne, ale z kilku powodów więc różnice mogą pojawiać się i znikać dynamicznie.

Jednym pewnym elementem jest dodanie jednego "hopka" do wszystkich tras IPV4 przy konfiguracji z IPv6 (CGNAT). 

U mnie (mam stale DS) konsekwentnie trasy w ipv6 są lepsze - krótsze i bardziej responsywne. Speedtesty wypadają bardzo podobnie - konsekwentnie te które działają w ipv6 pokazują wartości nominalne z umowy (1000/300). Ale na co dzień używam swojej sondy testującej równocześnie wszystko. Jeśli ktoś jest zainteresowany to mogę podzielić się metodyką pomiarową. 


Poziom 18, Badacz Przestworzy
  • 156
  • 564
  • 0

Problem z adresacją IP - pytanie.

@j131 Tak, interesuje mnie jakiej metody pomiaru używasz. Możesz się podzielić tą informacją?

 

 


Poziom 38, Pomocnik Międzygalaktyczny
  • 9660
  • 40057
  • 331

Problem z adresacją IP - pytanie.

Udostępnię skrypty za tydzień, jak wrócę z urlopu. Ale generalnie wykorzystuję serwery Netflixa czyli fast.com, z linii poleceń, ograniczając się do najbliższego serwera. Pomiary ipv4 ipv6 down, up i ping są robione jednocześnie, przez kilka minut, IIRC. Wartości wychodzą odrobinę niższe niż z pomiarów przez stronę fast.com, ale mam kontrolę nad wszystkimi elementami.
Tras nie testuję regularnie, ale jeśli już to tylko w konkretnycb kontekstach.

Poziom 38, Pomocnik Międzygalaktyczny
  • 9660
  • 40057
  • 331

Problem z adresacją IP - pytanie.

#!/bin/bash
# fast-lite-ha.sh  –  Fast.com-style speed test using pyppeteer2 + curl
# prerequisites:  pip install pyppeteer2 jq
# generates json output for HA integration

set -euo pipefail
echo 'setting up'
# --- 1. Get a fresh token via pyppeteer2 ------------------------------------
TOKEN=$(
python3 - <<'EOF'
import asyncio,re
from pyppeteer import launch
async def main():
    b=await launch(headless=True,args=['--no-sandbox','--disable-gpu'])
    p=await b.newPage()
    token=None
    async def intercept(req):
        nonlocal token
        if "api.fast.com/netflix/speedtest/v2" in req.url and "token=" in req.url:
            token=re.search(r"token=([\w.-]+)",req.url).group(1)
        await req.continue_()
    await p.setRequestInterception(True); p.on('request',intercept)
    await p.goto('https://fast.com')
    for _ in range(100):
        if token: break
        await asyncio.sleep(0.2)
    await b.close()
    if token: print(token)
asyncio.get_event_loop().run_until_complete(main())
EOF
)

[ -z "$TOKEN" ] && { echo "Token retrieval failed"; exit 1; }

#echo "Token: $TOKEN"

# --- 2. Ask Fast.com API for test URLs --------------------------------------
#download
API="https://api.fast.com/netflix/speedtest/v2?https=true&urlCount=1&token=$TOKEN"
TARGET4=$(curl -4 -s "$API" | jq -r '.targets[].url')

TARGET6=$(curl -s "$API" | jq -r '.targets[].url')

TARGETS=$(printf "%s\n%s\n" "$TARGET6" "$TARGET4")

#upload
API="https://api.fast.com/netflix/speedtest/v2?https=true&urlCount=1&token=$TOKEN&type=upload"

UTARGET4=$(curl -4 -s "$API" | jq -r '.targets[].url')

UTARGET6=$(curl -s "$API" | jq -r '.targets[].url')

UTARGETS=$(printf "%s\n%s\n" "$UTARGET6" "$UTARGET4")


if [ -z "$TARGETS" ]; then
    echo "No dld targets returned"; exit 1
fi

if [ -z "$UTARGETS" ]; then
    echo "No upld targets returned"; exit 1
fi

# --- 3. Run concurrent tests and measure throughput ------------
UTMP=$(mktemp)
DTMP=$(mktemp)
PTMP=$(mktemp)
TARGET=$(echo "$TARGET4" | sed -E 's#https://([^/]+)/.*#\1#')
TARGET_IP=$(getent ahostsv4 "$TARGET" | awk 'NR==1{print $1}')
#echo "$TARGET_IP"

#warmup
#echo "$UTARGETS" | xargs -P2 -I{} bash -c \
#     "dd if=/dev/zero bs=10M count=1 2>/dev/null |
#     curl -s -o /dev/null \
#     --http1.1 -X POST \
#     --data-binary @- \
#     -w '%{speed_upload}\n'\
#     '{}' > /dev/null"

ping -i 0.1 -D "$TARGET_IP" > "$PTMP" 2>/dev/null &
PING_PID=$!

(
echo "$UTARGETS" | xargs -P2 -I{} bash -c \
     "dd if=/dev/zero bs=100M count=1 2>/dev/null |
     curl -s -o /dev/null \
     --http1.1 -X POST \
     --data-binary @- \
     -w '%{speed_upload}\n'\
     '{}' >> '$UTMP'"
) &
U_PID=$!

(
#warmup
echo "$TARGETS" | xargs -P2 -I{} bash -c \
  "curl -s -o /dev/null -w '%{speed_download}\n' '{}' >/dev/null"
echo "$TARGETS" | xargs -P2 -I{} bash -c \
  "curl -s -o /dev/null -w '%{speed_download}\n' '{}' >/dev/null"

echo "$TARGETS" | xargs -P2 -I{} bash -c \
  "curl -s -o /dev/null -w '%{speed_download}\n' '{}' >>'$DTMP'"
) &
D_PID=$!

echo "testing..."

wait $D_PID $U_PID
kill "$PING_PID" 2>/dev/null || true

DL_MBPS=$(awk '{t+=$1} END{printf "%.2f", t*8/1e6}' "$DTMP")
UL_MBPS=$(awk '{t+=$1} END{printf "%.2f", t*8/1e6}' "$UTMP")

# latency, jitter
read AVG MED P95 JITTER <<<$(awk -F'time=' '
/time=/{
  split($2,a," "); v=a[1]
  vals[n++]=v
  sum+=v
  if(n>1){d=v-last; if(d<0)d=-d; jsum+=d}
  last=v
}
END{
  if(n){
    asort(vals)
    p50=vals[int((n+1)*0.5)]
    p95=vals[int((n+1)*0.95)]
    avg=sum/n
    jitter=(n>1)?jsum/(n-1):0
    printf "%.2f %.2f %.2f %.2f", avg, p50, p95, jitter
  }
}' "$PTMP")

# packet loss
sent=$(grep -c 'icmp_seq=' "$PTMP")
recv=$(grep -c 'time=' "$PTMP")
LOSS=$(awk -v s=$sent -v r=$recv 'BEGIN{if(s>0) printf "%.2f", (s-r)*100/s; else print "0.00"}')

# write JSON for Home Assistant

printf '{"download": %.2f, "upload": %.2f, "rtt_avg": %.2f, "rtt_med": %.2f, "rtt_p95": %.2f, "jitter": %.2f, "loss": %.2f}\n' \
  "$DL_MBPS" "$UL_MBPS" "$AVG" "$MED" "$P95" "$JITTER" "$LOSS" > /opt/homeassistant/fast-lite.json

rm -f "$DTMP" "$UTMP" "$PTMP"