TOP(サイトマップ)

TCP/IP入門

(はじめに)
はじめに
Solarisって・・・
SunのセミナーとSDC
Solaris 10概要
資格(SCSA,SCNA)
Solarisフォーラム
管理人に連絡

(Solaris基本)

Solarisのインストール
システムの起動と停止
ファイルシステム
オートマウントとマウント
パッケージとパッチ
ユーザの追加と削除
ファイル権限(セキュリティ)
バックアップとリストア
CDE環境
プロセス管理/監視

(ネットワーク管理)

OSIを理解してみる
TCP/IPの設定
(TCP/IP入門)
DNSの設定
NISの設定
NFSの設定(WebNFS,CacheFS)
(NIS、NIS+、DNS違い)
DHCPの設定
1つのNICで複数IP設定

(IO関連)

インタフェース概要
SAFの管理
プリンタ管理概要
プリンタコマンド
SunSolve Online
SCSI情報(KEY,ASC,ASCQ)

(ソフトウェア関連)

Bash
Apache
Solstice DiskSuite
(SDS OSミラー回復)
Veritas VxVM

(OBPについて)

PROM(OBP)の概要
OBPでのキーボード操作
一般的なOBPコマンド
SolarisでOBPの設定
OBPに関するFAQ


(トラブル時の対応)

基本情報
エラーメッセージ
(主要メッセージ一覧)
性能関連コマンド
トレースコマンド
クラッシュダンプ
SunSolve Online

(その他)

小技集
UNIXコマンド
(manマニュアル)
システムチューニング
ネットワークチューニング
UltraSPARC T1について

(FAQ)

rootのPASSが不明
ハングアップかな?
ハードトラブル
OSが起動しない(b)
swap領域の拡張方法

(リンク)

Sun関連リンク
その他リンク
アバウトなJava入門
Perlメモ(逆引き用)

1.TCP/IP概要

 TCP/IPとは通信するためのプロトコル(決まりごと)です。例えば知り合いに手紙を出す場合、相手の7桁の郵便番号・住所・名前を書きます。これは決まりごと、つまりプロトコルの一種です。モノを相手まで届けるにはそれに従った手順をふまないと届かない。逆に言うと決まりをまもれば相手にちゃんと届くということです。これがプロトコルなのです。
TCP/IPプロトコルは、一般的にLANの世界で使用されます。LANの世界にはいろんなプロトコルが存在し、そのうちの1つがTCP/IPなのです。Solarisに限らずTCP/IPプロトコルは共通なので覚えておいて損はないでしょう。

(1)構成

 LANを構成するにあたって、物理的な線やハードウェアがないと存在しません。基本的にLANには2種類あり、CSMA/CDとTR(トークンリング)があります。
 TRはそれぞれ問い合わせのような処理が発生する。問い合わせが来ない間は何もできない。つまり待っているだけ。CSMA/CDの方は出したい時に垂れ流す。つまり、どの端末にも同じデータが届くのだ。ただし、他の端末も出したいときに勝手にデータを送信するので、ぶつかることがある(コリジョンと言う)。ぶつかるとデータ自体は信号なので壊れてる形になるため、再送という処理が発生する。パソコンの増設ネットワークの増設が簡単なためか、最近ではCSMA/CDが主流だ。


(2)アドレスについて

 はがきを相手に送るときに郵便番号や住所を書くが、TCP/IPの世界でも似たようなものがある。これはほとんど知っていると思うが、IPアドレスというのとMACアドレスというものだ。IPアドレスは4バイト、MACアドレスは6バイトでMACアドレスは世界で1つしかないアドレスを使用している。IPアドレスは1つの物理的につながっているネットワークでは1つしか使えない(電話番号や内線番号と一緒)。IPアドレスについては意味が深いので違う項番で説明する。
 MACアドレスについては、単純にフィルタリングの機能しかない。CSMA/CDは1台がデータ1つを送信すると、同じところにいる端末全てに届く。全端末がそのデータを処理するのは意味のない不可がかかるので、MACアドレスで破棄したり、自分宛のデータか判断するわけである。


