- ベストアンサー
DHCPとNAPTとの違い
LANを勉強中です、宜しくお願いします。 DHCPとNAPTとはどのように違うのでしょうか。 本読むと、どちらもプライベートアドレスとグローバルアドレスを相互に変換すると書いていますが、その違いが良くわかりません。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
ANo2、ANo6、ANo9 ency です。 ANo7、ANo8 Toshi0230さんとの話題になっている MACアドレスについてちょっと補足します。 PPPのように端末 (PC等) とISP (プロバイダ) を接続するプロトコルを使用する場合 (例:MS-Windows 等でダイヤルアップ接続する場合)、確かに端末には MACアドレスは割り当てられません。 # というよりも、PPP は物理層に依存しないプロトコルです。 # このため、通信に使用する物理媒体を識別するためのアドレス (MACアドレス) が存在しないともいえますね。 しかし、PPPで接続したISPから先は Ethernet 等でインターネットに接続されているはずなので、ルータで ARP によって IPアドレス→MAC アドレス変換される場合は、ISP の MACアドレスに変換されるはずです。 で、その MAC アドレスに変換されて ISP に届いたパケット (Ethernetフレーム) が IPパケットまでほどかれて、ISP で IPアドレスをチェックして PPPフレームにカプセル化されて端末に届くと。。。 なので、PPP を使用すると端末の MACアドレスは端末側では識別不能ですが、端末の MACアドレスとして「ISP の MACアドレス」を使用することも可能である、と言えなくもないです。 # どうして可能なのかは、上記の説明をよく読んで確認してみてくださいね。 # まぁ、わからなくても良い話ではあると思いますけどね。。。 ちなみに、実は MACアドレスは IETF 仕様 (つまり RFC) の範疇ではないんです。 TCP/IP はリンク層だけ IEEE で仕様化されることが多いんです。 たとえば Ethernet (CSMA/CD) であれば IEEE802.3、無線LAN であれば IEEE802.11 といった感じですね。 むしろ、物理層に依存しない PPP のようなプロトコルのほうが、例外的に RFC になっていると考えたほうが良いと思います。 ですので、MACアドレスは IEEE で管理されているんです。 ご参考まで。。。
その他の回答 (9)
- ency
- ベストアンサー率39% (93/238)
ANo2、ANo6 ency@正月休み中です。 # 追加質問があったにもかかわらず、返答がちょっと遅れてしまい申し訳ありません。 [ANo2 の回答へのお礼より抜粋] > >NAPT は IPアドレス (第3層: TCP/IP のインターネット層) とポート番号 (第4層: TCP/IP のトランスポート層) > を対象にしたアドレス変換方式です。 > > 上記について再度質問のですが、各レイヤーがレイヤー毎にもっている情報をトータル的に、Webサーバー(ルーター?)が確認(コントロール) > しながら、アドレス変換(P-iP←→G-iP)を行いインターネットとやり取りしているという理解でよいのでしょうか? ちょっと補足しますね。 NAPTによりIPアドレスとポート番号を変換するのは、LANとインターネットの間に存在するルータです。 ルータは通常、インターネット層 (OSI第3層:ネットワーク層) までをサポートしますが、NAPTについては例外的にトランスポート層 (OSI第4層:トランスポート層) を解釈すると考えていただいて良いと思います。 つまり、LANと、インターネットとで、まったく異なるアドレス空間が使用されるんです。 ルータを挟んでLAN側では、クライアントのIPアドレス+ポート番号はNAPTで変換されていないプライベートアドレス+ポート番号が使用されます。 一方、ルータを挟んでインターネット側は、クライアントのIPアドレス+ポート番号はNAPTで変換されたグローバルアドレス+ポート番号が使用されます。 このため、インターネット側に存在するWEBサーバ等では、クライアント側はグローバルアドレスを使用して通信していると思っています。 それが、クライアント側で、ルータを通るとプライベートアドレスに変換されているかどうかなんて、WEBサーバにしてみれば知ったことではありません。 プライベートアドレス (+ポート番号) とグローバルアドレス (+ポート番号) のアドレス変換に関する情報については、LANとインターネットの間にある「ルータ」のみぞ知る、ということになります。 言い換えれば、アドレス変換をしているのは、あくまでLANとインターネットの間のルータのみであり、LAN内にあるルータおよびサーバや、インターネットに出た後で通るルータおよびサーバでは、アドレス変換は意識していないことになります。 こんな感じで回答になっていますか?
- Toshi0230
- ベストアンサー率51% (836/1635)
> IPとTCP/UDPは別の階層のプロトコルではないのでしょうか? 非常によい質問ですね。(^^; インターネットで使われているプロトコル群を"TCP/IP"と言うように、IPとTCP/UDPはほとんど常時ペアで扱われる関係にあります。 通常のWWWやFTPなど、大半の通信は 送信元のIPアドレス+(TCP/UDP)ポート番号と送信先のIPアドレス+(TCP/UDP)ポート番号で管理されます。プログラム上も「ソケット」としてIPアドレス+(TCP/UDP)ポート番号でひとまとめで扱えるようになっているようです(プログラマではないのでこの辺りは伝聞)。プログラマは通常のネットワーク通信ソフトウェアと同じ感覚でNAPTの実装ができることになります(極論ですが)。 対して、MACアドレスは先の回答に書いたとおり、あるかどうかも判らない(誰も保証できない)ものですし、扱うためにはわざわざライブラリを使ってMACアドレスを取り出さないといけません。 MACアドレスを使ったイーサネットレベルは通常、OSのライブラリに任せることが多い様で、この部分までプログラムで制御しているという話はほとんど聞きません。 プログラマからすれば、IP層とTCP/UDP層の対比だけですむか、MAC層(データリンク層)とIP層とTCP/UDP層の3つで対比を取らなければいけないのか、ではどちらが実装が大変か、ある程度想像できるのではないでしょうか? しかも労力の割に、MACアドレスを使う方法だと色々と制限がかかってきます。 > どうして「MACアドレスを使うと、WEBとFTPで同時にアクセスするなどということができなくなる」のでしょうか。 ……(脳内再検討中)……NAPTの説明の例えとしては間違えていましたね。すみませんm(__)m この部分の説明は撤回させていただきます。
- Toshi0230
- ベストアンサー率51% (836/1635)
encyさんに補足します > このとき、クライアント側のポート番号は 32768以降 (だったかな?) の任意の値になりますので、 クライアント側のポート番号はOS(正確にはTCP/IPスタック)の実装に依存します。32768以降ってのはLinuxじゃなかったかな? > このため、MACアドレス (第2層:TCP/IP のリンク層) を含めた設計になっていません。 >「なぜ?」といわれても…IPアドレスからMACアドレスに変換する ARP (Address Resolution Protocol) との連携を複雑にしたくなかったのでは 作った人じゃないですが、理由はいくつか考えられます。 いずれも共通して言えるのは、MACアドレスを使うと色々と不都合があるということですね。 ・この方式の方が作るのが楽だと言うこと IPアドレスとTCP/UDPのポートについて対比表をつくればよく、同じ階層のプロトコル間で完結するので実装が楽になります それに、MACアドレスを使うと、同じPCから一つのサーバに複数のブラウザでアクセスするとか、WEBとFTPで同時にアクセスするなどということができなくなるので、やはり送信元のポート番号は記録しておく必要があります。 ・MACアドレスはルータを越えられないので、プライベートIPを使ったLANにルータやL3スイッチが含まれている場合、MACアドレスを参照する方式では差し障りが出るから 例えば、以下のようなネットワーク構成を考えます --(G-IP)[NAPTルータ](192.168.0.1)--(192.168.0.2)[内部ルータ]-+-PC1(192.168.1.1) +-PC2(192.168.2.1) MACアドレスで送信元を特定しようとすると、NAPTルータからはPC1, PC2ともに内部ルータのMACアドレスと同じに見えますので、区別がつけられません。結局、内部のIPとポート番号で組み合わせた方がよいことになります。 ・ネットワーク構成によっては、そもそもMACアドレスが存在しない場合がある PPPやSLIPなどというデータリンク・プロトコルでは"MACアドレス"は存在しません。このようなプロトコルが使われていた場合、MACアドレスを使った識別がそもそもできません。 ・NAPTはNATから発達したので、そもそもそんなことを考えなかった IPアドレスだけを変換するNATという技術があります(NAPTを含めた、アドレス変換の総称として使われる場合も多々あります)。 NAPTはNATの改良という形で世に出てきたように記憶していますので、そもそもMACアドレスを使うという発想はなかったのではないかと。これは完全に私の想像ですけどね(^^;。
お礼
Toshi0230さん、横レスになるかもしれませんが、教えて下さい。 >IPアドレスとTCP/UDPのポートについて対比表をつくればよく、同じ階層のプロトコル間で完結するので実装が楽になります。 とありますが、IPとTCP/UDPは別の階層のプロトコルではないのでしょうか? >MACアドレスを使うと、同じPCから一つのサーバに複数のブラウザでアクセスするとか、WEBとFTPで同時にアクセスするなどということができなくなるので、やはり送信元のポート番号は記録しておく必要があります。 とありますが、どうして「MACアドレスを使うと、WEBとFTPで同時にアクセスするなどということができなくなる」のでしょうか。 「同じPCから一つのサーバに複数のブラウザでアクセス」した場合には、同じIP、同じポート、同じMACアドレスになるのは分かるのですが? 宜しくお願いします。
- ency
- ベストアンサー率39% (93/238)
ANo2 ency です。 # 少々長文になります。。。 [ANo2 の回答へのお礼より抜粋] 【DHCPに関するご質問について】 > 動的にプライベートIPを割る振るほうが楽だと思うのですが、 > なぜ、動的な場合と、静的な場合があるのでしょうか。 動的に割り振るほうが、仕組みとして簡単なのはわかると思います。 端末が接続されるたびに、プールしているIPアドレスの中から空いているものを順に割り振っていけばよいわけですから。。。 ただこの場合、接続するたびに端末に割り振られるIPアドレスが変わることになります。 割り振られるIPアドレスが変わっても、ネームサーバの情報がその都度更新してくれれば良いですが、少しでもタイムラグがあると接続できなくなることもあります。 サービスによっては、これがネックになる場合もありますので、静的に割り振る仕組みができたとお考えいただければよいと思います。 静的に割り振るための方法として、MACアドレスを使用しているわけですね。 【NAPTに関するご質問について】 > 2つのクライアントが同じアプリを使ってWebにアクセスしていた場合には、同じ番号のポートがデフォルトでは > 設定されていると思いますが、この場合にはIPとポートを認識して変換する意味があまり理解できません。 > > そもそもIPを1対多でグローバルとプライベートに変換するのに、ポート番号が分かってなければ、 > 1対多で変換できないのでしょうか。 > そのあたりの仕組みが実は本を読んでもよく理解出来ません。 変換されるのは、クライアント側のIPアドレス+ポート番号であることに注意してください。 サーバ側のIPアドレス+ポート番号は変換されませんので、複数の端末から同じWEBサーバに接続される場合、どれもあて先ポート番号 80 が設定されたままです。 このとき、クライアント側のポート番号は 32768以降 (だったかな?) の任意の値になりますので、これを変換の対象とするわけです。 実際には、グローバルアドレスを使いまわすことを目的に NAPT を使用することが多いようです。 そもそも、プライベートアドレスを使用する理由として、LAN内に接続する端末分のグローバルアドレスを用意できない場合があげられます。 ですので、できるだけ少ないグローバルアドレスで、できるだけ多くの端末からインターネット接続させたい場合なんかに、NAPT を使用するわけですね。 サーバ側は「送信元IPアドレス+あて先IPアドレス+送信元ポート番号+あて先ポート番号」によって通信相手との接続を区別します。 このため、たとえば以下のように、複数のプライベートアドレスに対して、同じグローバルアドレスでも異なるポート番号をマッピングさせることで、問題なくインターネットと通信することが可能になるんです。 # どちらも、クライアント側のIPアドレス+ポート番号である点に注意してください。 # また、 # P-IP:プライベートアドレス # G-IP:グローバルアドレス # とお考えください。 [1] P-IP: 10.10.10.10 / Port: 50000 ⇔ G-IP: 222.222.xxx.222 / Port: 60000 [2] P-IP: 10.10.10.20 / Port: 50000 ⇔ G-IP: 222.222.xxx.222 / Port: 65000 なお、NAT であれば異なるポート番号を割り当てることができないため、必ず1対1になります。 つまり、NAT の場合は、LAN内の全端末をインターネットに接続させる場合、端末数分のグローバルアドレスが必要になる点が、NAPT と大きく異なります。 # これも、クライアント側のIPアドレスである点に注意してください。 # また、どうしてこうなるのかは、以下の例と、上記の NAPT の例を比較してちょっと考えてみてください。 [1] P-IP: 10.10.10.10 ⇔ G-IP: 222.222.xxx.222 [2] P-IP: 10.10.10.20 ⇔ G-IP: 222.222.xxx.223 ちなみに、NAPT は IPアドレス (第3層: TCP/IP のインターネット層) とポート番号 (第4層: TCP/IP のトランスポート層) を対象にしたアドレス変換方式です。 このため、MACアドレス (第2層:TCP/IP のリンク層) を含めた設計になっていません。 「なぜ?」といわれても…IPアドレスからMACアドレスに変換する ARP (Address Resolution Protocol) との連携を複雑にしたくなかったのではないかなぁ…という予想はできますが、はっきりしたことは最初に考えた人に聞いてみるしかありません。 もし、MACアドレスを含めた形でアドレス変換をうまく行う方法が提案できれば、RFC になるかもしれませんね。 長文になってしまい、すみません。。。 こんな感じでいかがでしょうか?
お礼
encyさん、有難う御座います。 >変換されるのは、クライアント側のIPアドレス+ポート番号であることに注意してください。 >サーバ側のIPアドレス+ポート番号は変換されませんので、複数の端末から同じWEBサーバに接続される場合、どれもあて先ポート番号 80 が設定されたままです。 >このとき、クライアント側のポート番号は 32768以降 (だったかな?) の任意の値になりますので、これを変換の対象とするわけです。 ここを誤解していました、クライアント側ではなく、サーバー側(宛先)のポート番号が同じなるのですね。 >サーバ側は「送信元IPアドレス+あて先IPアドレス+送信元ポート番号+あて先ポート番号」によって通信相手との接続を区別します。 この説明でよく理解出来ました。 >NAPT は IPアドレス (第3層: TCP/IP のインターネット層) とポート番号 (第4層: TCP/IP のトランスポート層) を対象にしたアドレス変換方式です。 上記について再度質問のですが、各レイヤーがレイヤー毎にもっている情報をトータル的に、Webサーバー(ルーター?)が確認(コントロール) しながら、アドレス変換(P-iP←→G-iP)を行いインターネットとやり取りしているという理解でよいのでしょうか? 以上宜しくお願いします。
- shred
- ベストアンサー率35% (25/70)
ANo.3です。 >ポート番号をあわせて変換する理由が分かりません。 例えばLAN内の2台のPCが同じサーバにアクセスした場合、 サーバからは同じPCからアクセスされた様に見えます。 サーバはこのルータのIPアドレス宛にレスポンスを返します。 NAT方式ではルータはこのパケットのIPヘッダの送り元IPアドレス つまりサーバのIPアドレスを見て、どのPCに渡すか判断します。 ところが今回候補となるPCが2台存在するので判断材料が足りないのです。 このためポート番号も加味することによってどのPCに渡すべきか がわかります。また、ポート番号も一致することもあり得るので 変換を施します。
- outerlimit
- ベストアンサー率26% (993/3718)
本気でネットワークを勉強するのならば NAPTやIPマスカレードの様な 傍流は後にして、基本的なことをきちんと抑えるべきです NAPTやIPマスカレードは、巧妙な手段でネットワーク本来の制約を逃れる方法です その様なことを念頭においては、基本的な事項の学習の妨げにしかなりません 基本をしっかり理解できれば、NAPTやIPマスカレードの意味が理解でき惑わされるようなことはありません
- shred
- ベストアンサー率35% (25/70)
・DHCP PCのIPアドレスを動的に割り当てるプロトコルのことです。 WindowsであればDHCPクライアントがサービスプログラムとして 動いています。なのでユーザが意識しなくても自動的にDHCPクライアント がDHCPサーバの機能を持つBBルータとやりとりします。 ここでBBルータには誰が割り当てるのか気になると思いますが このときはBBルータがクライアントとなりBAS(ブロードバンドアクセスサーバ) とやりとりして設定します。 BASにはプロバイダが設定しています。 ・NAPT こちらもBBルータの機能です。 IPアドレスの枯渇を防ぐために導入された仕組みです。 LAN内のPC全てにグローバルアドレスを割り当てるのではなく BBルータのインターネット側に割り当てたグローバルアドレス1つで LAN内のPCがインターネットと通信できるようにしたのです。 具体的にはプライベートアドレスとグローバルアドレスを 変換し、さらにポート番号も変換します。 ポート番号も変換しないとまずい場合があるのはわかると思います。 ポート番号の変換アルゴリズムはルータにより様々です。
お礼
shredさん、有難う御座います。 >ポート番号も変換しないとまずい場合があるのはわかると思います。 ポート番号をあわせて変換する理由が分かりません。 宜しくお願いします。
- ency
- ベストアンサー率39% (93/238)
DHCP (Dynamic Host Configuration Protocol) は DHCPサーバにプールしてあるIPアドレスから同一ネットワーク上に接続されている端末 (PC等) に対して、IPアドレスを割り振っていくのに使用するプロトコルです。 端末を動的にIPアドレスを割り振る方法と、静的にIPアドレスを割り振る方法があります。 静的にIPアドレスを割り振る方法では、NICのMACアドレスで端末を識別し、ネットワークに接続すると常に同じIPアドレスが割り振られます。 NAPT (Network Address Port Transration) は、LAN⇔インターネット間で、プライベートアドレス⇔グローバルアドレスを相互変換する仕組みのことです。 # プロトコルではありません。 NAPT の特徴は、「IPアドレス+ポート番号」の組で変換するため、グローバルアドレス1つに対して、複数のプライベートアドレスをマッピングすることが可能です。 NAPT のことを「IPマスカレード」と呼ぶこともあります。 より正確には「IPマスカレード」は Linux (だったかな?) 上で実装されている NAPT のことを指すようです。 NAPT と似た技術に NAT (Network Address Transration) というものもあります。 こちらは、IPアドレスのみで変換するため、グローバルアドレス1つに対して、必ず1つのプライベートアドレスがマッピングされます。 こんな感じでいかがでしょうか。
お礼
encyさん、早速の回答有難う御座います。 動的にプライベートIPを割る振るほうが楽だと思うのですが、 なぜ、動的な場合と、静的な場合があるのでしょうか。 >NAPT の特徴は、「IPアドレス+ポート番号」の組で変換するため、グローバルアドレス1つに対して、複数のプライベートアドレスをマッピングすることが可能です。 2つのクライアントが同じアプリを使ってWebにアクセスしていた場合には、同じ番号のポートがデフォルトでは設定されていると思いますが、この場合にはIPとポートを認識 して変換する意味があまり理解できません。 そもそもIPを1対多でグローバルとプライベートに変換するのに、ポート番号が分かってなければ、1対多で変換できないのでしょうか。 そのあたりの仕組みが実は本を読んでもよく理解出来ません。 Macアドレスとの組み合わせの方が簡単な気がするのですが。 宜しくお願いします。
- okg00
- ベストアンサー率39% (1322/3338)
DHCPは動的IPアドレス割り当てで、サーバからクライアントにIPアドレスを割り当てるもの。起動時に割り当てる場合がほとんど。IPアドレスの変換はしません。 NAPTは割り当てられたIPアドレスを元に例えばインターネットにアクセスする際にグローバルアドレスに変換するもの。
お礼
okg00さん、早速の回答有難う御座います。 DHCPは、サーバーにプールしてあるプライベートアドレスを起動時に各クライアントに割り当てるのみですね!! 有難う御座いました、非常に良くわかります。
お礼
encyさん、有難う御座いました。 今後とも宜しくお願いします。