ネットワークとIPアドレス
ネットワークとIPアドレス
ネットワークとIPアドレスについて勉強したので、こちらにまとめます
ネットワーク: コンピューター同士が通信するための環境や設備のこと
ネットワークは、LANがいくつか存在し、そのLAN同士がゲートウェイと呼ばれる中継機(ルーターなど)を通って接続できる仕組み
IPアドレス: ネットワークにおけるコンピューターの住所であり、ネットワークに接続されているコンピュータは必ずIPアドレスを持っており、通信をする際には必ずIPアドレスを指定する
IPアドレスの規格には、従来ののIPv4と、新しいIPv6がある(これは、IPv4の規格だとIPアドレスが足りなくなった為IPv6ができた)
IPアドレスには、グローバルIPアドレスとプライベートIPアドレスがある
グローバルIPアドレスは、インターネットで外部のネットワークに接続する際に必要になり、プライベートIPアドレスはLANの中で必要になる
ここからは、実際に検証しながらIPアドレスやネットワークの使われ方を感じてもらいます
まず、WiFiに接続しているパソコンで以下のサイトにアクセスするとグローバルIPアドレスが確認できます
通常は、同じLANに属していれば同じグローバルIPアドレスが表示されるので、上記で試したパソコンに接続されているのと同じWiFiにスマホを接続して、上記のサイトにアクセスすると同じグローバルIPアドレスが表示されます
なぜWiFiに接続されている端末が同じグローバルIPアドレスを使って、それぞれの端末毎にインターネットが使えるかというと、実は、LAN内のパソコンやスマホはグローバルIPアドレスがありません
LAN内のパソコンやスマホは、ゲートウェイ(ルーター)のグローバルIPアドレスを借りてインターネットに接続しています
LAN内の端末は、ゲートウェイ(ルーター)のグローバルIPアドレスを借りてインターネットに接続し、LAN内のプライベートIPアドレスで識別することで、どの端末でインターネットにアクセスしたかを区別しています
LAN内でプライベートIPアドレスで区別しているのも、ルーターの仕事です
以下でパソコンのプライベートIPアドレスが確認できます
ターミナルで、以下のように実行してネットワークハードウェアを確認します
今回は、WiFiを使用しているの[en0]というデバイスにプライベートIPアドレスが割り当てられている
$ networksetup -listallhardwareports Hardware Port: Ethernet Adaptor (en3) Device: en3 Ethernet Address: 1e:00:ea:1e:4d:28 Hardware Port: Ethernet Adaptor (en4) Device: en4 Ethernet Address: 1e:00:ea:1e:4d:29 Hardware Port: Wi-Fi Device: en0 Ethernet Address: 50:ed:3c:04:e2:c0 Hardware Port: Thunderbolt 1 Device: en1 Ethernet Address: 36:20:5e:6d:01:00 Hardware Port: Thunderbolt 1 Device: en2 Ethernet Address: 36:20:5e:6d:01:04 Hardware Port: Thunderbolt Bridge Device: bridge0 Ethernet Address: 36:20:5e:6d:01:00
上記を実行後以下でプライベートIPアドレスが確認できる
$ ifconfig [デバイス名] # 今回の場合は、[ifconfig en0]で実行する en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=400<CHANNEL_IO> ether 50:ed:3c:04:e2:c0 inet6 fe80::819:d834:5775:12a3%en0 prefixlen 64 secured scopeid 0x9 inet6 240b:12:2ae1:d300:18b3:f506:1aaa:5d43 prefixlen 64 autoconf secured inet6 240b:12:2ae1:d300:c853:34c7:c414:9cdc prefixlen 64 deprecated autoconf temporary inet 192.168.10.103 netmask 0xffffff00 broadcast 192.168.10.255 # ここがプライベートIPアドレス(今回の場合は、192.168.10.103) inet6 240b:12:2ae1:d300:944d:11f4:c125:5efb prefixlen 64 deprecated autoconf temporary inet6 240b:12:2ae1:d300:71c5:f3f7:5dcd:bf42 prefixlen 64 deprecated autoconf temporary inet6 240b:12:2ae1:d300:718f:defe:df7c:6a64 prefixlen 64 deprecated autoconf temporary inet6 240b:12:2ae1:d300:87a:dc64:f549:c8ae prefixlen 64 deprecated autoconf temporary inet6 240b:12:2ae1:d300:3d10:f4b4:7133:2309 prefixlen 64 autoconf temporary nd6 options=201<PERFORMNUD,DAD> media: autoselect status: active
ちなみに同一のLANに属していれば、プライベートIPアドレスを使った通信もできる
以下に例を示します
railsでサーバーを起動する時に、以下のようにオプションをつけてサーバーを起動する
$ rails s -b 0.0.0.0
パソコンと同じWiFiにスマホを接続して、スマホに以下のURLを打ち込むとスマホでもRailsのアプリケーションが開ける
http://[パソコンのプライベートIPアドレス]:3000
同じLANの中なので、プライベートIPアドレスを指定することで、LANの中のどの端末にアクセスするかを特定でき、ポート番号3000を使うことで、どのポートで接続するかを指定できるのでスマホからでもアクセスできる
次にIPアドレスの形式について説明します
IPアドレスには、どのネットワークに属しているかという[ネットワーク部]と、ネットワーク内の端末を識別するための[ホスト部]という情報があります
[ネットワーク部]と[ホスト部]の区切りを表記する方法として、[サブネットマスク]と[CIDR]の2つがあります
まずIPアドレスは、32ビットのデータで構成されています
[192.168.10.104]のようなIPアドレスがあった場合は、これは10進数での表記になりますが、本来は以下のように2進数の32ビットのデータになっています
192.168.10.104 # 10進数での表記 11000000.10101000.00001010.01101000 # 2進数の表記(32ビットになっており、8ビットずつで区切ってある)
それでは、サブネットマスク表記について説明します
IPアドレスは2進数で表記した際に、先頭からN桁目までの数字が[ネットワーク部]、それ以降が[ホスト部]となっており、ネットワーク部はどのネットワークに属しているか、ホスト部はネットワーク内のどの端末かを示しています
上記のようになっている場合でのサブネットマスクでの[ネットワーク部]と[ホスト部]の識別を説明します
(上記のようにスマホにこのように表示されている部分は、プライベートIPアドレスです)
この情報からプライベートIPアドレスを[ネットワーク部]と[ホスト部]で区別するためには、2進数に変換する必要があります
プライベートIPアドレス 192.168.10.104 # 10進数での表記 11000000.10101000.00001010.01101000 # 2真数での表記 サブネットマスク 255.255.255.0 # 10進数での表記 11111111.11111111.11111111.00000000 # 2進数での表記
上記のようにサブネットマスクは、24桁目までが1となっており、これはプライベートIPアドレスの24桁目までが[ネットワーク部]ということになります
つまり、以下のようになります
プライベートIPアドレス 192.168.10.104 ネットワーク部 192.168.10 ホスト部 104
CIDR表記について説明します
サブネットマスクだと、いちいち2進数に変換したりなど面倒くさい割に結局何桁目までが[ネットワーク部]かという情報が分かればそれで十分ということからCIDR表記ができた
CIDR表記は、以下のようになる
192.168.10.104/24 # [192.168.10.104]というIPアドレスの24桁目までが[ネットワーク部]という意味