(3)ネットワークの考え方

TCP/IPにはネットワーク、サブネットワークなどいろいろなネットワークという考え方がでてくる。例えば5階建てのビルを1つのネットワークだとすると、それぞれの階を1つのサブネットワークという考え方ができる。

さて、何故このようなネットワークやサブネットワークの考え方が出てきたかというと、主に1つは管理のしやすさ。もう1つはデータの混雑を避けるためにある。例えば上の例で言うと、「山田ビルが1つのネットワークでサブネットワークがないとすると、全部で100台のPCしか配置できないが1階に80台導入してしまい、他の階に新人が来てもPCが使えない。などないように1階には20台だけという割り当てができ、その階の責任者が1つの階のみ管理すればよい。また、CSMA/CDの説明で、1つの端末が1つのデータを送信すれば全部に届く。これが50階のビルだとするとまともにデータが届くか・・・という感じ。
 また、他の端末が同時に送信すれば、データが化け、再送しなければならない。届くデータが各階のみで、違う階には流れないのがいいだろうという点。


(4)ネットワークとIPアドレスの考え方

 IPアドレスにはいろいろな決まりがある。4バイトのIPアドレスにはネットワーク部とホスト部という項目に分けられる。ネットワークの種類は3つあり、クラスA,クラスB,クラスCという言葉を使用する。最初の1バイトが0〜126ならばクラスAでネットワーク部の長さが1バイト、クラスBは128〜191で、ネットワーク部の長さが2バイト、クラスCは192〜223まででネットワーク部が3バイトある。

 例えばクラスBを考えるとするとクラスBはネットワーク部は2バイトホスト部が2バイトとなるので、ネットワークは最大65534(FFFF)個作れる。ホスト部も同様なので1つのネットワークに最大65534個のPCなどの端末が追加できる。クラスCだとネットワークは16777215個作れるが、1つのネットワークに端末は255個しかつなげられない。上のビルの例で考えると、ネットワークはそれほどいらないのでクラスAで十分ということになる。ただし、日本全国規模でネットワークを構成(上のビルが何百個もあるネットワーク)の場合、クラスBまたはCなど使用する。
 IPアドレスの考え方は電話番号に類似している。例えば局番の045は横浜を示す。次の1桁はさらに区を示すなど。


(5)IPアドレスとサブネットワーク

 サブネットワークというのはビルの例で紹介した。ここで、もう一度ビルの図で考えていく。
最初山田ビルにIPアドレスを与える「172.17.0.0」。しかし、ネットワークを各階で管理するためサブネットワーク化する。1階には172.17.1.0、2階には172.17.2.0・・・・・5階には172.17.5.0。このとき、サブネットワーク化するのにあたり、サブネットマスクというのを決定する。172はクラスBなので、本来ならば172.17がネットワークを意味し、残り2バイトがホスト部なので各階は65535台設置が可能となる。サブネットというのはネットワーク部を更に細分化するという意味であるので、

 このように考えることができる。この場合サブネットは255個まで作成できる。しかし、ホスト部(白部分)が1バイト分しかなくなるので255台しか設置できないということになる。
 IPプロトコルではサブネットワークも1つのネットワークとなるため、他の階と接続する場合にはルータをはさむ必要がある。最初の山田ビルの構想では1つのネットワーク(サブネットなし)で管理していたため外部と接続したい場合のみルータを設置する必要があるが、サブネットワーク化した場合、最低1つのルータ(5階あるので5ポート必要)が必要となる。
 この場合のメリットとしては、1階内部だけのデータは他の階には届かないのでネットワークの負荷がかからない。管理がしやすい(6階、7階増築してもOK)。サーバを5階に設置して負荷分散などいろいろメリットはある。もちろんビルにこだわる必要はない。

