都道府県穴埋めゲーム

PHPで書かれた「アクセス解析」コードを見ているのですが、IPアドレス部分に関して内容が理解できせん。何をしようとしている(と予想できる)か、教えて下さい

■前提
・IPアドレスの一番下の桁を0にして保存しています
・「123.45.678.93」→「123.45.678.0」
・「220.30.220.912」→「220.30.220.0」

■質問1
・ホスト部を0にしているので、「IPネットワークアドレス」を保存している、という理解で合っているでしょうか?
・算出方法。ビット(「IPアドレス」✕「サブネットマスク」) … long2ip( ip2long( $_addr ) & ip2long( $_mask ) );

■質問2
・またこの際、算出結果が、'0.0.0.0'だったら空を返す、という条件が入っているのですが、ビット(「IPアドレス」✕「サブネットマスク」) は、'0.0.0.0'になったりするのでしょうか?

■質問3
・IPネットワークアドレス自体、よく分からないのですが、例えば、「192.168.1.0」=「192.168.1.XXX ネットワークそのもの」、と言う理解で合っているでしょうか?
・つまり、アクセス解析時に、「192.168.1.0」を登録することは、「192.168.1.1」「192.168.1.2」も全て同じアクセスとみなす、ということを意味するのでしょうか?

■質問4
・「IPアドレス」と、「IPネットワークアドレス」って、何が違うのでしょうか?
・例えば、同じ「192.168.1.2」でも、所属する「IPネットワークアドレス」によって、異なる対象を指す、ということなのでしょうか?
・それは、「サブネットマスク」を見なければ分からない、ということなのでしょうか?
・もし、そうだとすると、所属が違うだけで、同じ「IPアドレス」はたくさん存在するのでしょうか?

A 回答 (4件)

> 「IPアドレス」と「IPネットワークアドレス」って何が違うのでしょうか?



電話番号の全長,と,電話番号の市外局番部分,の違いです。
http://okwave.jp/qa/q6740201.html の私の回答No.3

今回のご質問や補足を読むかぎり,質問者は「192.168.1.XXX ネットワークそのもの」(192.168.1という共通する市外局番部分をもつホスト群)という考え方を理解なさっているように思います。


> 「ネットマスク」値は、'255.255.255.0'固定になってました

そうなんです。TCP/IP通信において,192.168.1.2 というような「送信元のIPアドレス」は送信先にも送られますが,「送信元のネットマスク」は送信されないのです。
そのプログラムの作者は「上位3オクテット(24bit長)が共通のホスト群,を十把一絡げにしてアクセス解析しよう」と割り切ったわけで,本当の送信元のネットマスクが255.255.255.0である保証はありません。


> 全て「192.168.1.0」からのアクセスと読み替えて
> 処理するようなことって、あるのでしょうか?

現代のインターネット接続では,たいていの場合,IPアドレスは変化しますから。とくにモバイル環境でのインターネット接続ではそうだと思います。同一プロバイダからのアクセスである,同一通信キャリアからのアクセスである,という大まかなくくりで解析しようというそのプログラムの作者の方針じゃないでしょうか。
    • good
    • 0
この回答へのお礼

みなさん回答ありがとうございました。

特に、下記部分が参考になりましたー

・「No.1」さん
>掛け算ではないでしょう。論理積でしょうね

・「No.3」さん
>ネットマスクが255.255.255.0(プレフィックス長/24)の空間と仮定すれば、あっています

・「No.4さん」
>同一プロバイダからのアクセスである,同一通信キャリアからのアクセスである,という大まかなくくりで解析しようというそのプログラムの作者の方針じゃないでしょうか

お礼日時:2013/02/20 21:33

■質問1の回答



ネットマスクがわからないと判断できないと思います。
「ホスト部を0にしている」と判断した理由は何ですか?
ネットマスクが255.255.255.0(プレフィックス長/24)の空間と仮定すれば、
あっていますが、ネットマスクの情報がありません。

プログラムを書いた本人(仕様)しか判らないことだと思いますが、
これだけでは、単にIPアドレスを伏せるため0に置き換えている
(IPアドレスの一番下の桁を0にしている)だけで、それ以上の意味が
ないとも考えられます。

■質問2の答え

  単純な二進数の論理積f計算ですから、$_addr か $_maskの値が0の時になると思います。

■質問3の答え

ここでは、IPネットワークアドレスとはネットワーク部のことを言っているのだと思います。
文脈の前後がないため断定はできません。

ネットマスクカがわからないとどこまでがネットワーク部かわからないため、判断できません。
もし、255.255.255.0(プレフィックス長/24) であれば、192.168.1.0/24 という表現が、
ネットワーク全体を表します。

IPv4アドレスは、32ビットの数値です。これを判りやすいように8ビット単位(10進数0~255の値)で
ピリオドで区切った表現が、IPv4アドレスの表現方法です。


