TCP/IPの基礎講座

Transmission Control Protocol/Internet Protocol


本基礎講座の対象

 Webプログラミングをある程度理解し、実践することを目指す人。

 Webプログラミングは、「やさしい」と思う。余り大量のコードを書く必要はないからである。しかし、「むずかしい」一面もある。それは、大量の雑学を必要とするからである。

 ネットワークシステムとは何か、インターネットとは何か、コンピュータ同士はどのように情報のやりとりをするのか、HTMLとは何か、ウェブサーバは何をやっているのか。ウェブサーバの種類や機能、などなどの雑学である。

 それに、実際にサーバを設置して実用レベルにもっていこうとすると、サーバのセキュリティー確保が最大の難物である。

 その他に、いくつかの言語をある程度マスターする必要がある。しかし、いずれかの言語を完璧にマスターするというよりは、何か参考書を見ながら、チョロチョロとプログラムを書く能力が必要とされるように思える。

 対象となる言語は、Java、JavaScript、JScript、VBScript、Perl、Rubyなどなどだろうか。

 Webプログラミングも、まもなく、「.net」の時代が来るのだろう。そうなれば、プログラマのロードはますます減るだろうが、雑学の必要性はかえって増えるだろう。

 本基礎講座も、そのような雑学のひとつである。記述は不正確である。しかし、そんなに正確な知識が必要とされないのも、Webプログラミングの特徴だと考える次第。



目次

1.歴史
2.仕組み
2.1 パケットとプロトコル
2.2 ネットワークサービス
2.3 TCP/IPの仕事
2.4 TCP/IPのネットワーク層
2.5 TCP/IPのプロトコルの種類
2.6 各プロトコルの説明
3. IPアドレス
3.1 アドレスとクラス
3.2 サブネットマスク
3.3 DNS(Domain Name System)はなぜ必要か
4.TCP/IPはどうやって通信するか
4.1 ソケットとは何か
4.2 ポート番号とは何か
4.3 どうやってソケットを作るか
4.4 ソケットAPI
5. まとめ


1.歴史

1960年代、米国国防省がコンピュータを接続するネットワークの研究を開始。目的は、「核戦争」にも耐えうるコマンドと制御機構の確立だった。

コンセプトとしては、「ネットワークの一部が破壊されても、別の経路でデータのやり取りができるネットワーク」。

たとえ、ネットワークの一部のリンクが敵の攻撃で切断されたとしても、「ダイナミック・リルーティング」によって、自動的に代替経路を使って送受信する。

そして、ARPANETが1970年初頭に作られる。その後、このARPANETが急速に拡大するとともに、管理が大変になって、軍事部門MILNETと民生部門の新生ARPANETは分離する。

1980年代初頭、国防長官は、ARPANETに接続するコンピュータは、256台までしか接続できないNCP(Network Control Protocol)ではなく、TCP/IPを使うように通達した。そして、Internetが誕生。

NCPとARPANETの仕組み: それぞれのコンピュータに8ビット長の固有のアドレスを割り当てていた。そのため、256台が上限だった。

TCP/IPが普及した理由は、
○ネットワークモデルに依存しない。すなわち、リング型でもスター型でもOK。
○伝送メディアに依存しない。有線でも無線でも衛星通信でも問題ない。
○ベンダーに依存しない。
○OSやハードウェアに依存しない。
○しかも、所有権がないので、ただで使用できる。


2.仕組み

2.1 パケットとプロトコル
 
 プロトコルとは、ネットワークデバイスやコンピュータ同士の通信方法を規定するもの。いわば0と1からなるデジタル信号暗号の読み方だと思えばよい。TCP/IPは、そのプロトコルを実現するためのソフトウェアである。

 パケットとは、データを小さな塊に分割して転送すること。TCP/IPは、分解されたデータが一つ残らず相手に届き、再び組み立てられるまで責任をもつ。


2.2 ネットワークサービス

 TCP/IPは、以下の3つのネットワークサービスの存在を前提として開発されている。それぞれのサービスは、ネットワーク層の特定のレベル(後述)で行われる。

 コネクションサービス:このサービスは、ネットワーク層の最下層で行われ、コンピュータとネットワークケーブル間のデータの受け渡しを処理する。コネクションサービスは、データが宛先に正しく到着したかどうかについては、一切関知しない。

 トランスポートサービス:このサービスは、ネットワーク層の中位層で行われ、コネクションサービスを補強し、コンピュータ間で信頼性のある通信を実現する。ここでパケットに番号が振られ、宛先に順不同で到着しても、正確に復元できるようにする。その後、コンピュータがエラーチェックを行い、すべてのパケットが問題なく到着したかどうかを確認する。

 アプリケーションサービス:アプリケーションサービスは、一方のコンピュータ上で稼動するアプリケーションが他方のコンピュータ上で稼動するアプリケーションと通信して、ファイルコピーなどの処理を実行できるようにする。ネットワーク層の最上位層で行われる。



