アットマーク・アイティ @IT@IT自分戦略研究所@IT情報マネジメント 
 @IT > Master of IP Network > ホストのネットワーク接続は正しく行われているか?
 
連載:ネットワーク・コマンドでトラブル解決(5)

ホストのネット接続は正しく行われているか?
〜netstatによるネットワーク設定の確認〜

加地眞也
2002/1/30

関連するコマンド
netstat


接続の管理とアプリケーション
  〜TCP/UDPとIPの関係

 一般に、IPネットワークにおいては、IPというプロトコルはあくまでホスト間のネットワーク接続(正確には一方向のデータ送信)を実現しているにすぎない。これだけでは、通常のアプリケーションがネットワークを利用できるとはいえない。両ホスト上のアプリケーション同士を結び付ける仕組みが必要になる。これがTCPUDPの役割だ。

 普通「ネットワーク接続」といった場合には、実際にはTCPやUDPレベルにおける「アプリケーション間接続*1」を意味している。単に、どのホストと通信しているかというIPレベルのみならず、アプリケーションが別のどのホストのアプリケーションと接続を維持しているかという、TCP/UDPレベルでの「ステータス」を把握することは、ネットワーク管理上、大変重要な要素となる。

 netstatコマンドでは、これら現在ホストが実行している接続の一覧とともに、それぞれのステータスを確認することができる。

図1 TCP/UDPとアプリケーションの関係

 TCPとUDPの役割について少し整理しておこう。各アプリケーションを区別するために使用されるのが「TCP/UDPポート番号」だ。例えば、クライアントがあるアプリケーションに接続する場合には、何番のポートを使用して相手が待ち受けている(ポートをオープンしている)かを指定して接続することになる。つまり、少なくとも一方が事前にそのポート番号で待ち受けている必要がある。通常、これが「サーバ」アプリケーションとなる。この待ち受け状態を「LISTEN」と呼ぶ。LISTENしているアプリケーションがネットワーク通信を管理するOSに対して「このポート番号へのパケット・データは、私に渡してほしい」と依頼し、起動している状態だ*2

 一方、接続する側、つまり「クライアント」も自身に何らかのポート番号を割り振ってネットワーク接続することになる。でなければ、逆にサーバ・プログラムからクライアント・プログラムへアプリケーションを指定してのパケット返信ができないからだ。この関連付けも、やはりOSのネットワーク機能が管理する。

 これが、TCPとUDPにおける「仮想チャネル」の基本的な考え方だ。こうした機能により、アプリケーションはポート番号を指定するだけで、特定のアプリケーションとシームレスに通信が可能になる。

 さらにTCPでは、

  • コネクション指向
  • バイト・ストリーム指向
  • 全二重通信

をサポートしている。

 接続の両端において、コネクションの「開始」と「切断」を行って接続を維持しており、複数のパケットの送受信はそのコネクション内で自由に行える。アプリケーションから巨大なデータ送受信を指示されても、自動的に分割/送信して受信後に組み立てられるので、アプリケーションは実際のパケット構造を気にしなくてもいい。「全二重通信」とは、常に双方向のパケットの送受信が可能ということだ。つまりTCPでは、IP接続を2つ利用してこうした双方向チャネルを実現するのである。

 また、パケット・ロス時における再送機能や軋轢(あつれき)制御機能によって、IPだけでは得られない送受信データの信頼性も確保している。こうした特徴から、HTTPやSMTPなど、クライアント/サーバ・モデルと呼ばれる比較的高度なネットワーク通信のほとんどは、TCPで実装されることが多い。

 一方、UDPは、単にIPにポート番号の概念を加えただけのプロトコルだ。アプリケーションとの関連付けのみが行われると思っていい。

 UDPは、アプリケーションがUDPパケットに含まれるデータを意識しなくてはならない「パケット指向」型のサービスである。大きなデータの場合は、意識して複数パケットに分割して送信を行う必要がある。IPが提供する以上の信頼性も保証されない。アプリケーションから見ると扱いも面倒だが、パフォーマンスには優れているので、単にデータを送り付ければいいような単純な通信には向いている。現在では、DNS/SNMP/DHCP/FTPのデータコネクションなどで使用されることが多い。

 また、TCPは必然的にユニキャスト(ピア・ツー・ピアの一対一通信)が前提になるが、UDPではブロードキャスト/マルチキャストなどの一対多の送信用として使用されることも多い。

