ネットワークの基本

IP address

計算機を指定する際は、対象となる計算機の IP アドレスもしくはホスト名を指定することになります。

上記の IP address は、32 bit (0-256 の 8bit x 4)で表現された IPv4 のアドレスになります。 サーバによっては IPv6 (128 bit のアドレス空間)をサポートしており、2種類の IP address を持つものもあります。

ホスト名は人間に読みやすい形式になっているわけですが、実際に計算機が通信する際は、ホスト名を IP address に変換してから処理します。 名前解決のためのサービスとして、例えば DNS (Domain Name System)サービスがあります。 以下は、nslookup コマンドを使って、DNS サービスにアクセスした例です。

$ nslookup www.konan-u.ac.jp 1.1.1.1 ← 今回はホスト名と DNS サーバを指定
Server:         1.1.1.1      ← 調べてくれたDNS サーバ
Address:        1.1.1.1#53   ← その IP address

Non-authoritative answer:    ← 上記 DNS サーバは権威サーバで「ない」という情報
Name:   www.konan-u.ac.jp    ← 調査対象(ホスト名)
Address: 158.199.240.27    ← 調査対象(IPv4 address)

上記では、DNS サーバを指定して検索しましたが、nslookup www.konan-u.ac.jp のように省略可能です。 省略時は、各自の計算機のネットワーク設定時に指定された DNS サーバに問い合わせをおこないます。

Port

計算機は、いろんな種類のサービス(プログラム)が通信を行っています。ということで、計算機のどのサービスとお話するのか識別できないと困ります。 で、そのために用いるのがport (ポート)番号です。

サーバ(サービスを提供する側)は、port番号を指定して、接続を待ちます。 クライアント(サービスを受ける側)は、サーバのIP addresport番号を指定して接続を行います。 接続毎に別ソケットが割り当てられるので、サーバプログラムは、指定 port で次の接続を待つこともできます。

port として利用可能な番号は、0〜65535 (16bit unsigned)と決まっており、0から1023までは利用法が決まっています。以下は例です。

  • SSH: 22
  • DNS: 53
  • HTTP: 80
  • HTTPS: 443

つまり、サーバは、各ポートを listen して待っていて、クライアントはそのポートに接続することで、サーバに接続するわけです。

皆さんが独自アプリで port を開いて実験する場合は、 1024 以降を使いましょう。

実例

例えば、皆さん WEB ページにアクセスする場合 URL を入力しますよね。

で、そうすると、計算機はホスト名から IP address を引いた後、そのホストの 443 番の port (HTTPS の標準ポート)に対してアクセス要求を出します。

一方で、WEB サーバの方では、常に 443 番ポートにアクセス要求が来るのを待っています。 要は、443 番ポートというのが待ち合わせ場所になっているわけです。

自作ネットワークプログラムを起動する際は

皆さんのプログラムでも、基本は変わりません。

  • サーバプログラムが、計算機 X の port 番号 P で待っている。
    • P には 1024 以降の番号を使いましょう。
  • クライアントプログラムが、計算機 X と port番号 P を指定して接続を行う
    • X の指定法には、ホスト名や IP address が利用可能
  • サーバとクライアントの接続が確立する

ちなみに、サーバとクライアントは、同じ計算機で動かしても構いません。自マシンを指定する場合は、

  • ホスト名: localhost
  • IP address: 127.0.0.1

を利用しても大丈夫です。

演習の際も、いちいち複数のマシンに入って仕事したくないでしょうから、通信相手を localhost にして、 プログラムを二つ立ち上げれば大丈夫です。 鎌田の配布しているプログラムでは、クライアントは、基本 localhost で動いているサーバにアクセスするようにしてあります。

Read more