インターネット上のデータはバケツリレー方式で送られてゆきます。
インターネットにおいてデータを送る原理は、郵便(の小包)と似ています。
あるコンピュータから荷物(データ)を送る時には、
そのデータに送り先の住所(IPアドレス)をつけて小包(パケット)にして送りつけます。
送られたデータは、様々なコンピュータを通って目的のコンピュータまで送られます。
ただし、この場合の宛名(IPアドレス)はコンピュータにわかりやすいように
数字の並んだものになっているので、通常は人間にわかりやすいような違う形の宛名の書き方が使用されます。
これらの人間にわかりやすい宛名から、IPアドレスに変換するための仕組みがDNSと呼ばれます。
インターネットはDOD(米国国防総省)のARPA(高等研究計画局)というところで、
ARPAnetという名前で生まれました。
開発の動機は、核攻撃を受けても大丈夫な分散型のネットワークを作ることだったといわれます。
その後、大学の間に研究用のネットワークとして広がってゆきました。
日本でも84年にJUNET(Japan Unix NETwork)が開始されて
インターネットへの接続が開始された。
最初はUUCP接続から始まったが、88年にWIDE(Widely Integrated Distribution Network)によってIP接続による実験が開始されました。
最初は、大学などの研究用ネットワークの性格が強かったものが、
ネットワークが広がるにつれて商用としても使用されるようになってきました。
90年代に入ってMosaicなどのWWWのためのソフトウェアが出現したことと、
米国で発表された「情報スーパーハイウェイ計画」などによって爆発的な広がりを見せるようになります。
RFC(Request For Comments)とは、インターネット上のプロトコルや運営方法、提案、アイデアなどの技術情報を公開するための文書のことです。
RFCに強制力はありませんが、インターネットではRFCで決まったものが事実上の標準となります。
RFCの文書はRFCの後に番号をつけて表されます。
例えば、RFC822という文書は822番のRFCで、電子メールについての規約が書かれています。
RFCは下記のIETFによって定められいます。
IETF(The Internet Engineering Task Force)とはインターネットの標準化のためのボランティア団体です。
法人などの実態のある団体ではなくRFCなどを定める活動だけの存在です。
入会できるのは個人単位(法人は不可)で、メーリングリストに加入するか、ミーティングに参加するだけで誰でも入会できます。
IETFによって定められるインターネットの標準は会員からの提案を経て、討議された後、標準として発表されます。
そして、これらの過程・結果はすべて公開されています。
インターネットにおいて、接続しているノード(普通はパソコンなどのコンピュータ)を識別するためには IP(Internet Protocol)アドレスが使用されます。
IPアドレスは、4byte( = 32bit) の整数値で表されます。
ですから、理論的には2の32乗で4294967296台のコンピュータが接続できます。
(実際は特別な用途に使用するアドレスがあったりして、これよりはかなり少なくなります)
IPアドレスを表現する時には、慣習的に4byteを1byteづつ区切って、各数字をピリオドでつなげて表します。
インターネットはLANを接続したネットワークです。
それぞれの接続されたLANには、何台かのコンピュータが接続されていますが、
それらのコンピュータに一つ一つ違うIPアドレスをつけてゆかなくてはなりません。
しかし、どこかの一つの組織で、全世界のすべてのコンピュータにIPアドレスを与えていったのでは大変なので、
通常は一つのLANに対して、ある範囲のアドレスを与えて、後はLANの管理者に勝手に割り振ってもらいます。
例えば、ある会社か学校のLANに対して
172.16.65.0 から 172.16.65.255
までの範囲でアドレスをつけるようにしてもらって、後はその範囲でLANの中のコンピュータに
アドレスを割り振ってもらいます。
ただし最期の数字が0と255は特別な用途に使用するので
172.16.65.1 , 172.16.65.2 , ... , 172.16.65.254
の254個のアドレスを各マシンに割り当てることができます。
IPアドレスはネットワークとホストを表す部分に分かれます。
こうしておくと、目的のアドレスまでのデータが転送がやりやすくなります。
まず、ネットワーク部だけを見て、そのネットワークまでデータを転送し、
データがそのネットワークまで達したらホスト部を見て目的のノードに転送します。
ネットワーク部(IPアドレスの前半部分)はあるまとまった範囲のノード全体を表す部分、
ホスト部(IPアドレスの後半部分)が各ノードを表す部分になります。
IPアドレスの、どこまでがネットワーク部かを表すためには、ネットマスクを使用します。
上のようにネットワークとホストの部分に分けるために、以下の5つのクラスが使用されます。
ただし、IPアドレス(IPv4)が不足しているので、現在はもっと細かい分け方(クラスレス)が使用されることがあります。
ネットマスクとは、ネットワーク部とホスト部を分けるために使用されるマスク値です。
以下のアドレスは、ノードのアドレスには使用しません。
また、以下のアドレスはプライベートアドレスと言って、 インターネットに直接接続されたノードには使用しないで、 インターネットから切り離されたLANのアドレスに使用されます。
クラス | アドレスの範囲 | ネットマスク |
---|---|---|
A | 10.0.0.0 〜 10.255.255.255 | 255.0.0.0 |
B | 172.16.0.0 〜 172.31.255.255 | 255.255.0.0 |
C | 192.168.0.0 〜 192.168.255.255 | 255.255.255.0 |
プライベートアドレスを割り当てられたノードは、
ルータを経由してインターネットに接続することができます。
その際にNATやIPマスカレードなどが使用されます。
上で述べたようにIPアドレスは4byteの整数値なので、約40億台のコンピュータが接続できる
計算になりますが、もし世界中の人(約45億人)が一台づつコンピュータを持って、
そのすべてがインターネットに接続したとしたら、アドレスの数が足りなくなってしまいます。
それだけでなく、これからはあらゆる電器製品の中に組み込まれているコンピュータも
インターネットに接続されてゆく可能性があるので余計に不足が進んでゆくでしょう。
現在はさまざまな工夫(プライベートアドレスなど)によってアドレスの不足を補っていますが、
今のままでインターネットが拡大し続けるとこのようにアドレスが不足してくるので、
今の4byteをもっと大きな数値(16byte = 128bit)にしようという計画 ( IPv6 ) が進んでいます。
インターネット・LANなどでは、TCP/IPというしくみ(プロトコル)を利用してデータを相手に送るようになっています。
TCP/IPによって行なわれる作業は、UINX・WindowsなどではOSのカーネルが担当しています。
TCP/IPによって行なわれる作業は、以下の通りです。
メールやWebのデータが、相手のコンピュータまでどのようにして届くか概略を以下に述べてみましょう。
以下の、client.pyとserver.pyを別々のターミナルで起動し、
client.pyを起動したターミナルでキー入力すると、server.pyのターミナルにその文字が表示されます。
Enterのみの入力で、両方のプロセスが終了します。
import socket
host = '127.0.0.1'
port = 3794
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
while True:
print '>>',
msg = raw_input()
if msg == '':
s.close()
break
print 'Send ' + msg
s.sendall(msg)
import socket
host = ''
port = 3794
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host,port))
s.listen(1)
print 'Waiting for connections'
clientsock, clientaddr = s.accept()
print 'Connected'
while True:
msg = clientsock.recv(1024)
print 'Received ' + msg
if msg == '':
break
clientsock.close()