ネットワークとIPアドレス

ネットワークとIPアドレス

ネットワークとIPアドレスについて勉強したので、こちらにまとめます

ネットワーク: コンピューター同士が通信するための環境や設備のこと
ネットワークは、LANがいくつか存在し、そのLAN同士がゲートウェイと呼ばれる中継機(ルーターなど)を通って接続できる仕組み

IPアドレス: ネットワークにおけるコンピューターの住所であり、ネットワークに接続されているコンピュータは必ずIPアドレスを持っており、通信をする際には必ずIPアドレスを指定する
IPアドレスの規格には、従来ののIPv4と、新しいIPv6がある(これは、IPv4の規格だとIPアドレスが足りなくなった為IPv6ができた)
IPアドレスには、グローバルIPアドレスとプライベートIPアドレスがある
グローバルIPアドレスは、インターネットで外部のネットワークに接続する際に必要になり、プライベートIPアドレスはLANの中で必要になる

ここからは、実際に検証しながらIPアドレスやネットワークの使われ方を感じてもらいます

まず、WiFiに接続しているパソコンで以下のサイトにアクセスするとグローバルIPアドレスが確認できます

アクセス情報【使用中の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桁目までの数字が[ネットワーク部]、それ以降が[ホスト部]となっており、ネットワーク部はどのネットワークに属しているか、ホスト部はネットワーク内のどの端末かを示しています

https://runteq-infra-introduction-images.s3-ap-northeast-1.amazonaws.com/03/subnet-sp.png

上記のようになっている場合でのサブネットマスクでの[ネットワーク部]と[ホスト部]の識別を説明します
(上記のようにスマホにこのように表示されている部分は、プライベート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桁目までが[ネットワーク部]という意味