エンジニアのひよこ_level10

【毎日更新!】新卒2年目エンジニアブログです! プログラムだけじゃなく、マネジメントとかも書いていきたい!

【ネットワーク】NATとは。なぜ必要なのか【364日目】

ネットワークアドレス変換???

ネットワークにおいて、『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が空いているポートを付与して、
そして通信が行われています!

なるほどー