- « Poprzedni
- Następny »
- Oznacz jako nowe
- Zakładka
- Obserwuj
- Wycisz
- Subskrybuj źródło RSS
- Wyróżnij
- Drukuj
- Zgłoś
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.
- Oznacz jako nowe
- Zakładka
- Obserwuj
- Wycisz
- Subskrybuj źródło RSS
- Wyróżnij
- Drukuj
- Zgłoś
Problem z adresacją IP - pytanie.
@ptr1 nie wszyscy jeszcze korzystają w równej mierze z ipv6.
- Oznacz jako nowe
- Zakładka
- Obserwuj
- Wycisz
- Subskrybuj źródło RSS
- Wyróżnij
- Drukuj
- Zgłoś
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ą.
- Oznacz jako nowe
- Zakładka
- Obserwuj
- Wycisz
- Subskrybuj źródło RSS
- Wyróżnij
- Drukuj
- Zgłoś
Problem z adresacją IP - pytanie.
- Oznacz jako nowe
- Zakładka
- Obserwuj
- Wycisz
- Subskrybuj źródło RSS
- Wyróżnij
- Drukuj
- Zgłoś
Problem z adresacją IP - pytanie.
Tras nie testuję regularnie, ale jeśli już to tylko w konkretnycb kontekstach.
- Oznacz jako nowe
- Zakładka
- Obserwuj
- Wycisz
- Subskrybuj źródło RSS
- Wyróżnij
- Drukuj
- Zgłoś
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"
- « Poprzedni
- Następny »