🌐
nuro光のパケットロス測定
概要
自宅のPCから1時間に一回pingとrsyncをしてpacket lossや転送速度を計測した時のメモ
期間は10月1日 ~ 11月26日
環境は以下の通り
- NURO
- プラン: NURO光G2T (戸建)
- ルーター: F660A
- 地域: 神奈川
- 自宅PC
- OS: Debian 11
- IPv6アドレスについてはIPv6PrivacyExtensionsを有効にしていて24時間毎にアドレスが切り替わる設定
- oracle cloud
- tracerouteは15ホップくらい
- webarena indigo
- ipv4/ipv6のデュアルスタック
- ipv4/ipv6のファイヤーウォールはnftablesで個別に許可
- tracerouteは11ホップくらい
pingについては各ホストにpingコマンドを実行するだけ
rsyncについては
dd if=/dev/urandom of=rand.dat bs=1MB count=10
で作ったファイルをrsyncで落とすだけ
計測で得られたデータ
※注意
自宅もサーバーも回線も他の用途で使っているため負荷が高い場合もあります
測定元PCは1台なので、こちらがパケットロスの原因がこちらにある可能性もあります
そのためこの結果だけでNURO光の回線品質を論ずることはできません
あと計測も簡易的なものなので、誤差が多分に含まれています
あくまで参考程度にお願いします
以下posit.cloudでグラフを描きます
パケットロスについて
library(dplyr)
ping <- read.csv(header = T, "ping.csv")
通信先ホスト
なぜかパケットロスはIPv6が殆どでした
group_by_host = ping |>
group_by(host) |>
summarise(loss_avg = mean(loss))
barplot(
group_by_host$loss_avg,
names.arg = group_by_host$host,
xlab = "host",
ylab = "loss_avg",
ylim = c(0,2),
)
> group_by_host
# A tibble: 4 × 2
host loss_avg
<chr> <dbl>
1 ORACLE1_IPV4 0.0219
2 ORACLE2_IPV4 0.0439
3 WEBARENA_IPV4 0.410
4 WEBARENA_IPV6 1.90
時間帯
深夜23時と朝8時がパケットロスが高い傾向がありますが、バッチ処理とよくネット使うのがその時間なのでそのせいかも
ping$hour <-
format.POSIXct(as.POSIXct(ping$time, origin = "1970-01-01"), "%H")
result <- group_by(ping, hour) |>
summarise(loss_avg = mean(loss))
barplot(
result$loss_avg,
names.arg = result$hour,
xlab = "hour",
ylab = "loss_avg"
)
日付
日付ごとのパケットロス推移
全体で見るとあまり変わってないように思えます
ping$day <-
as.integer((ping$time - 1664565638) / 60 / 60 / 24) # 計測開始日を0として経過日数
result <-
group_by(ping, day) |>
summarise(loss_avg = mean(loss))
plot(result$day, result$loss_avg)
linear_model <- lm(result$loss_avg ~ result$day)
abline(linear_model)
summary(linear_model)
> summary(linear_model)
Call:
lm(formula = result$loss_avg ~ result$day)
Residuals:
Min 1Q Median 3Q Max
-0.60857 -0.27672 0.01213 0.15285 0.77498
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.6143019 0.0885485 6.937 4.78e-09 ***
result$day -0.0007167 0.0027266 -0.263 0.794
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3387 on 55 degrees of freedom
Multiple R-squared: 0.001255, Adjusted R-squared: -0.0169
F-statistic: 0.06909 on 1 and 55 DF, p-value: 0.7936
WEBARENA_IPV6に限定すると減少傾向に見えるような気もしますが
あんま有意じゃなさそう
ping$day <-
as.integer((ping$time - 1664565638) / 60 / 60 / 24) # 計測開始日を0として経過日数
result <- filter(ping, host == "WEBARENA_IPV6") |>
group_by(day) |>
summarise(loss_avg = mean(loss))
plot(result$day, result$loss_avg)
linear_model <- lm(result$loss_avg ~ result$day)
abline(linear_model)
summary(linear_model)
> summary(linear_model)
Call:
lm(formula = result$loss_avg ~ result$day)
Residuals:
Min 1Q Median 3Q Max
-2.3049 -0.8729 -0.1934 0.9151 2.2740
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.466600 0.314918 7.833 1.64e-10 ***
result$day -0.020217 0.009697 -2.085 0.0417 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.204 on 55 degrees of freedom
Multiple R-squared: 0.07324, Adjusted R-squared: 0.05639
F-statistic: 4.347 on 1 and 55 DF, p-value: 0.04174
WEBARENA_IPV4に限定すると増加傾向のように見えます
これも有意じゃなさそうすね
ping$day <-
as.integer((ping$time - 1664565638) / 60 / 60 / 24) # 計測開始日を0として経過日数
result <- filter(ping, host == "WEBARENA_IPV4") |>
group_by(day) |>
summarise(loss_avg = mean(loss))
plot(result$day, result$loss_avg)
linear_model <- lm(result$loss_avg ~ result$day)
abline(linear_model)
summary(linear_model)
> summary(linear_model)
Call:
lm(formula = result$loss_avg ~ result$day)
Residuals:
Min 1Q Median 3Q Max
-0.89003 -0.30410 -0.08274 0.08652 1.42413
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.086525 0.124223 -0.697 0.489
result$day 0.017755 0.003825 4.642 2.18e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4751 on 55 degrees of freedom
Multiple R-squared: 0.2815, Adjusted R-squared: 0.2684
F-statistic: 21.55 on 1 and 55 DF, p-value: 2.185e-05
正規性を仮定したときの
10月と11月の平均の両側検定(Welch)
ping$month <- as.integer(format.POSIXct(as.POSIXct(ping$time, origin = "1970-01-01"), "%m"))
ping_Sep <- filter(ping, month == 10)
ping_Nov <- filter(ping, month == 11)
t.test(ping_Sep$loss, ping_Nov$loss, alternative = "two.sided")
> t.test(ping_Sep$loss, ping_Nov$loss, alternative = "two.sided")
Welch Two Sample t-test
data: ping_Sep$loss and ping_Nov$loss
t = -0.83635, df = 5255.9, p-value = 0.403
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.22592975 0.09080452
sample estimates:
mean of x mean of y
0.5634278 0.6309904
RTT
RTTとパケットロスについては関連なさそうでした
あんまり変化もなかったです
rtt <- function(x, y) {
r <- round(filter(ping, host == x)$rtt, digits = 1)
hist(r, breaks = 15, xlab = x)
}
rtt("WEBARENA_IPV6")
rtt("WEBARENA_IPV4")
rtt("ORACLE1_IPV4")
rtt("ORACLE2_IPV4")
ダウンロード速度について
library(dplyr)
rsync <- read.csv(header = TRUE, "rsync.csv")
時間帯でも殆ど変化なかった
hist(rsync$bytes.sec)
summary(rsync$bytes.sec)
rsync$hour <- format.POSIXct(as.POSIXct(rsync$time, origin = "1970-01-01"), "%H")
rsync_group_by_hour <- group_by(rsync,hour) |>
summarise(speed_avg = mean(bytes.sec))
barplot(rsync_group_by_hour$speed_avg,names.arg = rsync_group_by_hour$hour)
lossと相関もしなさそう
rsync$yyyymmddhh <- format.POSIXct(as.POSIXct(rsync$time, origin = "1970-01-01"), "%Y%m%d%H")
ping$yyyymmddhh <- format.POSIXct(as.POSIXct(ping$time, origin = "1970-01-01"), "%Y%m%d%H")
ping_group_by_hour <- group_by(ping, yyyymmddhh) |>
summarise(loss_avg = mean(loss))
loss_vs_speed <- inner_join(ping_group_by_hour, rsync, by = "yyyymmddhh")
plot(loss_vs_speed$loss_avg, loss_vs_speed$bytes.sec)
cor(loss_vs_speed$loss_avg,loss_vs_speed$bytes.sec, method = "pearson")
> cor(loss_vs_speed$loss_avg,loss_vs_speed$bytes.sec, method = "pearson")
[1] -0.02021064
Discussion