基本的な使い方としては同一市内に10個のビルがあったとして、それぞれのビルに172.XXというネットワークアドレスを分け与え、それぞれのビルで管理しなさいという感じである。階が多ければサブネットワーク化にすれば良いし、10人しかいないのであればサブネットワークにする必要もない。


(6)ルーティングについて

実際にネットワークやサブネットワークにまたがって通信することは多い。その場合そのネットワークはどこにあって、どのようなルートでデータを届けるのかを管理するのがルータ(ゲートウェイ:GWとも言う)。例えばということで、下の図のような構成を考えてみる。



NET AにあるPCがNET Bにある端末へデータを渡したいとき、ルータAを通る。では、NET CのPCがNET AのPCにデータを渡したい場合、ルータBを使い、ルータBはルータAに渡す処理が行われる。つまり、それぞれのルータは自分がどのネットワーク(またはサブネットワーク)にデータを渡せるか管理しているということになる。これをルーティングと言うのです。

 詳しい説明をすると、ルータAはNET AとNET Bを管理している。ルータBはNET BとNET Cを管理している。ルータCはNET DとNET Cを管理している。では、ルータCはNET Aの存在を知っているか?という疑問が出てくると思う。
 実はルータはルータ同士情報の交換を行っている。この情報交換をRIPと言う。具体的に説明すると、ルータAはNET AとNET Bに「自分が管理しているネットはNET AとNET Bだよ」と言う(RIPというデータをNETAとNETB全員に送信)。NETBにいるルータBはルータAからのRIPを受信し「NETAにデータを渡したいときは、ルータAに渡せば良い」と理解する。この時点でNETCからNETAへデータの送受信が可能になる。
で、ルータBはこの時点でNETA、NETB、NETCに関する情報(RIP)を持った。同様にルータBもルータCも”自分が持ってる情報”を送信するので、各ルータはNETA〜Dまでのデータが自動的にできるようになる。このようにルートの情報交換によってデータの送受信ができることをダイナミックルーティングと言う。このダイナミックルーティングの利点は、例えばNET EというネットワークをNET Dのところに追加しても、自動的にデータの送受信ができるようになるので、管理する方はすごく楽ということ。最初の方で説明したがCDMA/CDが主流になった主な原因の1つという噂だ。

 ちなみに、このRIPでネットワークを構成するのに対し、RIPで管理せずにそれぞれのルータでどのネットワークにはどのルータへ送信すれば良いかを設定することができる。この場合1つのネットワークを増設すると、全てのルータに対して設定をし直さないといけない。このような運用をダイナミックルーティングに対しスタティックルーティングという。もちろんダイナミックとスタティック両方併用して運用してもOK。


(7)UDPとTCPの違い

 LANを使った通信で、一般的にデータのやりとりをする方法としてUDPというのとTCPというのがある。UDPとはコネクションレス型で、TCPはコネクション型と呼ばれる。言い換えるならば、UDPは手紙やはがきで、TCPは電話のようなものと考えてもよい。手紙やはがきはポストに出しても、相手まで届いてるかは不明だが、電話の場合は電話をかけて「もしもし」「はいはい」と処理する。電話をかけないと「もしもし」といってもつながらない。
 先ほど説明したRIPについてもUDPを使用しており、telnet、ブラウザ、メールなどはTCPを使用している。
手紙(UDP):
・相手に届いても応答なくてもOK
・相手に届いてない可能性もある
・往復はがきなら相手も応答を返す
電話(TCP):
・最初に電話をかけないといけない
・相手がいないと通話できない
・あいずちを求める


(8)基本的なハードウェア

実際にLANで通信を行う場合、ハードウェアの知識も必要となる。ハードウェアにはケーブル(ターミネータ)・ルータ・ハブ・ブリッジ・NICが必要である。
 ちなみに、LANの通信速度というのは10Mbpsから100Mbps、1Gbpsまで幅広くあるが、今のところ一般的なのは10〜100Mbps。10Mbpsというのは1秒間に10Mビット送ることができるという意味であるが、実際にLANで100%の伝送効率は発揮できない(せいぜい60%)。


