竹形誠司 ブログ
Mac mini サーバー化計画    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
IPネットワークのおさらい
by 竹形 誠司[takegata]
概要
サーバの話をする前にIPネットワークについておさらいしておきましょう。「IP」とはInternet Protocolの頭文字を取ったものです。TCP(Transmission Control Protocol)と対にして「TCP/IP」と呼ばれることもあります。TCPはIPの上位のプロトコルで、欠損パケットのチェックや再送などを行います。TCPとは別にデータのチェックを行わない(その分高速な)UDPというプロトコルや、制御通知(pingなど)に使われるICMPというプロトコルもあります。

IPv4とIPv6
IPネットワークにはIPv4とIPv6の2種類があります。IPv4ネットワークは、アドレスが足りなくなりつつあり、将来はIPv6が普及すると見られていますが、いまだにIPv6に対応していないプロバイダが多く、現状ではIPv4が主流です。ここではIPv4について説明します。

IPアドレス
IPアドレスは24ビットの整数ですが、一般には8ビット毎にドット(.)で区切った10進数で表記します。たとえば、16進数で11223344のアドレスはは17.34.51.68と表記されます。
2進数00010001001000100011001101000100
16進数11223344
10進数17345168


ポート
1台のコンピュータが、さまざまなネットワーク機能を同時に利用するために、0〜65535の番号をそれぞれの機能に割り当てます。これをポート番号と呼びます。サーバ機能は外部のコンピュータからのアクセスを待ち受けるため、多くの場合は固定されたポート番号が割り当てられます。メールサーバは25番、ウェブサーバは80番といったように、デファクトスタンダードになっているポートもあります。サーバにアクセスするクライアント(ウェブアクセスであればブラウザ)は複数のポートを同時に使うこともあるので、49152番より上の空いているポートを使用することになっています。

TCP/20FTP (データ)
TCP/21FTP (制御)
TCP/22SSH
TCP/23Telnet
TCP/25SMTP
UDP/53DNS
UDP/67DHCP(サーバ)
UDP/68DHCP(クライアント)
TCP/80HTTP
TCP/110POP3
TCP/119NNTP
UDP/123NTP
UDP/137〜138NetBIOS
TCP/139NetBIOS
TCP/143IMAP
TCP/443HTTPS
TCP/445ダイレクトホスティングSMBサービス
TCP/587Submission(メール送信)

IPアドレスとポートを同時に表す場合は、コロンで区切って表記します。例えば、IPアドレスが17.34.51.68でポートが80番の場合は17.34.51.68:80のように書きます。

サブネットマスク
いくつかのIPアドレスを1つのグループとして扱うための仕組みがサブネットです。たとえば、連続した8個のIPアドレスを1つのグループとしてサブネットを構成するとします。たとえば次のようなサブネットを考えてみましょう。
00010001 00100010 00110011 01000000 11.22.33.40
00010001 00100010 00110011 01000001 11.22.33.41
00010001 00100010 00110011 01000010 11.22.33.42
00010001 00100010 00110011 01000011 11.22.33.43
00010001 00100010 00110011 01000100 11.22.33.44
00010001 00100010 00110011 01000101 11.22.33.45
00010001 00100010 00110011 01000110 11.22.33.46
00010001 00100010 00110011 01000111 11.22.33.47

サブネットの構成を表すために、共通部分のビットを1、異なる部分のビットを0とした値を用います。これをサブネットマスクと呼びます。上のサブネットの場合は次のようなサブネットマスクになります。
11111111 11111111 11111111 11111000 255.255.255.248

サブネットに複数のIPアドレスが含まれる場合、先頭のアドレスと末尾のアドレスは実際の機器に割り当てることができません。先頭のアドレス(上のサブネット場合は11.22.33.40)はサブネット全体を代表する「ネットワークアドレス」として使われます。また末尾のアドレス(上のサブネット場合は11.22.33.47)はサブネット上の全ての機器が関わる通信に用いられる「ブロードキャストアドレス」となります。

プライベート・アドレスとグローバル・アドレス
IP通信のパケットには宛先のIPアドレスが書き込まれていて、そのアドレスを元に相手のコンピュータにデータが届けられます。そのため、インターネット上で任意の2つのコンピュータが正しく通信を行うためには、それぞれのコンピュータが固有のIPアドレスを持っている必要があります。インターネット上では個々のユーザーが自分で勝手に決めたIPアドレスを使うことはできません。世界中のコンピュータに重複しないようにIPアドレスを割り当てるために、ICANNという国際組織が各国ごとにIPアドレスを割り当て、各国のIPアドレス管理組織(日本ではJPNIC)がインターネットサービスプロバイダ(ISP)にIPアドレスを割り当て、ISPがユーザーにIPアドレスを割り当てるようになっています。このように、世界中で重複しないように管理されているIPアドレスを「グローバルIPアドレス」と呼びます。


家庭用のプロバイダ契約ではIPアドレスが1つしか割り当てられない場合が多く、そのままでは1台のコンピュータしかネットワークに接続することができません。この問題に対処するために、ローカルネットワーク(LAN)の中だけで使える特別なサブネットが決められています。このサブネットに含まれるIPアドレスを「プライベートIPアドレス」と呼びます。ユーザーは次のサブネットに含まれるプライベートIPアドレスをLANの中で自由に使うことができます。
10.0.0.0〜10.255.255.255
172.16.0.0〜172.31.255.255
192.168.0.0〜192.168.255.255

