TCP/IP とデータ通信

第 1 章 ネットワーク管理の概要

この章では、ネットワーク管理者の役割を紹介します。新しくネットワーク管理者になった方にとっては、必要な作業の概略を理解するためにこの章の内容が役立ちます。またこの章には、本書を読むときに必要になるネットワークの基礎概念も示しています。すでに経験を積んだネットワーク管理者は、この章をとばして次の章に進んでもかまいません。

ネットワーク管理者の責任

一般に、ネットワーク管理者の作業には次の 4 つの分野があります。

各作業分野は、ネットワークのライフサイクルの中の各段階に対応しています。ネットワーク管理者は、これらのすべての段階に責任を持つ場合もあり、また、ネットワークの保守など特定の分野だけを専門的に受け持つ場合もあります。

ネットワークの設計

ネットワーク管理の最初の作業として、まずネットワークの設計という作業がありますが、一般にこれはネットワーク管理の初心者が行う作業ではありません。ネットワークの設計では、組織のニーズを最大限に満たすようなネットワークの種類を選定する必要があります。大規模の組織では、熟練したネットワーク設計者、つまりネットワークのソフトウェアとハードウェアの両方を熟知している経験豊富なネットワーク管理者が、この作業を担当します。

ネットワーク設計に関連する各種の要素については、第 3 章「ネットワークの計画」で説明します。

ネットワークの設定

新しいネットワークの設計が終わったら、次にネットワークの設定と構成という作業を行います。この段階では、ネットワークの物理的な部分を形成するハードウェアをインストールし、ファイルまたはデータベース、ホスト、ルーター、ネットワーク構成サーバーを構成します。

この作業は、ネットワーク管理者の主な責任のうちの 1 つです。組織が非常に大規模ですでに十分なネットワーク構造が整っている場合を除いて、必須な作業の 1 つです。

ネットワークの設定に関連する作業については、第 4 章「ネットワーク上での TCP/IP の構成」で説明しています。

ネットワークの保守

ネットワーク管理作業の第 3 の段階には、管理者の責任のもっとも大きい部分を占める、次のような日常的な作業が含まれます。

既存のネットワーク上に新しいホストを設定する方法については、第 4 章「ネットワーク上での TCP/IP の構成」を参照してください。第 6 章「TCP/IP の障害追跡」には、ネットワーク上の問題を解決するためのヒントが記載されています。ネットワークサービスについての詳細は、『NFS の管理』、『Solaris ネーミングの管理』、『NIS+ への移行』、『メールシステムの管理』を参照してください。セキュリティ関係の作業については、『Solaris のシステム管理 (第 2 巻)』を参照してください。

ネットワークの拡張

ネットワークが安定し問題なく動作する期間が長くなるにつれて、ネットワークの機能とサービスの拡張を望む組織の要求が大きくなってきます。始めのうちは、新しいホストを追加することによってネットワーク人口を増やし、共有ソフトウェアを追加することによってネットワークサービスを拡張することができます。しかし最終的には、単一のネットワークではこれ以上効率的に運営できないような限界点に達することになります。そのようになったとき、ネットワーク管理作業の第 4 の段階である拡張作業にとりかかります。

ネットワークの拡張については、以下のように選択肢がいくつかあります。

第 5 章「ルーターの構成」は、インターネットを設定するための手順を説明しています。パート II には、可搬コンピュータ用のネットワーク接続の設定方法を説明しています。パート III は、UUCP を使って、ユーザーのマシンと他の UUCP システムとの間で情報を交換する方法について説明しています。

TCP/IP とは何か

ネットワーク通信プロトコルは、ネットワークの中でソフトウェアとハードウェアがどのように対話するかを規定した正規の規則です。ネットワークが正しく機能するためには、情報が目的の宛先に明瞭な形式で伝送される必要があります。ネットワークが機能するためには異なる種類のネットワーク用のソフトウェアとハードウェアが相互に対話できる必要があることから、通信プロトコルという概念が開発されました。

