若手部員 宇田くん |
お客様のネットワークで,たまにLANが遅くなると言われて調査に出向いたんだけれど,原因がよくわからないんだ。1台のパソコンのサブネット・マスクを正しく設定し直したら,問題は解決したんだけど・・・。 | ||
若手部員 貴子さん |
サーバーやLAN自体には問題はなかったんでしょう。サブネット・マスクの設定ミスでLANが遅くなったりするのかしら。前回もサブネット・マスクの設定ミスを試してみたけれど,もう一度試してみましょうよ。 |
宇田:うーん。
貴子:どうしたの。
宇田:お客様のLANがときどき遅くなるということで,調査したんだけれど,原因がさっぱりわからないんだ。
貴子:通信量がLANの許容量を超えて応答が悪くなっただけじゃないの?
宇田:そうじゃないんだ。設計上は十分対応できる範囲なんだ。サーバー・マシンなどの性能も十分だったし・・・。
貴子:それじゃあ,まだ対策もできていないの?
宇田:実は,サブネット・マスク*の設定を間違えていたパソコンが1台あって,それとほかのパソコンの間で大きなファイルをやりとりしたら,LANが遅くなっていたんだ。それで,パソコンのサブネット・マスクを正しく設定し直したら,問題は発生しなくなったんだよ。だから,対策はできたんだけれど,原因がわからないんだよ。これじゃあ,報告書が書けないよ。
貴子:サブネット・マスクの設定を間違っていたパソコンは,ほかと通信できていたの。
宇田:どこまで通信できていたかは突き止めていないけれど,「ほとんどは通信できていて支障はなかった」といっていたよ。でも,言われてみれば,変な話だな。
貴子:じゃあ,その設定を再現して実験してみましょうよ。
前回のこの連載コラムで,サブネット・マスクの設定が間違っていても,通信できる場合があることを確認した。今回は,その続きである。
■通信できないはずが・・・
貴子:設定は控えてある?宇田:設定ミスしたパソコン(PC1)のIPアドレスは192.168.0.1,サブネット・マスクは255.255.255.0,デフォルト・ゲートウエイ*のアドレスは192.168.0.254だったよ(図1)。このパソコンは,主にPC2と大きなファイルをやりとりしていて,そのときにLANが遅くなっていたみたいなんだ。PC2のIPアドレスは192.168.1.2,サブネット・マスクは255.255.0.0,デフォルト・ゲートウエイのアドレスは192.168.0.254だよ。
貴子:じゃあ,パソコン2台をリピータ・ハブにつないで試してみましょう。
宇田:でも,それって前回のテストで調べたのと同じだよ。PC1からPC2あてにping*コマンドを実行すると,PC1はPC2が自分と同じネットワークにいないと判断してエラーになるはずだよ。
貴子:そうね。前回もやったけれど,PC1の内部処理を考えると,相手のIPアドレス(192.168.1.2)と自分に設定されているサブネット・マスクから,相手のネットワーク・アドレスは192.168.1.0だと算出するわ*。一方,自分のネットワーク・アドレスは192.168.0.0だから,PC2は同じLANにいないと判断するわけね。
宇田:ほら,pingコマンドの結果も,「Distination host unreachable.」とエラーが出ているよ(図2(1))。
貴子:でも,お客さんのLAN環境では,つながったんでしょう。
宇田:そうなんだよ。あちらでpingコマンドを試したときは,きちんとつながったよ。
貴子:私たちで作った実験環境は,お客さんのLAN環境と違うのかしら?
宇田:うーむ。
■ルーターの有無で挙動が変わる?
読者のみなさんは,宇田くんが出向いたお客さんのLAN環境と,実験環境の違いに気づいただろうか。それはデフォルト・ゲートウエイの有無である。実験環境のようにデフォルト・ゲートウエイがない環境で,PC1からPC2へpingコマンドを実行するとエラーになる。
では,デフォルト・ゲートウエイがあると,どうなるのだろうか。話を先に進めよう。
貴子:少し冷静になって考えてみたんだけれど,デフォルト・ゲートウエイは関係しないかしら。実験環境ではデフォルト・ゲートウエイを無視していたでしょう。
宇田:デフォルト・ゲートウエイって,LANとインターネットやLAN同士の境界に置くルーターのことだろう。PC1とPC2は,同じLANでつながっているから関係なさそうだけどな。
貴子:でも,パソコンは自分がつながっているLANにいない相手へパケットを届けるときには,デフォルト・ゲートウエイに転送を任せるのよ。だから,実験環境にデフォルト・ゲートウエイを加えると,PC1はPC2へpingパケットを送ろうとしてデフォルト・ゲートウエイにパケットの転送を任せるんじゃないかしら。
宇田:お! それは名推理かもしれないぞ。ルーターもつないでテストしてみよう。
■ルーターがパケットを転送
貴子:ルーターをつないだわ。さっそく,pingコマンドを試すわよ。「ping 192.168.1.2」と。宇田:どう?
貴子:応答が返ってきたわ。通信できているみたいよ(図2(2))。
宇田:逆に,こちらからpingを打ってみよう。「ping 192.168.0.1」と。
貴子:うまくいった?
宇田:うん。通信できているよ。
貴子:ところで,今のやりとりをキャプチャ*しておいてくれた?
宇田:もちろん。こっちで見てみよう。まずPC1からPC2にあててpingコマンドを実行したのが,これだよ(図3)。
貴子:最初はデフォルト・ゲートウエイにpingパケットを送っているわね。私の推測通りだわ。あて先MACアドレス*(キャプチャ画面では「送信先ステーションアドレス」)が,デフォルト・ゲートウエイになっているルーターのものだから,キャプチャ結果を見れば確認できるでしょう(図3(1))。
宇田:要するに,PC1はpingパケットをPC2へ送ろうとしたとき,PC2が同じネットワークにいないと判断して,ルーターに転送を任せているんだよね。
貴子:これを受信したルーターは,どうしたのかしら?
宇田:2番目のパケットを見てみるとわかるよ(図3(2))。ルーターがPC2へ転送しているよ。
貴子:ルーターは,あて先のPC2がPC1と同じLANにいると判断して,外部に転送しないで,内部に折り返したのね。ルーターに設定したサブネット・マスクは255.255.0.0で,IPアドレスは192.168.0.254だったから,ルーターとPC2のネットワーク・アドレスは,どちらも192.168.0.0と算出されるからよ。
宇田:ルーターはLANをまたがる通信を中継するものだと思っていたけれど,LAN内部の通信を中継することもあるんだ。
貴子:そうみたいね。
宇田:これでPC2にpingパケットが届いたわけだ。応答パケットの方はどうなっているかな。
貴子:あら,PC2はPC1に応答パケットを直接返信しているわ(図3(3))。
宇田:本当だ。PC2は,自分のネットワーク・アドレスは192.168.0.0だとあらかじめ計算していて,返信先のPC1のネットワーク・アドレスは192.168. 0.1と255.255.0.0(自分のサブネット・マスク)から192.168.0.0だとわかる。だから,PC1は同じLANにいると判断して,応答パケットをルーター経由ではなく,直接返信したんだ。
貴子:PC1からPC2に送信するときだけ,デフォルト・ゲートウエイを経由するのね。
宇田:つまり,PC1からPC2にパケットを送ると,2個のパケットがLANを流れるんだ。大容量のデータを送れば,LANがパンクしやすくなるね。
■通常の2倍のトラフィックが集中
話を整理しよう。今回のケースでは,PC1からPC2へのパケットをデフォルト・ゲートウエイ(ルーター)が中継したことで,本来なら通信できないはずのPC1とPC2の通信が可能になってしまった。また,PC1からPC2へのパケットは,PC1→デフォルト・ゲートウエイ,デフォルト・ゲートウエイ→PC2とLAN上を2回流れる。この2台のパソコン間で大容量のファイルをやりとりすれば,本来流れる2倍のトラフィックが発生する。このため,LANが飽和して*,ほかの端末同士の通信が極端に遅くなったと考えられる。また,ルーターが転送処理に追われて,ほかのパソコンからのインターネット・アクセスが滞ったりもしたと考えられる(図4)。
宇田:だから,LANが極端に遅くなったりしたんだね。でも,設定ミスしたパソコンが大きなデータをやりとりしていなかったら,ほかから苦情が出ることもなくて,気づかなかったかもしれないね。
貴子:そうね。直接的な原因は単純だけれど,奥が深かったわね。じゃあ,頑張って報告書を書いてね。
宇田:あ,そうだった!
■寄稿者:ネットワークエンジニア集団 みずおか組●水岡 祥二 NPOアイタック代表理事●出口 雄一 株式会社タケキ IT教育事業部 ●久保 幸夫 情報・通信エンジニア |