2.3 TCP/IPの仕事

電子メールをA君からB君に送る場合、TCP/IPはいくつかの仕事をネットワークサービスに命ずる。

○B君のコンピュータの名前をTCP/IP形式のアドレスに変換する。これはコネクションサービスが行う仕事。
○パケットを作り、A君からB君と差出人と受取人を書き込む。これはトランスポートサービスの仕事。
○ネットワークでパケットを転送する。これはコネクションサービスの仕事。
○パケットに分割されたメールが、B君のところに正確に届いたかどうかを確認する。これは、トランスポートサービスの仕事。
○メールをB君のところまで届ける。これはアプリケーションサービスの仕事。


2.4 TCP/IPのネットワーク層

第1層:物理層:ハードウェアである。ケーブルや衛星、ネットワークカードなどのすべて。深く考える必要はない。

第2層:データリンク層:データをパケットに分割するところ。イーサネットなどは、このレベルで処理される。一旦、データがネットワーク上を流れたら、データリンク層が管理する。イーサネットは、ネットワークカードなどに付されているMACアドレスを使って、1対1通信を行う。

第3層:インターネット層:IPは、この層に対するプロトコルである。ネットワーク層はデータリンク層(第2層)からパケットを受け取り、宛先に転送する。もしも、ネットワークに複数のルートが存在すれば、最適なルートを選択するのもネットワーク層である。

第4層:トランスポート層:データパケットが問題なく到着することに責任を持つ。TCPは、トランスポート層に対応するプロトコルである。パケットにエラーがなく、すべてのパケットが正しい順番で宛先に到着することを監視し保証する。

第5層:アプリケーション層:ユーザとデータとの仲介をする(この層をさらに詳しく3層に分けるのがどうやら本格派なのだが、余り意味があるとも思えない)。


注:MACアドレスとは。
 6バイトの数値であって、最初の3バイトがメーカー名、残りの3バイトが製品番号。全世界で、重ならないように管理されている。アップル・マッキントッシュのことではない。


2.5 TCP/IPのプロトコルの種類

それぞれのネットワーク層に対して、様々な手続きが決まっている。

第1層:物理層:

第2層:データリンク層:PPP

第3層:インターネット層:IP、IPNG、ICMP、ARP、RARP

第4層:トランスポート層:TCP、UDP、

第5層:アプリケーション層:RPC、SMTP、FTP、TFTP、DNS、DHCP、NFS、telnetなど。


2.6 各プロトコルの説明

IP:Internet Protocol
 IPは基本的なネットワーク接続に責任を持つ。ネットワークを利用するとき、データを送ったり受け取ったりする場所が必要だが、それがネットワークアドレスである。IPは、そのアドレスにメッセージを送るときに、アドレスの管理を行う。


TCP:Transmission Control Protocol
 TCPは、インターネット層とアプリケーション層との間に存在し、インターネット上でやり取りするデータの取りこぼしが起きないように、パケットを管理する。エラーチェックとパケットに対する連続番号の割り当てがTCPのもっとも重要な役割である。もしも、とどかないデータがあると、TCPは消失データの再送を要求する。


UDP:User Datagram Protocol
 UDPもデータをインターネット層とアプリケーション層の間で働いているが、TCPと違って、エラーチェックもパケットの番号割り当ても行わない。

ICMP:Internet Control Message Protocol
 ICMPは、ネットワークで発生した問題やネットワークデバイスのエラー情報を知らせるためのプロトコルである。先方のコンピュータが働いているかなどを知ることができる。

ARP:Address Resolution Protocol
 TCP/IPアドレスしか分からないときに、ネットワークインターフェースカードのハードウェアアドレスを割り出す仕事をしている。

RARP:Reverse Address Resolution Protocol
 ハードウェアアドレスしか分からないときに、TCP/IPアドレスを割り出す。

FTP:File Trasfer Protocol
 2台のコンピュータ間でファイルを転送するために使う。

TFTP:Trivial File Transfer Protocol
 FTPの小型バージョン

SMTP:Simple Mail Transfer Protocol
 電子メールを転送するためのプロトコルである。

RIP:Routing Information Protocol
 ルーターなどのステータス情報をやり取り。

DHCP:Dynamic Host Configuration Protocol
数値アドレスをいくつかのコンピュータで共有するための仕組み。

PPP:Point to Point Protocl


3. IPアドレス
 ここまで数値アドレスという表記をしてきた「数値で表現されたアドレス」である。このIPアドレスは、唯一無二のものでなければならないのである。しかし、それでは不足してしまうので、様々な工夫がある。
 今後移行するとされているIPv6と呼ばれる表現方法では、現在のIPアドレスが32ビットで表現されているのに対し、128ビットで表現しており、ほぼ無限のアドレスが表現可能となる。