■質問4の答え
 ネットワークアドレスよって、異なる対象を指すことはありません。
 ネットマスク(プレフィックス長)というのは、ネットワークを分割して考えるためのものだと
 思ってください。

 ネットマスク(プレフィックス長)がわからないと、192.168.1.0がネットワーク部の部分なのか
 判断できません。

 192.168.1.2のIPアドレスにおいて、
 ネットマスク255.255.255.0(プレフィックス長/24)ならば、192.168.1.0/24の空間なので、
 192.168..1.0 は、ネットワーク部だと判断できます。

   192.168.1.0はネットワークアドレス(ネットワーク部)であり、ネットワーク全体を現す。
   192.168.1.255はブロードキャストアドレスであり、この2つを除いた
   192.168.1.1~192.168.1.254までが利用できる。


 ネットマスク255.255.254.0(プレフィックス長/23)ならば、192.168.0.0/23の空間なので、

   192.168.0.0はネットワークアドレス(ネットワーク部)であり、ネットワーク全体を現し、
   192.168.1.255はブロードキャストアドレスであり、この2つを除いた
   192.168.0.1~192.168.0.255, 192.168.1.0~192.168.1.254までが利用できる。

   この場合、192.168.0.0がネットワークアドレスであり、192.168.1.0は、単なるIPアドレス
   (ユニキャストアドレス)になります。

  なお、必ず最後が0になるとは限りません。
   IPアドレス 192.168.1.130で、ネットマスク255.255.255.128(プレフィックス長/25)のとき、
   ネットワークアドレスは、192.168..1.128/25となります。
  (このとき、192.168.1.130のホスト部は2になります)

  この辺りは、IPアドレスというより、単なる二進数演算で理解できる内容になります。


アドバイス

IPアドレスを理解していないのに、プログラムについて、わからないまま質問してしまい、
質問内容自体が発散して(あれもこれも解らないと質問を一度にたくさん行なっている)
と思います。

IPアドレスがわからないまま、自分なりの間違った解釈・思い込みで質問をしているように
見受けられますので、、まず、IIPアドレスの勉強から始められたほうがよいかと思います。

これがよいかどうかわかりませんが、wikipediaのIPアドレスあたりは見たほうがよいかも
しれません。

http://ja.wikipedia.org/wiki/IP%E3%82%A2%E3%83%8 …

この回答への補足

回答ありがとうございます。

>「ホスト部を0にしている」と判断した理由は何ですか?
「IPアドレス一番下の桁を0にする」箇所が、
「IPアドレス」「ネットマスク」ビット演算子の論理積、だっただめです。
今、改めて確認したら、「ネットマスク」値は、'255.255.255.0'固定になってました


一般的に、アクセス解析する際、アクセス元IPを、「192.168.1.1」「192.168.1.2」と個別判断せず、
全て「192.168.1.0」からのアクセスと読み替えて処理するようなことって、あるのでしょうか?

自分の中では、アクセスされたIP毎に、「192.168.1.1」「192.168.1.2」と保存されると思っていたのに、
このコードでは、「192.168.1.1」「192.168.1.2」でアクセスされた場合も、内部処理して「192.168.1.0」IPからアクセスされたと読み替え、IP保存しているので、なんでかな、と思い、質問してみましたー

補足日時:2013/02/12 08:25
    • good
    • 0

>・「220.30.220.912」→「220.30.220.0」



と書いていることで ネットワークの理解が足りないことを 証明しています

復習してください

「IPアドレス」「IPネットワークアドレス」に違いなどありません
アドレスの意味の解釈に違いがあるだけです
    • good
    • 0

>■質問1


>・ホスト部を0にしているので、「IPネットワークアドレス」を保存している、という理解で合っているでしょうか?

「『IPネットワークアドレス』を保存」という日本語が、私には理解不能です。

>・算出方法。ビット(「IPアドレス」✕「サブネットマスク」) … long2ip( ip2long( $_addr ) & ip2long( $_mask ) );

掛け算ではないでしょう。論理積でしょうね。

>■質問2
>・またこの際、算出結果が、'0.0.0.0'だったら空を返す、という条件が入っているのですが、ビット(「IPアドレス」✕「サブネットマスク」) は、'0.0.0.0'になったりするのでしょうか?

条件を入れたのは誰でしょう。その方にお尋ねください。繰り返すと不愉快になるかもしれませんが積算ではありませんこと、しつこいようですが言っておきます。

>■質問3
>・IPネットワークアドレス自体、よく分からないのですが、例えば、「192.168.1.0」=「192.168.1.XXX ネットワークそのもの」、と言う理解で合っているでしょうか?
>・つまり、アクセス解析時に、「192.168.1.0」を登録することは、「192.168.1.1」「192.168.1.2」も全て同じアクセスとみなす、ということを意味するのでしょうか?

サブネットマスクが255.255.255.0、別の言い方をすれば24ビットマスク、別の表記をすれば/24であるならば、合っています。

>■質問4
>・「IPアドレス」と、「IPネットワークアドレス」って、何が違うのでしょうか?

IPアドレスは個々のホストのIPv4でのL3での識別子であって、IPネットワークアドレスってのはIPアドレスの集合体です。この2つが出てくる場合、大筋、L2レベルの範囲で到達可能な範囲を指していることが多いようです。

>・例えば、同じ「192.168.1.2」でも、所属する「IPネットワークアドレス」によって、異なる対象を指す、ということなのでしょうか?

そうです。

>・それは、「サブネットマスク」を見なければ分からない、ということなのでしょうか?

そうです。

>・もし、そうだとすると、所属が違うだけで、同じ「IPアドレス」はたくさん存在するのでしょうか?

サブネットマスクは無関係です。IPアドレスが勝手に使われている例は多々あるでしょう。特にプライベートIPアドレスでは重複している例は多いでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2013/02/12 07:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!