小規模なLANでよく使われるサブネットが192.168.0.0〜192.168.0.255です。私が自宅でBフレッツを契約したときにレンタルで設置されたルータ(RV-S340NE)は、デフォルトで192.168.1.0〜192.168.1.255を使うようになっていました。

DHCP(IPアドレスの自動取得)
DHCP(Dynamic Host Configuration Protocol)はネットワーク機器に対してIPアドレスやサブネットマスクなどの情報を自動的に設定するしくみです。自動取得に設定されているコンピュータは、ネットワークに接続したときにDHCPサーバに情報を要求します。ブロードバンドルータのほとんどにはDHCPサーバの機能が内蔵されているので、一般家庭ではこの機能を使っている場合が多いでしょう。
ただし、DHCPによって割り当てられるIPアドレスは(特に設定をしなければ)常に同じものである保証はなく、コンピュータをサーバとして使う場合には不便です。通常、サーバとして使うコンピュータはIPアドレスを自動取得にせず、固定のIPアドレスを設定します。DHCPサーバーがこのIPアドレスを別のコンピュータに割り当ててしまわないように、固定で使用するIPアドレスはDHCPサーバのスコープ(自動取得で割り当てられるIPアドレスの範囲)から外しておきます。

たとえば、DHCPサーバーのスコープを192.168.1.100〜192.168.1.199と設定しておけば、192.168.1.10などのIPアドレスを固定的にサーバに割り当てることができます。

ネットワークアドレス変換(NAT)
プライベートアドレスを使用している場合、ローカルネットワーク(LAN)側からインターネット(WAN)側にアクセスするには、ルーターを経由する際にプライベートIPアドレスからグローバルIPアドレスへの変換を行う必要があります。この変換をNAT(Network Address Translation)といいます。ほとんどのブロードバンドルータにはNAT機能が搭載されています。NAT機能はIPマスカレードと呼ばれることもあります。

たとえば、LAN側にコンピュータAとBの2台があり、それぞれ192.168.0.2と192.168.0.3のプライベートIPアドレスが割り当られていたとします。また、ルーターのインターネット(WAN)側にはISPから203.191.253.79というIPアドレスが割り当てられていたとします。
LANとWAN
LANとWAN

コンピュータAがインターネット上のサーバCにパケットを送信する場合、宛先アドレスに相手のIPアドレスを指定し、相手がウェブサーバの場合は一般に80番のポートを指定します。また、送信元アドレスには自分のIPアドレスをセットし、49152番より上の空いているポート(たとえば50001)を使用します。
送信元(変換前)宛先
192.168.0.2:50001210.224.163.232:80

このパケットはルータを経由してインターネット側へ転送されますが、その際にパケットの送信元アドレスがルータによってコンピュータAのプライベートIPアドレス(192.168.0.2)からルータのグローバルIPアドレス(203.191.253.79)に書き換えられます。同時に、送信元のポートもコンピュータAが指定したポート(50001)からルータの持っている空きポート(例えば60001)に変換されます。
送信元(変換後)宛先
203.191.253.79:60001210.224.163.232:80

同時に変換前と変換後のIPアドレスとポートを対応表に登録します。この対応表をNATテーブルと呼びます。
送信元(変換前)送信元(変換後)
192.168.0.2:50001203.191.253.79:60001

ルータは、複数のコンピュータやアプリケーションからインターネットへのアクセスを同時に処理するため、このテーブルには複数のデータが登録されている状態になっているのが一般的です。
変換前変換後
192.168.0.2:50001203.191.253.79:60001
192.168.0.3:55001203.191.253.79:60002
192.168.0.2:50002203.191.253.79:60003
192.168.0.3:55002203.191.253.79:60004
192.168.0.2:50003203.191.253.79:60005

パケットがルータを経由してインターネットのサーバへ送られると、サーバから処理の結果が返ってきます。このとき、パケットの送信元にサーバCのIPアドレスとポート(210.224.163.232:80)宛先にルータのIPアドレスとポート(203.191.253.79:60001)が指定されています。
送信元宛先
210.224.163.232:80203.191.253.79:60001

ルータがこのパケットを受信すると、NATテーブルを参照してIPアドレス(グローバル)とポートをコンピュータAのIPアドレス(プライベート)とポートに変換します。
宛先(変換前)宛先(変換後)
203.191.253.79:60001192.168.0.2:50001

このような変換によってルータに割り当てられた1つのグローバルIPアドレスをLAN側の複数のコンピュータで共有し、インターネット側のサーバに同時にアクセスすることができるわけです。

スタティックNAT
通常のNATはLAN側のコンピュータがWAN側のサーバへアクセスするために使われます。これとは逆に、WAN側のコンピュータがLAN側に置かれたサーバへアクセスするためにもNATを使うことができます。この場合は、ルータのグローバルIPアドレス(WAN側)の特定のポートに送信されたパケットを、LAN内で固定されたIPを持つ特定のコンピュータの特定のポートに転送します。たとえば、次のようなケースを考えてみましょう。
スタティックNAT
スタティックNAT

このようにルータのグローバルIPアドレス203.191.253.79の80番ポートに送信されたパケットをLAN内のサーバ(192.168.0.5)の8080番ポートに転送するように設定すれば、LAN内のサーバで稼動するTomcatにインターネットからアクセスすることができます。これをスタティック(静的)NATといいます。
投稿:竹形 誠司[takegata]/2009年 03月 20日 05時 09分 /更新:2009年 03月 28日 01時 03分