世紀末の墓

お気持ち.log

IT系寄りの雑記

NATとは

NAT(Network Address Translation) とは、一言でいうと

グローバルアドレスを節約するために、プライベートアドレスっての作って変換しようぜ

っていう話です。

これだと圧倒的説明不足感が拭いきれないのでちゃんと説明します。

NATのはじまり

ずばり、IPv4アドレスの枯渇対策です。

かつて、ネットワークに接続されている機器にはそれぞれに固有のアドレス(グローバルアドレス)が割り振られてました。
当時は、接続機器数も少なくて全然それで良かったのです。

今はどうでしょう。
当時とは比べ物にならないくらいインターネットが普及しました。
PCやネットワーク機器は勿論、スマホや家電だってインターネットに接続する時代です。

IPv4アドレスは32ビットで構成されているため、単純計算でも2の32乗で...約40億個しかありません。
到底足りません。


そこでグローバルIPの他にプライベートIPを作って、複数のプライベートIP→一つのグローバルIPっていう変換が出来ればいけんじゃね!?
っていうのがNATのはじまりです()

NATとは

NATは、プライベートIPとグローバルIPを相互変換する技術です。

画像で詳しく見ていきましょう。

例えば、このようなネットワークがあったとします。
f:id:silmin:20180114205915p:plain
インターネットにルーターを繋げて、そこにPC1~3を繋げている、ごくありふれた構成です。

ここで、各PCにはP1~3のプライベートIPが、サーバーにはXというグローバルIPが割り振られていることにします。

ルーターはこのP1~3をグローバルアドレスに変換するため、下のようなアドレス変換テーブルを持っています。
f:id:silmin:20180114205924p:plain

このテーブルを用いて、変換していきます。

では、PC2がサーバーに何かしらのデータを送りたいとします。

  1. PC2がIP: X宛にパケットを送ります。
  2. ルーターがパケットのヘッダの部分を見て、P2(送信元のプライベートIP)をG(グローバルIP)に変換します。
  3. ルーターは、サーバーに変換後のパケットを送ります。

f:id:silmin:20180114210807p:plain
※ヘッダ部分のIP表記がポート番号のようになってますが、スペースの問題上 送信元:送信先 と表記しています。

このように、複数のPCからでもプライベートIPを用いることで、グローバルIPを節約することができます。
ちなみに、アドレス変換テーブルに登録されていない宛先のパケットが来た場合は破棄されます。

NATの欠陥

このままでは欠陥があります。

プライベートなネットワークの中に、2つ以上のPC(端末)があると相手からの返答が受けられない。
です。

これは少し考えれば分かる話かと思います。

先程、PC2からサーバーまでは届きました。
それでは、サーバーからPC2まではどうでしょうか。

届かないのです。
サーバーは受け取ったパケットをヘッダを見て、IP: G から送られてきたということを知るため、Gに向けてパケットを送ります。
ですが、ルーターはどのIPに変換していいのやらさっぱりなので、2台以上のPC(端末)があった場合は通信不可となります。

よって、NATでは1対1の通信しか実現できません。

よく NATは1対1と言われてますしね。

この欠陥を克服するために、NAPT(Network Address and Port Translation)というものがあります。

察しの良い方はわかるかもしれませんが、名前にある通り「ポート番号」と言うものを使います。

これの記事も後々かきます。
書きました。
silmin.hatenablog.com