Solaris オペレーティングシステムには、組織でのネットワーク管理に必要なソフトウェアが含まれています。このネットワークソフトウェアは、総称的に TCP/IP (Transmission Control Protocol/Internet Protocol) と呼ばれる通信プロトコル群を実装しています。TCP/IP は、多くの主要な国際標準化機構によって標準として認定されており、世界中で使用されています。TCP/IP は複数の規格を集まりなので、多くの異種コンピュータで実行することができます。またこれを用いることによって、Solaris オペレーティングシステムを実行する異機種のシステムが混在したネットワークを容易に設定することができます。

TCP/IP は、多くの異なる種類のコンピュータ、オペレーティングシステム、ネットワークに対して、サービスを提供します。TCP/IP は、イーサネット、FDDI、トークンリングなどのローカルエリアネットワークや、T1 (デジタル専用線)、X.25、ATM などの広域ネットワークに、適用することができます。

TCP/IP を使用することで、複数のローカルエリアネットワークから成る 1 つのネットワークを構築できます。また、TCP/IP を使用すれば、事実上どのようなポイントツーポイントデジタル回線を用いても、広域ネットワークを構築することができます。

TCP/IP とそのプロトコル群については、第 2 章「TCP/IP プロトコル群」で詳しく説明します。

Solaris ネットワークを形成するハードウェアの種類

ローカルエリアネットワーク (LAN) という用語は、たとえば 1 つのビル内または 2 つの隣接するビル間のように、比較的狭い空間に限定されている単一のコンピュータネットワークを指します。ローカルエリアネットワークには、ハードウェアとソフトウェアの両方の構成要素があります。ハードウェアの観点から見ると、基本的な Solaris LAN は、ローカルエリアのなんらかのネットワークメディアに接続された複数のコンピュータで構成されます。

ローカルエリアネットワークメディア

コンピュータネットワーク用に使用するケーブル配線や電気配線をネットワークメディアと言います。図 1-1 は、イーサネットメディアを介して相互に接続されている 4 つのコンピュータを示しています。Solaris LAN 環境で最もよく使用されているローカルエリアネットワークメディアは、イーサーネットメディアです。Solaris LAN で使用できるその他のローカルエリアネットワークメディアには、FDDI とトークンリングがあります。

図 1-1 Solaris ローカルエリアネットワーク

Graphic

コンピュータとそのコネクタ

TCP/IP ネットワーク上のコンピュータは、ネットワークメディアに接続するために 2 種類のコネクタを使用します。それは、シリアルポートと、ネットワークインタフェース上のポートです。

シリアルポート

どのコンピュータにも、少なくとも 2 つのシリアルポートがあり、コンピュータにプリンタやモデムを接続するためのコネクタとして使用されます。シリアルポートは CPU ボードに装備されている場合もありますが、新たに購入しなければならない場合もあります。システムにモデムを接続して PPP 接続や UUCP 接続を確立するときは、これらのポートを使用します。PPP と UUCP はネットワークメディアとして電話回線を使用することができるので、事実上の広域ネットワークサービスを提供します。

ネットワークインタフェース

ネットワークへの接続ができるようにするためにコンピュータに内蔵されているハードウェアを、ネットワークインタフェースと言います。多くのコンピュータにはネットワークインタフェースが始めからインストールされていますが、そうでない場合は、別にネットワークインタフェースを購入する必要があります。

LAN メディアの種類別に、それぞれ異なるネットワークインタフェースが定められています。たとえば、イーサネットをネットワークメディアとして使用したいのであれば、ネットワーク内の各ホストにイーサネットインタフェースをインストールしておく必要があります。イーサネットケーブルを接続するために使用するボード上のコネクタを、イーサネットコネクタと言います。たとえば FDDI を使用しようと計画しているのであれば、予定している各ホストに FDDI ネットワークインタフェースが装備されている必要があります (その他のネットワークメディアの場合も同様です)。

