ネットワークアドレス変換???
ネットワークにおいて、『NAT』と呼ばれるものがあります。
『Network Address Translation』の略で、ネットワークアドレス変換のことを指します。
IPアドレスを変換するものとされていますが、なぜこのようなものが必要なのでしょうか。
基本的な話も含むので、わかってるよ!って方は1から読み始めてください。
0.通信ってどうやってるのか
Aさんが、Bさんに通信したい!
そんなときに何をしているか。
通信するデータ(パケット)に、Aさんの住所(ipアドレス)とBさんの住所を書いておきます。
実際は違いますが、イメージは以下。
from:aaa.bbb.ccc.102 to:xxx.yyy.zzz.193
これで、Aさん(aaa.bbb.ccc.102)から、Bさん(xxx.yyy.zzz.193)に通信が行われるデータであるのがわかりますね。
で、データは送りっぱなしじゃなく、返信があるので、Bさんから返信が来ますね。
from:xxx.yyy.zzz.193 to:aaa.bbb.ccc.102
こんなふうに、返信が来るわけですね。そう、fromとtoの住所が逆になりました。
1. NATは、プライベートIPアドレスとグローバルIPアドレスを変換
さて、一個問題がありまして。私達の『住所』であるipアドレスは『無限じゃない』です。
なので、『グローバルIPアドレス』『プライベートIPアドレス』の2つに分けました。
プライベートIPアドレスは、『192.168.xxx.yyy』みたいなアドレスを指します。
これは、住所でいう『201号室』みたいなものです。
私達のパソコンには、このプライベートIPアドレスというものが、ルーター等で割り振られています。
もし、このプライベートIPアドレスだけで通信しようとすると、以下のような感じになります。
from:201号室 to:xxx市yyy区zzz番地
手紙を送るときに、上みたいに情報が送られても困りますね。
NATというのものは、プライベートIPアドレス(201号室)を、グローバルIPアドレス(xxx市yyy区zzz番地)に変換してデータを送ってくれるのです。
これのおかげで、無限じゃないIPアドレスを、よりたくさん扱えますね。
通信の例
AさんのPCから、ルーター(NAT)を通して、Googleに通信をするときは、
1.Aさんがどこかに(8.8.8.8)通信したい
from:192.168.aaa.aaa to:8.8.8.8
2.ルーターが変換
from:xxx.yyy.zzz.193 to:8.8.8.8
3.8.8.8.8から返信
from:8.8.8.8 to:xxx.yyy.zzz.193
4.ルーターがAさんに戻す
from:8.8.8.8 to:192.168.aaa.aaa
2.どうやってルーターは、IPアドレスを判断してるの?
NATさんは、複数のプライベートIPアドレスを捌く必要があります。
同時に通信が起こったときに、上の例の4のときは、どのプライベートIPに変換すればいいか、パット見わからないとかなりますよね。
その対応方法は、いくつかありますが、今ルーターで一般的に使われている、NAPTというやり方を説明します。
3.NAPTは、ポートも変換する
やっていることはすごく単純で、プライベートIPアドレスで通信するときに、ポートも一緒に付与する。それだけです!
1.Aさんがどこかに(8.8.8.8)通信したい
from:192.168.aaa.aaa:15000 to:8.8.8.8:80
2.ルーターが変換
from:xxx.yyy.zzz.193:10000 to:8.8.8.8:80
3.8.8.8.8から返信
from:8.8.8.8:80 to:xxx.yyy.zzz.193:10000
4.ルーターがAさんに戻す
from:8.8.8.8:80 to:192.168.aaa.aaa:15000
単純ですね!
ブラウザのタブ毎に通信が行われたりすると思うのですが、それらは、各タブ毎に、OSが空いているポートを付与して、
そして通信が行われています!
なるほどー