3.1 アドレスとクラス
 現在のIPアドレスは、32ビットの値で、ネットワーク番号とホスト番号の2つに分けることができる。しかし、それが明示的に分けられている訳ではなくて、クラスというものに分けられている。
 32ビットの値は、8ビット×4に分けられて、それぞれフィールド1.フィールド2.フィールド3.フィールド4と、数字とピリオドの組み合わせで表現される。

クラスA:
 32ビットの値の最初の第一ビットが0である場合には、クラスAのアドレスだと判断されて、その場合には、最初の8ビット分がネットワーク番号、のこり3つの8ビット分がホスト番号(コンピュータ番号)である。
 クラスAは、127サイトしかなくて、それぞれのネットワークには、1700万台のホストを置くことができる。こんなに巨大でどうするのだ、という感じ。

クラスB:
 32ビットの値の最初の2ビットが10であるものをクラスBのアドレスと呼び、この場合には、最初の8ビット×2がネットワーク番号、残りの8ビット×2がホスト番号。 ホストを65000台以上置くことができる。しかし、ネットワークとしては、1万6384サイトしかない。

クラスC:
 32ビットの最初の2ビットが11であるものをクラスCのアドレスと呼び、この場合には、最初の8ビット×3がネットワーク番号、残りの8ビットがホスト番号。
 ホストを255台(実際には254台)しか置くことができない。しかし、ネットワークの数は、209万7152サイトである。


3.2 サブネットマスク
 ネットワークの管理を容易にするために、固定IPアドレスからなるネットワークであっても、いくつかのサブネットに分けて管理することが賢い。そのため、サブネットマスクというものを設定し、そのマスクとアドレスとの論理and演算をして、同じ値になる場合には同じサブネットに所属していると判定する。サブネット内の通信を緩い条件で許可し、サブネットには属さないホスト間の通信は制限することで、セキュリティーの確保が可能になる。


3.3 DNS(Domain Name System)はなぜ必要か
 インターネット上のコンピュータ名を数値アドレスに変換するサービス

DNSサーバの仕事
 それぞれのDNSは、自分の仕事の分担範囲を持っている。
 すべてのネットワークごとに、コンピュータ名とアドレス情報をデータベースとして持つプライマリー・ネームサーバが置かれる。このネームサーバは、自らのネットワークに含まれているコンピュータについて責任を持つ。

セカンダリー・ネームサーバの仕事
 プライマリー・ネームサーバが仕事をこなせないと思えば、セカンダリー・ネームサーバに対して、仕事を委嘱する。セカンダリー・ネームサーバーは、他のドメインのセカンダリー・ネームサーバから情報を仕入れて、プライマリー・ネームサーバの仕事を補助する。
 同時に、キャッシングという仕事を行うことで、一度使われた数値アドレスを持っている。


4.TCP/IPはどうやって通信するか

4.1 ソケットとは何か
 ソケットとは、ピッチャーとキャッチャーがお互いのキャッチボールに必要なものである。2つのコンピュータがこれを用いて接続する。とはいえ、これもソフトウェアである。

ソケットに含まれる情報
 ローカルコンピュータのIPアドレス
 ローカルポート番号
 リモートコンピュータ上のTCP/IPサービスのポート番号


4.2 ポート番号とは何か
 コンピュータがデータのやり取りをするとき、データの出入口を指定する。この番号が付いた出入口をポートと呼び、その番号をポート番号と呼ぶ。と書くと、なにやら物理的なイメージがあるが、実際には、そのデータを取り扱うアプリケーションを指定している。TCP/IPでは、ポート番号の1〜255までは様々な特定の用途、すなわち、特定のアプリケーション(サービス)に予約されている。1〜65535の範囲内で指定できる。


4.3 どうやってソケットを作るか
a).コンピュータA上のクライアントソフトが、接続のためのソケットを作る。ソケットには、コンピュータ上で固有の番号が与えられる。
b).コンピュータA上のクライアントは、接続要求をコンピュータBのサーバアプリケーションに送り、リモートサービスを利用したいと伝える。この要求には、コンピュータBのIPアドレス、サービスのポート番号、ローカルソケット番号を含める。
c).コンピュータBのサーバアプリケーションは、接続のためのソケットを作る。ソケットには、サーバー上で固有の番号が割り当てられる。
d).コンピュータBのサーバアプリケーションは、コンピュータAのIPアドレスとポート番号に対して、確認の返事を出す。
e).これで、双方向の通信が確立されて、コンピュータA上のクライアントソフトは、コンピュータBのサービスを利用できるようになる。


4.4 ソケットAPI
 TCP/IPには、API(Application Programming Interface)が容易されていて、プログラムを簡単に作ることができるようになっている。上に述べたような面倒なソケットを作る手続きも、ソケットAPIとして準備されている。


5.まとめ
 以上のような知識があれば、Webプログラマとしての雑学は十分だろう。