本書では、ホストのデフォルトのネットワークインタフェースを一次ネットワークインタフェースと呼びます。


注 -

ネットワークハードウェアのインストールについては、本書では取り扱いません。シリアルポートの構成方法については、 『Solaris のシステム管理 (第 2 巻)』を、ネットワークメディアのインストールの手順については、ネットワークメディアに付属しているマニュアルを参照してください。


ネットワークソフトウェアが情報を転送する仕組

ネットワークソフトウェアの設定は複雑な作業です。そこで、まず設定しようとしているネットワークソフトウェアがどのようにして情報を転送するかを理解しておくことが重要です。

図 1-2 に、ネットワーク通信に関係のある基本的な要素を示します。

図 1-2 ネットワーク上での情報の転送

Graphic

この図では、あるコンピュータがネットワークメディアを介して、同じメディアに接続している別のコンピュータにパケットを送信しています。

情報が転送される仕組 : パケット

ネットワークを介して転送する情報の基本単位をパケットと言います。パケットの構成は通常の手紙によく似ています。

どのパケットにもヘッダーがあり、これは手紙の封筒に当たります。ヘッダーには、受取先と送信元のアドレスに加えて、パケットがプロトコル群の各層を移送されるときにそのパケットをどのように扱うかを指示する情報が含まれています。

パケットのメッセージ部は手紙の本文に相当します。パケットに含めることのできるデータのバイト数には制限があり、これは使用しているネットワークメディアによって異なります。したがって、電子メールメッセージなどのような代表的な通信は、いくつかのパケットフラグメントに分割されることがあります。

情報を送受信する主体 : ホスト

経験を積んだ Solaris ユーザーなら、もちろん「ホスト」という言葉はよくご存じのことでしょう。この言葉は、しばしば「コンピュータ」または「マシン」の同義語として使われます。TCP/IP の視点から見れば、ネットワーク上に存在する実体は、ルーターとホストの 2 つだけです。

ルーターは、ネットワークから別のネットワークへとパケットを転送するマシンです。これを行うには、ルーターは少なくとも 2 つのネットワークインタフェースを持っている必要があります。ネットワークインタフェースが 1 つしかないマシンは、パケットを転送できません。このようなマシンはホストとみなされます。ネットワーク管理者がネットワーク上に設定するマシンのほとんどはホストです。

複数のネットワークインタフェースを持っているけれどもルーターとしては機能しないマシンもあります。このようなマシンをマルチホームホストと呼びます。マルチホームホストは、持っているネットワークインタフェースを用いて複数のネットワークに直接的に接続されます。ただし、1 つのネットワークから別のネットワークへとパケットを転送することはしません。

あるホストが通信を開始したとき、それを送信側ホスト、送信、送信元、などと呼びます。たとえば、あるホストのユーザーが rlogin を入力するか、または他のユーザーに電子メールメッセージを送ると、そのホストは通信を開始します。通信の宛先となるホストを、受信側ホスト、受信側、受信先などと呼びます。たとえば、rlogin への引数として指定されたリモートホストは、そのログイン要求の受信先です。

各ホストは、ネットワーク上の他の対等ホストに自身を識別させるための次の 3 つの特性を備えています。

ホスト名

ホスト名 は、ローカルマシンの名前と所属組織の名前を組み合わせたものです。多くの組織では、ユーザーが各自のマシンのホスト名を選定します。sendmailrlogin などのプログラムは、ネットワーク上のリモートマシンを指定するときにホスト名を使用します。ホスト名については、 『Solaris のシステム管理 (第 1 巻)』でより詳しく説明しています。

マシンのホスト名は、一次ネットワークインタフェースの名前にもなります。この概念は、ネットワークデータベースを設定したりルーターを構成したりするときに重要な意味を持ちます。

