Kodama's home / tips.

ネットワ−クの状態(パケット エラー, コリジョン)

Download: net-error-view.sh

どの程度のエラーまで許容できるか

ル−タ, ブリッジや SW-HUB を越えないネットワ−クの範囲では, パケットの エラ−率 1/10000 程度, 衝突率 5% 未満を目標にしよう. エラ−率からは 機材やケ−ブルの健康度, 衝突率からは LAN の混雑度がわかる.

これらは, 直接には netstat -ic または cat /proc/net/dev で調べる. ただし /proc 以下の内容は kernel の版によって異なることがある.

$ netstat -ic
Kernel Interface table
Iface   MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flags
lo     3584   0  20178      0      0      0  20178      0      0      0 BLRU
$ cat /proc/net/dev 
Inter-|   Receive                  |  Transmit
 face |packets errs drop fifo frame|packets errs drop fifo colls carrier
    lo:  20178    0    0    0    0    20178    0    0    0     0    0

スクリプトによる監視の例

上の説明の パケット数, エラ−数, 衝突数などは, ネットワーク インターフェース が有効になってからの総数が出ている. 現状を知るには, 時差をおいてとった 2つの差分を見る必要がある. net-error-view.sh スクリプトはこの発想で書いてみたスクリプトで, 一定時間毎に error数, 流通パケット数, エラ−率 を表示する.

同じようにして, 衝突率を監視するスクリプトも書ける. 但し, 自分から パケットを吐き出さないと colls は出ない. ネットワ−クの混雑度を測るつもりで, 適量のパケットを吐き出すと良い.

使う前に NIC(Network Interface Card) を promiscuous モ−ドにしておく必要がある. promiscuous モ−ドに関しては NET-3-HOWTO とかを読むと良い. 噂では, promiscuous モ−ドを設定できない NIC があるらしいけど, 一体どの NIC なんでしょうか?

どこかの機材が壊れてる! ...の例.

% net-error-view.sh
....略
  時刻            ネットワ−クエラ−率
17:34:33 127 / 22 = 577.27%
17:34:40 753 / 39 = 1930.76%
17:34:46 373 / 49 = 761.22%
17:34:53 134 / 34 = 394.11%
17:34:59 147 / 25 = 588.00%
17:35:05 353 / 33 = 1069.69%
17:35:11 189 / 47 = 402.12%
17:35:17 187 / 43 = 434.88%
17:35:23 174 / 38 = 457.89%
17:35:29 253 / 17 = 1488.23%
17:35:35 404 / 16 = 2525.00%
....続く

健全なネットワ−クの例.

15:03:21 0 / 13208 = 0.00%
15:13:21 0 / 9873 = 0.00%
15:23:22 0 / 18691 = 0.00%
15:33:22 0 / 27258 = 0.00%
15:43:22 0 / 22590 = 0.00%
15:53:22 0 / 18359 = 0.00%
16:03:22 0 / 7408 = 0.00%
16:13:23 0 / 5222 = 0.00%

ネットワ−クに負荷をかける

試験のために ネットワ−クに強制的に負荷をかけたいとか, NIC から パケットを吐き出させたいことがある. 近くの(しかし自分自身ではない)マシンに ping や ping -f をかけるか つぎのようにして, ftp を繰り返す. え-と, anonymous ftp サ−バの /pub/test_100M として 100M byte のファイルを作っておく. それから, 作業前に, ネットワ−クやサ−バ−の管理者に 了解を取っておかないと叱られるよ.

#!/bin/sh
# K.Kodama  Feb.1999
ftpsever=testserver.my.domain.jp
while true ; do
(time ncftp -ca $ftpserver:/pub/test_100M > /dev/null) 2>&1 | gawk '
/ela/{sub(/^[^ ]* *[^ ]* */,"");sub(/ela.*/,"");sub(/:/," ");sub(/\./," ")
printf "%d%s\n", 100/($1*60+$2+$3*0.01), " [Mbyte/sec]"
}'
done

ncftp の代わりに wget を使う場合の修正.

(time wget -O - -q ftp://$ftpserver/pub/test_100M > /dev/null) 2>&1 | gawk '/real/{gsub(/[ms]/," ");print 100/($2*60+$3)"[Mbyte/sec]"}'

100M のファイルの作成例:

% dd bs=1024 count=102400  if=/dev/urandom of=test_100M
% ls -l test_100M
-rw-r--r--    1 kdm      users    104857600  6月 11日  22:23 test_100M

ネットワ−クのトラフイックの内容を調べる.

tcpdump とか iptraf を使うと良い. tcpdump だと 1パケット毎の概要が分かる. iptraf を使うとプロトコル毎の流量とかの統計がわかる. iptraf は良いですよ.

ところで, 通信経路のメンテナンス時, 等に知った通信の内容を 悪用してはいけないのは当然だけど, 具体的な内容も洩らしちゃ NG だ. これは有線通信関連の法律等で決まってる事だからね. 統計値とかなら OK のはず.


Kodama's home / tips.