まとめると以下の項目があった。
・CSMA/CDとTRの違い
・MACアドレス
・IPアドレスと役割
・ネットワークとサブネットワーク(マスクとクラス)
・ルーティング(RIP)

中でも重要な下3つで、簡単におさらいする。IPアドレスは4バイトで構成され、ネットワーク部とホスト部という項目に分けられる。ネットワークの種類は3つあり、クラスA,クラスB,クラスCという言葉を使用する。最初の1バイトが0〜126ならばクラスAでネットワーク部の長さが1バイト、クラスBは128〜191で、ネットワーク部の長さが2バイト、クラスCは192〜223まででネットワーク部が3バイトある。




2.TCP/IPプロトコル

 では、実際にどのようなやり取りを行っているのか、Solarisならばsnoopコマンドで見れるが、それの意味を理解するにはある程度のプロトコルの知識が必要です。そのプロトコルをここで説明します。1つのデータを送るのに下のような形で送ります。
APレベル
TCPレベル
IPレベル
MACレベル
アプリケーションのデータ
送信側と受信側のPORT番号
送信側と受信側のIPアドレス
送信側と受信側のMACアドレスやタイプ

良く使うと思われるブラウザの画面を例(pearlのWebサーバと山田PCで)にとると、PCのInternetExplorerでpearlのTop画面のデータを受信する場合、MAC層にはpearlとPCのMACアドレスが格納される。IP層にはpearlとPCのIPアドレスが格納される。TCPにはpearlのサーバのPORT番号(80番)が格納され、PC側は適当な番号が格納される。AP層には画面データとなるHTMLのデータが格納される。
 TCP/IPの役割でIP層はあて先などのルーティングなど住所的な役割であると説明したが、TCP部分はデータ制御をする重要な役割をする。AP層のデータ(上の例ではブラウザの画面データ)がきちんと送り届けられているかをちゃんと制御するのがTCPの役割である。

 ちなみにデータのやりとりを行う前にはARPという手順(プロトコル)で相手のIPアドレスに対するMACアドレスを調べる処理を行う。これはMAC層のあて先のMACアドレスをFFFFFFFFFFFFにして、相手が自分のMACアドレスを入れてくる。


TCP/IPプロトコルというのはコネクション型、UDP/IPというのはコネクションレス型という話を前回にした(UDPははがきで、TCPは電話)。

プロトコルの話をするとARPの処理でMACアドレスの解決を行ったあと、コネクションの接続処理(電話を掛けて、通じたら「もしもし」「はいはい」など)はTCPが制御している。基本的にIP層は20バイトからなるIPヘッダと呼ばれるものがある。もちろんIPアドレスはこの中に格納されている。TCP層も20バイトからなるTCPヘッダがあり、カウンタと先ほど説明したPORT番号の他にコネクションの制御するデータも含まれている。TCPのプロトコルを知るには「カウンタ」「制御データ」「PORT番号」の理解が必要となる。制御するデータには主に以下のものがある。

SYN・・・・・・コネクション接続用
ACK・・・・・・応答用
RST・・・・・・強制切断用
FIN・・・・・・正常切断用
PSH・・・・・・データ送信

電話でのダイヤルから「もしもし」「はいはい」までは次のようなパターンとなっている。