ネットワークを設定するときは、そのネットワークに関与するすべてのマシンのホスト名を入手する必要があります。ネットワークデータベースを設定するときに、必要となります。詳細は、第 4 章「ネットワーク上での TCP/IP の構成」を参照してください。

IP アドレス

「IP アドレス」は、TCP/IP ネットワーク上で各マシンが持っている 2 種類のアドレスの 1 つで、そのマシンをネットワーク上の他の対等ホストに識別させるためのものです。このアドレスには、特定のホストがネットワーク上のどこに位置しているかを、対等ホストに知らせる役割もあります。ネットワーク上のマシンに Solaris オペレーティング環境をインストールしたことがある場合は、インストール時に IP アドレスを指定したことを覚えていることでしょう。IP アドレス指定は TCP/IP の重要な要素の 1 つであり、これについては、「IP アドレス指定スキーマの設計」で詳しく説明します。

ハードウェアアドレス

ネットワーク上の各ホストはハードウェアアドレスを持っており、これもホストを他の対等ホストに識別させるために使用されます。ハードウェアアドレスは、製造元でマシンの CPU またはネットワークインタフェースに物理的に割り当ててあります。ハードウェアアドレスはどれも一意なものです。

本書では、ハードウェアアドレスを「イーサネットアドレス」という言葉で表しています。イーサネットは、Solaris オペレーティング環境のネットワーク上で最も一般的に使われているネットワークメディアなので、本書では、Solaris ホストのハードウェアアドレスがイーサネットアドレスであるものと想定して、説明を進めます。FDDI など他のネットワークメディアを使用している場合は、そのメディアに付属しているマニュアルの中の、ハードウェアアドレス指定に関する部分を参照してください。

ローカルエリアネットワークの境界を越える - 広域ネットワーク

ネットワークをある程度の期間運用していくうちに、他の企業、専門研究機関、所属の LAN 上にない他の組織からの情報にアクセスする必要が出てくる場合があります。このような情報にアクセスするには、広域ネットワーク (WAN) を介して通信することが必要になります。WAN は地理的に広い範囲を対象とするもので、デジタル専用線または電話回線、X.25、ISDN サービスなどのネットワークメディアを使用します。

WAN の代表的な例としてインターネットがあります。インターネットは、TCP/IP が開発された最初の目的となっていた各 WAN の後に続いて開発された、世界規模の公共ネットワークです。WAN のその他の例としては企業ネットワークがあります。これは、ある 1 つの企業内の各事業所同士を、1 つの国の全域、や 1 つの大陸の全域にわたるようなネットワークによって結ぶものです。つまり、1 つの組織が独自の WAN を構築することが可能です。

ネットワーク管理者としては、ローカルネットワークのユーザーが WAN にアクセスできるようにする必要があります。TCP/IP と UNIX のコミュニティでは、最もよく使われている公共ネットワークはインターネットです。インターネットに直接接続する方法については、本書では説明しません。これについては、役立つ書籍がコンピュータ関係の書店にたくさんそろっています。

セキュリティ

LAN を WAN に接続することには、セキュリティに関するある程度のリスクが伴います。自分のネットワークを無許可のアクセスから保護したり、データと資源へのアクセスを制御したりすることが必要になります。セキュリティの概要については、『Solaris のシステム管理 (第 2 巻)』に説明されています。詳細な説明は、William R. Cheswick および Steven M. Bellovin 共著の『Firewalls and Internet Security』(Addison Wesly, 1994) に記載されています。

米国の majordomo@greatcircle.com に、subscribe firewalls という文字列を入れたメールを送ることで、セキュリティについての情報を入手することもできます。ダイジェスト版の方をご希望の場合は、テキスト中に firewalls_digest という文字列を入れてください。

TCP セッションにおけるラージウィンドウのサポート

