読者です 読者をやめる 読者になる 読者になる

ICTの右耳・ブログ ~ジャンクねた~

仕事や趣味でICTに関わった事柄を、ボソボソと・・・

ネットワークの速度計測

Pingコマンドを使った、経路(閉域型VPN、Internet-VPN)別・拠点別の簡易レスポンス計測ツールを作成した。(といっても、単純なBatchファイルだが・・)
Expingが送信バッファサイズを4,096byteまでしか指定出来ないので、仕方なく。。

--------------------
:start rem 開始
echo 開始日時、 %date%,%time% > temporary.log
echo 【閉域型VPN】、 >> temporary.log

:Entry-VPN1 rem 閉域型VPN・主要拠点
ping "本社・閉域網WAN側グローバルIPアドレス" -l 20712 >> temporary.log
ping "支社・閉域網WAN側(G)IPアドレス" -l 20712 >> temporary.log
ping "研究所・閉域網WAN側(G)IPアドレス"-l 20712 >> temporary.log
ping "PrivateクラウドDC・閉域網WAN側(G)IPアドレス" -l 20712 >> temporary.log

:Entry-VPN2 rem 閉域型VPN・工場
ping "A工場・閉域網WAN側(G)IPアドレス" -l 20712 >> temporary.log
ping "B工場・閉域網WAN側(G)IPアドレス" -l 20712 >> temporary.log
(省略)
:Entry-VPN3 rem 閉域型VPN・営業所
ping "A営業所・閉域網WAN側(G)IPアドレス" -l 20712 >> temporary.log
ping "B営業所・閉域網WAN側(G)IPアドレス" -l 20712 >> temporary.log
ping "C営業所・閉域網WAN側(G)IPアドレス" -l 20712 >> temporary.log
(省略)
echo 【Internet-VPN】 >> temporary.log

:Internet-VPN1 rem Internet-VPN・主要拠点
ping "本社・アクセス回線WAN側(G)IPアドレス" -l 1426 >> temporary.log
ping "支社・アクセス回線WAN側(G)IPアドレス" -l 65500 >> temporary.log
ping "研究所・アクセス回線WAN側(G)IPアドレス" -l 1426 >> temporary.log

:Internet-VPN2 rem Internet-VPN・工場
ping "A工場・アクセス回線WAN側(G)IPアドレス" -l 65500 >> temporary.log
ping "B工場・アクセス回線WAN側(G)IPアドレス" -l 65500 >> temporary.log
(省略)
:Internet-VPN3 rem Internet-VPN・営業所
ping "A営業所・アクセス回線WAN側(G)IPアドレス" -l 65500 >> temporary.log
ping "B営業所・アクセス回線WAN側(G)IPアドレス" -l 65500 >> temporary.log
ping "C営業所・アクセス回線WAN側(G)IPアドレス" -l 65500 >> temporary.log
(省略)
echo 終了日時、 %date%,%time% >> temporary.log
:end rem 終了
find "、" < temporary.log >> response.log
--------------------

【Batchファイルについて】
ping、echo、find の3コマンドのみの使用
メインはpingコマンド
echoコマンド:ログを見やすくする為、コメント/区切り行を挿入
findコマンド:ping出力結果(=>temporary.log)の、必要な行のみの抽出・累積(=>response.log)
※抽出行の対象となる文字列は "、" とした

【通信速度の算出】
通信速度=送信データサイズ×8×2÷1,000,000÷(ping応答時間÷1,000)
 通信速度:単位が Bits per Second なので、データサイズ(Byte)に8を乗じる
 送信データ:Pingはデータを上り下りで送受信した結果の時間を返すので、2倍する
 百万で除す:単位をMbpsにする為
 応答時間÷1,000:単位が Milli-Sec なので、Secにする

送信データサイズについて】
Ethernet(有線LANで最も使用されている規格だが..)に於いては、
1フレーム(データ送受信)の最大値は1,518Byte。(制御部:18Byte、データ部:1,500Byte)
※下記の(3)~(8)は、イーサネットにおけるデータ部を使用
これを超えるサイズのデータを送出する場合は、パケットに分割されて送信される。
パケットは各レイヤ(階層)で制御の為のヘッダー情報が付加される。
つまり、最上位レイヤでは 1,500-(各レイヤでのヘッダーサイズ) が実質のデータ部となる。
※これが MTU(Maximum Transmission Unit)となる。

各レイヤでのヘッダ情報は下記の通り。
(1) 8 Byte:プリアンブル…ディジタル・データ伝送で付加される、データ開始の同期符号
(2) 18 Byet:Ethernet(OSI第2層=データリンク層、ヘッダ&トレーラ)
(3) 20 Byte:IP(Internet Protocol:OSI第3層=ネットワーク層)
(4) 8 Byte:ICMP(OSI第4層=トランスポート層) ※1
-----以下はWANで付加されるヘッダ情報 ※2-----
(5) 16 Byte:L2TP(OSI第2層=データリンク層)
(6) 2 Byte:PPP(Point to Point Protocol:OSI第2層=データリンク層)
(7) 20 Byte:IP(OSI第3層=ネットワーク層)
(8) 8 Byte:UDP(OSI第4層=トランスポート層)

通信速度の算出に於いては、pingで指定した送信バッファサイズ(フレームサイズ)に、以下の通りヘッダーサイズを加算した。
 想定MTU=1,500ー{(3)~(8)の合計}
 パケット分割数=Round-Up{(送出フレームサイズ)÷(想定MTU,0)}
 実質のデータサイズ=送出フレームサイズ+{ヘッダーサイズ(1)~(8)の合計}×パケット分割数

※1) ICMP(Internet Control Message Protocol)
pingTCP/IPプロトコルではなく、ICMPというプロトコルで動作する。
ICMPはIPの上位層(トランスポート層)のプロトコルだが、ネットワーク層プロトコルであるかのような特別の処理がなされる。
TCP/IP通信の場合、ヘッダー情報は40Byteとなる。
 TCP(Transmission Control Protocol:OSI第4層=トランスポート層):20Byte
 IP(Internet Protocol:OSI第3層=ネットワーク層):20Byte

※2) PPPoE(Point to Point Protocol over Ethernet)
Ethernetヘッダーに加えて、PPP(データリンク層)ヘッダー:2Byte、PPPoE(データリンク層)ヘッダー:6Byte が付加されるが、
ヘッダー情報のサイズはL2TPの方が大きく、MTUは最小値の指定が推奨されているのでL2TPのMTU値とした。