*1こうしたTCP/UDPの機能から、主にTCP/UDPレベルの接続を「ソケット」と呼ぶことがある。電源のソケットのように、差し込むだけでデータを対象アプリケーションへと簡単に送受信できるというイメージから付けられている

*2実際には、あるポート番号あてのパケットをほかのアプリケーションが取得することもできる。使用しているインターフェイスやOSにもよるが、これを「プロミスキャス・モード」と呼ぶ。パケット取得ソフト(例:「Sniffer」)などは、このモードでインターフェイスを操作してパケットの「横取り」が行える。これは、OSなどが管理する通常のプロトコル・スタック(または提供するAPI)を無視して、アプリケーションが直接イーサネット・フレームなどを操作するモードということになる。なお、「RAW(生)パケット」は、TCP/UDPでもない、通常のプロトコル・スタックとは関係ない任意のパケットという意味だ。パケット取得ソフトは、このRAWパケットとしてパケットを取り出し、独自にTCPやUDPなどの解析を施すため、プロミスキャス・モードで使用されるパケットはRAWパケットと呼ばれる


TCP接続とステータス

 UDPでは、単にポート番号(とIPレベルでのIPアドレス)を指定したパケットを相手に送り届けるだけで、片方向の1パケットの送信のみで通信が完結する。ここには、接続の開始や終了という概念はない。つまり、UDPでは単にパケットを送っているか送っていないかというだけで、「ステータス」という概念は存在していない。

 TCPはより複雑で、「ネゴシエーション」と呼ばれる接続開始のための交渉を行い、コネクションを確立して通信が開始される。このネゴシエーションによって、通信バッファやパケットのサイズが決定される。そして実際の通信が行われた後、やはりネゴシエーションによって互いに認識し合ったうえで切断が行われる。つまりTCP通信においては、常にOSによって接続の現在のステータスが把握され、フローが制御されることになる。

図2 TCP接続開始の遷移。青い矢印が1つのTCPパケットを、矢印の上の文字が使用されるTCPフラグである。接続は、双方向同時に行われる

図3 TCP切断の遷移。ここではクライアントからの切断要求を示しているが、実際にはどちらから行われてもかまわない。先に切断する側を「Active Close」、後を「Passive Close」側と呼ぶ

 TCPの接続開始は「3ウェイ・ハンドシェイク」などと呼ばれる。3つのパケットの送信(つまり「握手」)によって接続が確立される特徴を表している。切断においては「2ウェイ」である。切断したい側からFINパケットを送信し、切断を了解した意味のACKパケットを受信すると切断が完了する。

 気を付けてほしいのは、この切断は2回行われる必要があるという点だ。TCPは全二重の通信であり、コネクションはそれぞれ双方向に行われていると認識されるためだ。つまり接続開始時点では、他方から他方への両方向の接続(「クライアント→サーバ」と「サーバ→クライアント」)があると見なされる。しかし切断は個別に行われるため、それぞれの方向ごとに切断が必要となる。

 逆をいえば、片方向が切断されても他方で通信し続けても構わないことを意味する(例えば「クライアント→サーバ」の送信のみなど)。非常に柔軟な要請にも対処可能なプロトコル設計となっている。双方向のコネクションのうち、「クライアント→サーバ」接続(能動的接続)を「Activeコネクション」、「サーバ→クライアント」接続(受動的接続)を「Passiveコネクション」と呼ぶ。

 TCPでは、コネクションはこれらいずれかのステータスに必ず属することになる。単に接続通信中(ESTABLISHED)のみだけでなく、それぞれのコネクションがどのステータスにあるのかも、ネットワーク調査をするうえでの重要な要素となる。

 

関連ネットワーク・コマンド/ツール
  netstat
〜ホストのネットワーク統計や状態を確認する
 