TCP セッションのラージウィンドウは、RFC1323 に記述されたサポートを提供します。このサポートは、一般的な上限値の 65,535 バイトより大きなウィンドウを使用することで、ATM や衛星ネットワークなどの広帯域または遅延ネットワークのパフォーマンスを改善するように設計されています。

サポートするデータ量の増大が顕著なのは、65,535 バイトから約 1 ギガバイトに上限値が拡張された TCP セッションです。

TCP セッションのラージウィンドウでは、多数の TCP 構成パラメータがサポートされます。これらのパラメータにより、システム管理者は拡張された送受信ウィンドウサイズと RFC1323 タイムスタンプオプションを使用できます。その際に、アプリケーションを修正する必要はありません。システム全体か特定のホストやネットワークに対して、パラメータを変更できます。このことが特に有効なのは、使用するバッファーサイズの拡張機能を持たない ftprcp などの標準的なネットワークユーティリティを使用する場合です。

TCP ラージウィンドウのパラメータ

構成パラメータは、TCP デバイスを示す /dev/tcp に関連付けられ、ndd(5) による検査と変更が可能です。通常、これらのパラメータは、システムのブート時に init(1M) が実行するシェルスクリプトの 1 つに設定されます (新規スクリプトの追加方法については、init.d(4) を参照してください)。

使用可能なパラメータとそれぞれの意味は下記のとおりです。

tcp_xmit_hiwat

接続の送信バッファースペースにデフォルト値 (8K) を指定します。

tcp_recv_hiwat

接続の受信バッファースペース (受信データ用に割り当てられたバッファースペースの量。公示されている受信ウィンドウの最大サイズ) にデフォルト値 (8K) を指定します。

tcp_wscale_always

パラメータがゼロ以外であれば、リモートシステムへの接続時にウィンドウスケールオプションが必ず送信されます。パラメータがゼロであれば、64K より大きな受信ウィンドウをユーザーが要求した場合に (限って) 送信されます。デフォルトはゼロです。

このパラメータの値にかかわらず、ウィンドウスケールオプションが必ず接続肯定応答に含まれるのは、接続システムがそのオプションを使用した場合です。

tcp_tstamp_always

パラメータがゼロ以外であれば、リモートシステムへの接続時にタイムスタンプオプションが必ず送信されます。デフォルトはゼロです。

このパラメータの値にかかわらず、タイムスタンプオプションが必ず接続肯定応答 (および以降の全パケット) に含まれるのは、接続システムがそのオプションを使用した場合です。

tcp_tstamp_if_wscale

パラメータがゼロ以外であれば、リモートシステムへの接続時にタイムスタンプオプションが送信されるのは、64K より大きな受信ウィンドウをユーザーが要求した場合 (つまり、ゼロ以外のスケールを指定したウィンドウスケールオプションを使用している場合) です。デフォルトはゼロです。

tcp_max_buf

SO_SNDBUF または SO_RCVBUF オプション付きでユーザーが指定できるバッファーサイズの最大値を指定します。この値より大きなバッファーの使用を試みると、EINVAL を返して失敗します。デフォルトは 256K です。アプリケーションに必要な最大バッファーサイズよりもずっと大きな値をパラメータに指定するのはお勧めできません。障害や悪影響の原因となっているアプリケーションが、カーネルメモリを不当に大きく消費しかねないからです。

tcp_host_param

このパラメータは、IP アドレス、ネットワーク、サブネットワーク、および指定されたホストとの接続に使用される特定の TCP パラメータのデフォルト値をテーブルにしたものです。テーブルを表示するには、以下のように ndd コマンドを使用します。

example# ndd /dev/tcp tcp_host_param
Hash HSP     Address         Subnet Mask     Send       Receive    TStamp
027 fc31eea4 129.154.000.000 255.255.255.000 0000008192 0000008192      0
131 fc308244 129.154.152.000 000.000.000.000 0000032000 0000032000      0
133 fc30bd64 129.154.152.006 000.000.000.000 0000128000 0000128000      1

