UNIXネットワークプログラミング用語の基礎知識


ネットワークプログラミングに登場する 必要最低限の言葉の知識をここに書いておきます。 でも、私自身もあまり正確にはわかっていないので、気を付けて下さい。 言葉の雰囲気だけでもわかってくれれば十分とも思います。

IPアドレス
ネットワークに継ったコンピュータなどのネットワーク機器の識別番号。 データの送り先を指定するために絶対必要であり、ネットワークプログラムに おいて最も基本的な値です。 この値はコンピュータのOSによってネットワークカードに割り当てられています。
IPv4
IP;Identification Protocol の規格の version 4。 現在の主流の version 4 ではIPアドレスは 4バイト長の整数です。 例えば自分自身を表す IPアドレスの16進表記は 0x7f000001 ですが、慣例でこれを1バイトごとに10進の文字列で "127.0.0.1" と表記します。 4バイトなので約42億個のマシンが扱えるかと思いきや規約により、使える IPアドレスの数はずっと少なく、近い将来にIPアドレスの空きが無くなるそうです。
IPv6
近い将来に、より多くのネットワーク機器を扱えるようにするため IPアドレスの次世代の規格である version 6 が既に使われ始めています。 Version 6 では IPアドレスは16バイト長の整数です。慣例では例えば "1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0" のように16進4桁(2bytes)ごとに:で 区切って8つ並べてIPアドレスを表現するそうです。 これで世界中の各家庭の蛍光灯の一本一本にIPを付けられる? プログラマにとって深刻なのは、 ネットワークプログラムでIPv4専用の関数や手順を使っていると、 将来IPv6になったときに動かなくなることです。 なので両方で動く汎用の関数と手順でプログラムを作るべきなのですが、 私のこのホームページでは残念ながらIPv4専用の手順で簡潔に ネットワークプログラムを作ることにします。
ホスト名
IPアドレスに対応してネットワーク機器に与えられるASCII文字列の名前。 IPアドレスとホスト名の対応表は各マシンが /etc/hosts に持つこともありますが、 普通は DNS サーバーが対応表を管理します。
DNS
Domain Network Service。IPアドレスとホスト名の対応表を管理し、 ネットワーク上の他のマシンから IPアドレスもしくはホスト名を 尋ねられたら対応するホスト名もしくはIPアドレスを答えるサービス。 もし尋ねられたデータが対応表になければ、さらに上位のDNSサービスに 尋ねて答えを捜し出して来てくれます。 そのサービスを行うマシンを DNSサーバーと呼びます。 そのデーモンは named と呼びます。有名なDNSサーバープログラムには bind というソフトがあります。bindという 言葉はネットワークプログラミングにおいては別の意味でも使うので 注意してください。
パケット
ネットワーク回線上を流れるデータの単位。 データを運ぶ封筒のようなもの。パケットの先頭部分には 送信先アドレスや送信元アドレスなどの 通信に必要なさまざまな情報が格納されており、それにつづいてデータ本体が 格納されている。パケットの情報の格納の仕方の規格がIP; Internet Protocol。 パケットの長さは可変長で最大で64kbyte。
TCP/IP
Transmission Control Protocol。 IPの規格ではパケットが本当に届いたかの確認の仕方などは規定していません。 TCP/IPの規格は IPの規格に信頼性を持たせるための通信の手段の規格を定めます。 WebもE-mailもtelnetもftpも TCP/IPプロトコルで通信されていて、 現在最も頻繁に利用されている通信プロトコルです。
UDP/IP
User Datagram Protocol。 TCP/IPより信頼性は劣るが手続きが簡単でIPよりは信頼できる通信規格です。
UNIX domain の通信
同一UNIXマシン内の親子関係にはない2つのプロセスでの通信。 厳密にはネットワーク通信ではないですが プログラムの作り方はほとんど同じです。 この通信機構はUNIXだけでなく他のOS(例えばWindows)も 持つようになっているので最近は UNIX domain とは呼ばずに LOCAL domain と 呼ぶようになりました。UNIX(Local) domainの通信には connection-less と coneection-oriented の2種の通信形態があります。
Internet domain の通信
異なるマシンで動く2つのプロセスでの通信。 まさに internet を使ってのネットワーク通信です。 Internet domainの通信には connection-less と coneection-oriented の2種の通信形態があります。
Connection-oriented
通信を行う前に、接続を確立して確認するのが connection-oriented な接続。 stream型転送という言葉も同じことを意味します。 TCP/IPが internet domainの connection-orientedな通信です。
Connection-less
Connection-orientedとは逆に、通信の確立を確認しないでパケットを投げるのが connection-lessな接続。data gram型転送という言葉も同じことを意味します。 UDP/IPが internet domainの connection-less な通信です。 相手に届かないことも稀にありますが、面倒な手続きが不要なので簡単です。
ソケット
プログラムとOSを繋いでデータの転送を行うメカニズム。 ファイルデスクリプタのプロセス版のようなものです。プログラムはこのソケット とデータのやり取りをするだけで、後の通信は全部OSがしてくれます。
UNIX domain ソケット
同一マシン内通信をする際に、どのプログラムに接続するかを指定する識別情報。 実際には UNIX domain ソケットと呼ばれる特殊なファイルを作っておき、 そのファイル名で、どのプログラムに接続するかを指定することになります。
ポート
接続相手のマシンのどのネットワークプログラムに接続するかを指定する識別番号。 例えば ssh のサーバーは 22番ポート、telnetのサーバーは 21番ポートといった 具合です。一般ユーザーが動かすサーバープログラムで使える番号は 1025番以降です。 それ以下の番号は特権ポートと呼ばれ、super userの権限が無ければサーバー プログラムとしては利用できません。
Network byte order
CPUのチップの基本ハード構成の違いから生じてしまった根本的厄介な問題。 複数バイトの整数をメモリに格納する際に、 その値の上の桁から順にメモリに格納していく order。 しかしこれは Pentium CPUのメモリの扱い方とは逆なので面倒な問題が発生します。 その問題と対処方は後で解説します。

目次

Copyright(C) by Naoki Watanabe. Jan 1st, 2001.
渡辺尚貴 naoki@cms.phys.s.u-tokyo.ac.jp