9.5. IPアドレス¶
ハードウェアアドレスは、同じローカルのケーブルや無線セル上にある他のデバイスの中から1つのデバイスを識別します。その用途には適していますが、ローカルセグメントを越えると役に立ちません。隣の建物のスイッチはそれを使ってルーティングできません。スイッチがMACアドレスを学習する基盤となる仕組みは、1つのセグメント内でしか機能しないからです。
ネットワーク層は、デバイスがどのケーブルに接続されているかとは独立した第2種のアドレスでこれを解決します。この種のアドレスの名称は インターネットプロトコルアドレス、すなわち IPアドレス であり、「インターネットプロトコル」という部分は、インターネット上のあらゆるホストがアドレスを送信または転送する際に従う一連の規則を指します。現在のインターネットは、アドレッシング方式の2つのバージョンを並行して使用しています。IPv4(古い形式で、小規模ネットワークでは依然として主流)とIPv6(新しい形式で、徐々にこれを置き換えつつあります)です。
9.5.1. IPアドレスとは¶
IPアドレスは、インターネット上の任意のデバイスを一意に識別できるほど大きな数値です。本節の以降で使用する人間が読みやすい形式で表記されますが、パケットヘッダー内では単なる固定サイズの整数にすぎません。
IPv4 アドレスは32ビット長で、ドットで区切られた4つの10進数として表記され、各数値は1バイトです:
192.168.1.42 8.8.8.8 10.0.0.1
32ビットでおよそ40億個のアドレスが得られ、これは1970年代にIPv4が設計された当時には十分に思えましたが、2010年代初頭には足りなくなっていました。
IPv6 アドレスは128ビット長で、コロンで区切られた4桁の16進数8組として表記されます:
2001:0db8:85a3:0000:0000:8a2e:0370:7334連続するゼロは
::に短縮でき、各組の先頭のゼロは省略できるため、上記のアドレスは通常2001:db8:85a3::8a2e:370:7334と表記されます。
この2つのアドレスファミリは、それ以外の点では異なる言語です。IPv4ホストは、ゲートウェイの助けなしにIPv6ホストへ直接パケットを送信することはできません。カメラの network および socket モジュールは両方をサポートしています。このチュートリアルでは例にIPv4を使用しています。カメラが接続するほとんどのローカルネットワークが依然としてIPv4のみであるためですが、以降の内容はアドレスを置き換えればIPv6でもまったく同じように機能します。
9.5.2. IPアドレスは何の ため にあるか¶
IPアドレスは、パケットがインターネット上のどのホスト宛てなのか を示します。宛先に直接到達する方法を知らないルーターは、他のどこかのルーターがおそらく知っていると判断し、そこへパケットを転送します。パケットはルーター間をホップし、それぞれが宛先に少しずつ近づいていき、最終的に宛先のローカルセグメント上に いる ルーターが最後のホップを配送します。
そのホップごとの動作こそが、インターネットを多数の小さな島々ではなく1つの大きなネットワークとして機能させているものです。次のページ ではホップがどのように選択されるかを扱います。このページではアドレスそのものだけを扱います。
9.5.3. カメラがアドレスを取得する方法¶
Wi-Fiネットワークに参加したばかりのカメラは、何かと通信する前にIPアドレスを必要とします。それが行われる一般的な方法は2つあります。
1つ目は 自動割り当て です。カメラはローカルネットワークにアドレスを要求します。アドレスを払い出すデバイスは ルーター、すなわちローカルネットワークをより広いインターネットに接続する装置です。ほとんどの家庭や小規模オフィスの構成では、同じ物理的な装置が、有線デバイスが接続するスイッチや、無線デバイスが接続するWi-Fiアクセスポイントとしても機能するため、「ルーター」「スイッチ」「アクセスポイント」がすべて同じ1台のハードウェアであることがあります。ルーターは DHCP(Dynamic Host Configuration Protocol)という小さなサービスを実行し、利用可能なアドレスのプールを保持し、新たに参加したデバイスごとに1つを選び、一定時間 リース します。DHCPはそのついでに、もう数点の有用な設定情報もカメラに渡します:
宛先がローカルネットワークの外にあるときに送出トラフィックを送る先のアドレス(デフォルトゲートウェイ、これはルーター自身のアドレスです)と、
example.comのような人間が読める名前をIPアドレスに変換する1つ以上の ネームサーバー のアドレス。この名前解決サービスは DNS(Domain Name System、ドメインネームシステム)と呼ばれ、名前と DNS で詳しく扱います。
これらすべては、リンクが確立する間に自動的に行われます。カメラはこれらを明示的に要求する必要はありません。前のページの例で isconnected() が True を返した瞬間、カメラはすでに自身のアドレス、ゲートウェイ、ネームサーバーを取得しています。
2つ目の選択肢は 静的設定 です。一部の導入では、他のデバイスがまず名前解決をせずにカメラへ到達できるよう、カメラに既知のアドレスを持たせたい場合があります。ipconfig() メソッドは、アドレス、ゲートウェイ、ネームサーバーを手動で設定します:
wlan.ipconfig(addr4=("192.168.1.50/24", "192.168.1.1"))
wlan.ipconfig(dns="192.168.1.1")
静的設定は壊れやすいものです(2台のデバイスに誤って同じアドレスを割り当てると衝突します)。これを上書きする特定の理由が出てこない限り、DHCPの既定値を使用してください。
カメラがIPアドレスを取得すると、インターネット(少なくともローカルネットワークというその一部)に 参加した ことになります。他のデバイスはそのアドレスでカメラにパケットを宛てられるようになり、カメラもそれらにパケットを宛てられるようになります。
9.5.4. ネットマスクと /24¶
上記の静的設定の例でアドレスの末尾にある /24 は ネットマスク です。IPアドレスそれ自体は、ローカルネットワークがどこで終わるかを示しません。192.168.1.50 は小さな家庭ネットワーク上の数百個のアドレスの1つかもしれませんし、より大きなネットワーク上の数千個の1つかもしれません。ネットマスクは、アドレスのうちどれだけが ネットワーク を表し、どれだけがその中の ホスト を表すかを示します。
/24 は「32ビットのうち先頭24ビットがネットワークを表し、末尾8ビットがホストを表す」という意味です。192.168.1.50/24 の場合、これはアドレスをネットワークを表す 192.168.1 とホストを表す .50 に分割し、同じローカルネットワーク上に約254台のデバイス分の余地を残します。/16 はホスト側により多くのビットを残し、1つのネットワークにはるかに多くのデバイスを収容します。/30 はホストアドレスを2つだけ残し、ポイントツーポイントリンクに収まります。
ネットマスクは、アドレスと同じドット区切り記法を用いた4バイトの数値として表記されることもよくあります。/24 は 255.255.255.0 と等価です。各バイトを「ネットワーク側に属するすべてのビット」として読みます。この2つの形式は互換性があります。次の小節の ipconfig() リーダーは、たまたま4バイト形式を返します。
そもそもこの分割がなぜ重要なのか、デバイスがネットマスクを使って宛先がローカルネットワーク上にあるのかゲートウェイ経由で外に出る必要があるのかをどう判断するのか、そしてなぜほとんどの家庭ネットワークが /24 に落ち着くのかは、プライベートネットワークとNAT で扱います。
9.5.5. アドレスを読み戻す¶
引数なしの ipconfig() メソッドは、現在有効な設定を返します。addr4 ビューはIPアドレスとネットマスクを返します:
>>> wlan.ipconfig("addr4")
('192.168.1.50', '255.255.255.0')