テーブルの各要素は、ホスト、ネットワーク (サブネットマスクのオプション付き)、サブネットのどれかに加えて、デフォルトの送信バッファースペースと受信バッファースペース、タイムスタンプを使用するかどうかを示すフラグを表示します。

テーブル内で指定されているデフォルト値は、アクティブな接続とパッシブな接続 (connect()listen()) の両方に使用できます。ホストアドレス全体、サブネット、ネットワークの順で、検出された最適な一致が使用されます。サブネットの認識が有効に動作するためには、サブネットのネットワークにサブネットマスクを指定するエントリがなければなりません。

上のテーブルの例が示す内容は、以下のとおりです。

テーブルの要素を追加または削除するには、以下のように ndd を使用します。


ndd -set /dev/tcp tcp_host_param '<command>'
<command> には次のいずれかを指定します。


 
<ipaddr>	[ mask <ipmask>] [ sendspace <integer> ]
				[ recvspace <integer> ] [ timestamp { 0 | 1 } ]

または


<ipaddr> delete

たとえば、上のテーブルを作成するには、次のように指定します。

example# ndd -set /dev/tcp tcp_host_param '129.154.0.0
mask 255.255.255.0 sendspace 8192 recvspace 8192'
            
 
example# ndd -set /dev/tcp tcp_host_param
'129.154.152.0 sendspace 32000 recvspace 32000'
           
 
example# ndd -set /dev/tcp tcp_host_param
'129.154.152.6 sendspace 128000 recvspace 128000 timestamp 1' 

削除するには、次のように指定します。


 
example# ndd -set /dev/tcp tcp_host_param '129.154.152.6 delete'
	 
example# ndd -set /dev/tcp tcp_host_param '129.154.152.0 delete'
 
example# ndd -set /dev/tcp tcp_host_param '129.154.0.0  delete'
 

ネットワークとサブネットを指定するには、ホストビットをゼロにしておきます。エントリ追加用の構文は、既存エントリの修正にも使用できます。

tcp_host_param テーブルからの送受信スペースの値が使用されるのは、それらの値がユーザーが設定した (または、tcp_xmit_hiwattcp_recv_hiwat から取得した) 値よりも大きい場合に限られます。したがって、スループット向上のためにユーザーが大きな値を指定することが可能で、それらの値が誤って縮小されることはありません。

tcp_host_param テーブルのタイムスタンプ値が 1 の場合、接続を開始したときに選択したホストにタイムスタンプオプションが送信されます。ただし、値が 0 の場合でも、tcp_tstamp_alwaystcp_tstamp_if_wscale オプションの設定により、タイムスタンプオプションが送信されることがあります。

TCP 選択式応答のサポート

TCP 選択式応答 (TCP SACK) は、RFC 2018 に記述されているサポートを提供し、特に衛星リンクや大陸間リンク上で TCP ラージウィンドウ (RFC 1323) を使用するアプリケーションにおいて、混雑や複数パケットの脱落に関連した問題を解決します。

構成パラメータは、TCP デバイス /dev/tcp に関連付けられており、ndd(1M) を使用してその検査や変更を行うことができます。通常、このパラメータは、システムの起動時に init(1M) によって実行されるシェルスクリプトのいずれかで設定されます (新しいスクリプトの追加方法については、init.d(4) を参照してください)。

使用可能なパラメータとその意味を以下に示します。

tcp_sack_permitted

SACK を許可するかどうかを示します。デフォルトは 1 です。使用可能なオプションを以下に示します。

0

TCP は SACK 情報の受信や送信を行いません。

1

TCP は SACK_PERMITTED オプションによる接続は開始しません。受信した要求に SACK_PERMITTED が含まれている場合は、TCP は SACK_PERMITTED オプションを使用して応答します。

2

TCP は SACK_PERMITTED オプションを使用して接続の開始と許可を行います。

詳細は、tcp(7P) のマニュアルページを参照してください。