「Master of IP Network総合インデックス」


 本企画では、各種コマンド/ツール紹介やそれらを活用したTipsを順次追加、各種索引を用意して、読者の方々に手軽にご利用いただける、便利なリソース集としてアップデートしていく予定です。ぜひご期待ください。



 




</comment> <tr> <td bgcolor="#EEEEEE"><font size="2"><a href="javascript:KeepIt();"> <img src="/club/keepoint/images/ico_kpt.gif" alt="kee&lt;p&gt;oint保存" border="0" align="absmiddle" width="24" height="18">kee&lt;p&gt;ointで保存</a></font></td> </tr> <comment>
ゲストさん、こんにちは
ログインする | ヘルプ
印刷用プリンタ用表示
URL送信リンクをメール


新SPARC64搭載の富士通サーバをサンはどう見る?

世界は「Convergence=変革と統合」に向かう、ノーテル

7.1チャンネル・オーディオを可能にする新Pentium 4

「すごさを知って」、IBMが早大でメインフレームセミナー

日本の独自技術PHSの未来に賭ける“外資系ファンド”

ドキュメンタム、レガートを統合するEMCの狙いが分かった

SOAをうまく採用するための3つの注意点

ニュース一覧へ →
-PR-
転職プランの立て方、教えます
7/16無料セミナー in丸の内


プロジェクトの度重なる仕様
変更に柔軟に対応する方法


@IT自分戦略研究所へ →

お勧め求人情報 -PR- -PR-
世界に通じるITエンジニアを
目指す第二新卒を期間限定募集

-------------------------
【無料】あなたに合った
最新の仕事情報をメール配信


-PR-
待望の1冊! XMLマスター
プロフェッショナル編


UMLモデリングを
業界第一人者が伝授!


@ITハイブックスへ →

-PR-
.NET 企業内Webアプリ
開発技術書プレゼント


@ITクラブへ →

-PR-
組込みLinuxを
真のリアルタイムOSに


もっと上をめざす
開発者のためのギルド


check!あなたのPC
本当はもっと速い!


ソフトウェア開発者へ贈る
セキュアなコードへの第一歩


顧客に提案ができる自立したエ
ンジニアになるには?


持ち込みPCなどによる脅威と
クライアント・セキュリティ


24時間365日無料サポート
レンタルサーバの有力候補


SPSS Data Mining Day 2004
詳細なイベントレポート公開


手軽に使えるASP型VPN
「GMOどこでもLAN」登場!


オブジェクト指向と業務コン
サルのその先にある技術とは?


組み込み開発の常識を変える
「intent」の衝撃!全容紹介


@IT FYIへ →

 
   
 
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

@IT [FYI] 注目記事
持ち込みPCなどによる脅威とクライアント・セキュリティ
組み込み開発の常識を変える「intent」の衝撃!全容紹介
手軽に使えるASP型VPN「GMOどこでもLAN」登場!

@IT 新着記事
“書類選考NG”にもめげないモチベーションアップ法
Eclipseプラグインを作る(2)
NISサーバとパスワード同期機能(後編)
VBのモジュールはオブジェクト指向に不要?
TravelXMLのWebサービス実証実験デモが成功
Java TIPS
パフォーマンス向上の最短コースを知る
ASP/ASP.NETを支える周辺技術の移行
JSPを理解する最短コースを試そう
仕事への取り組み方は最初の数カ月で決まる!
Windows TIPS
Tripwireでファイルの改ざんを検出せよ
関連チャンネル
運用管理

   

Master of IP Networkフォーラムスポンサー
 
Master of IP Networkフォーラムのトップへ
記事へのご意見、ご感想はIP Network会議室

Copyright(c) 2000-2004 atmarkIT
著作権はアットマーク・アイティまたはその記事の筆者に属します
@ITに掲載されている記事や画像などの無断転載を禁止します
「アットマーク・アイティ」「@IT」「@IT自分戦略研究所」「@ITハイブックス」は、株式会社アットマーク・アイティの登録商標です
弊社へのご連絡は「アットマーク・アイティへのお問い合わせ」をご覧ください