このようにSYNとSYN ACKとACKの処理は1つのパターンとして、必ず発生するものである。実はこの中にはデータサイズの設定などのデータも含まれる。SYNを送信するのは必ずクライアントからである。この状態で初めてデータを送ることができる。

 さて、山田PCとpearlサーバとの間でWebブラウザ、telnet、ftp、メールなど一緒に起動させた場合どのコネクションがWeb用なのかtelnet用なのか、ftp用なのかを判断する材料はなんだろうか?TCP/IPはデータを渡す場合PORT番号で識別する。例えばAnswerBook2を使用したい場合、ブラウザのURLにhttp://pearl:8888と指定するが、その8888がサーバのポート番号を意味する。pearlは8888を読み取って、「このデータはAnswerBookというAPに渡せばいいんだな」と理解する。APのAnswerBookはPCに対して画面データを送信する。
 telnetも同様に23番を標準で使う。本当にそうなのか実験してみたい場合、telnetはサーバのPORT番号を指定できる。ここでftpサーバのPORT番号である21番を指定してtelnetを実行してみると・・・・
$ telnet server 21
Trying 172.17.127.110...
Connected to heart.
Escape character is '^]'.
220 heart FTP server (SunOS 5.7) ready.
(ハングアップ)

これは、サーバ側がPORT番号が21番で接続に来たので、ftpと思いftpの処理をしているのが分かる。PC側はtelnetとして動いてるためハングアップになってしまったようだ。
 では、次に1台のPCでtelnetを複数起動させて、それぞれの画面にちゃんと入力した結果が返ってきてるのは何故か?例えばtelnet1とtelnet2を起動し、ログオンした後で、telnet1でコマンドを入力しEnterを押すと、その結果はtelnet1に返ってくる。そう、PC側(Client側)もそれぞれPORT番号を持っている。Client側のPORT番号は一般的には1024以降の番号を空いてる順番に使用する。


サーバはtelnet1のデータの応答を同じPORT番号に返しているため、telnet1の入力に対しての結果はtelnet1の画面に出力されるのである。もちろんサーバが間違ってPORT番号を1025に返すと、telnet1の入力結果がtelnet2の画面に出力される。

次にデータを送る決まりごと(プロトコル)について説明する。コネクション型であるTCP/IPプロトコルは、データがきちんと送られたか確認する。それにはTCPのカウンタという処理が関係してくる。データを送る場合、制御データとしてACKとPSHというのを使用する。例えばAAAという3バイトのデータPCからpearlへ送るとすると・・・・


このようになる。SEQとACKがカウンタになる(送信用と受信用と考えれば良い)。説明するとPCからAAAというデータをpearlに送るときにカウンタが20000となっており、pearlはAAAを受け取ったという証拠のパケットを送る。そのパケットのACKの値が20000+3バイトになっていると、pearlは「3バイト分のデータを受け取った」と認識する。このとき、pearlからのACKが来なかったり、ACKのカウンタが20000の場合だったとき、PC側はpearlはまだ受け取ってないと思い、再度送る。
 最後に終了すとき(切断)するときの処理であるが、正常に切断するときに制御データはFINというのを使用する。強制的なのはRSTを使う。telnetなどでexitコマンドで終了する場合はFINで切れるし、いきなり×ボタンなどで終了させる場合はRSTが飛ぶ。FINの意味はFinal(最後)という意味であるが、送るデータはもうないよという意思でもあるため、両方とも同じ動作が発生する。



このときに、正常にFINで終了処理を行った場合は、あまり問題にはならないが、RSTで終了した場合、たまたま相手に届かなかった場合、そのコネクションは浮いてしまう。このときkeepaliveという仕掛けで、コネクションがないことを検出することができる。keepaliveというのは一応簡単に説明すると、データが発生しない状態が数分続いた場合、ダミーのデータを送信して、それに対して相手がダミーの応答を返すかチェックする。数回程度応答が返ってこない状態になるとコネクションは切断する。

では、TCP/IPのプロトコルの一般的な一連の流れをまとめてみよう。
(0)相手のMACアドレスを求める
(1)コネクションを接続する
(2)データを送受信する
(3)コネクションを切断する


Google
WWW を検索 Solarisでいきましょか?」内を検索






Copyright (C) 2008 Solarisでいきましょか? All rights reserved