スタンプ一つの裏側
友だちとのチャットで、スタンプを一つ送ったとします。スマホはWi-Fiにつなぎ、サーバーまでの道を選び、データを小さく分けて送ります。
相手の側では、届いた欠片を確かめ、順番どおりに並べ直します。これを一つの巨大なプログラムでやっているわけではありません。
仕事はいくつかの「層」に分けられていて、それぞれの層は一つの仕事だけをします。
このレッスンのゴール
メモ
プロトコルがどの層のものかを言える。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| プロトコル | ネットワークでやり取りするときの決まりごと | |
| 層(レイヤー) | ネットワークの仕事を分けた一段一段 | |
| ヘッダー | 各層がデータの前に付ける情報 | |
| パケット | ヘッダーの付いた小さなデータの塊 | |
| カプセル化 | 層ごとにヘッダーを重ねてデータを包むこと | |
| ポート番号 | 機器の中のどのプログラム宛てかを示す番号 | 443 |
学生が入力するセルは、このプレビューでは空白です。
四つの層と、それぞれの仕事
インターネットは TCP/IP というモデルで動いています。層は四つです。
アプリケーション層は、ブラウザーやゲームなど、あなたが使うプログラムの層です。トランスポート層は、データを分けて、きちんと届いたかを確かめます。
インターネット層は、パケットに宛先を書いて道を探します。リンク層は、一本のケーブルや一回のWi-Fiの区間でビットを運びます。
例:層とそのプロトコル
| 層 | 仕事 | よく出会うプロトコル |
|---|---|---|
| アプリケーション層 | プログラムどうしのメッセージ | HTTP、HTTPS、DNS、SMTP |
| トランスポート層 | どのプログラム宛てかと、届いたかの確認 | TCP、UDP |
| インターネット層 | ネットワークをまたぐ宛先と道 | IP、ICMP |
| リンク層 | ケーブルやWi-Fiの一区間 | Ethernet、Wi-Fi |
学生が入力するセルは、このプレビューでは空白です。
下の層が上の層を包む
ウェブページを開くと、まずブラウザーがHTTPのメッセージを書きます。トランスポート層はその前にTCPヘッダーを付け、ここにポート番号が入ります。
インターネット層は、送り主と宛先のアドレスが入ったIPヘッダーを足します。リンク層は、次の区間のためにEthernetヘッダーを足します。
この包み方が カプセル化 です。受け取った側は、外の層から順にヘッダーを外していきます。
例:包まれた一つのリクエスト
| 線の上での順番 | ヘッダー | 中身 |
|---|---|---|
| 一番外 | Ethernet | 次の区間の機器のハードウェアアドレス |
| 二番目 | IP | 192.168.0.12 から 198.51.100.7 へ |
| 三番目 | TCP | ポート 52000 から ポート 443 へ |
| 一番内側 | HTTPSのデータ | ページをくださいという頼み |
学生が入力するセルは、このプレビューでは空白です。
ラボの機械を確かめる
netlab statusここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
h1からとなりのルーターへping
sudo ip netns exec h1 ping -c 2 -W 1 10.0.1.1ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ルーターのハードウェアアドレスを見る
sudo ip netns exec h1 ip neighここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
三つの実行で見えたもの
一つ目の実行では、五台の機械が出てきます。ホストの h1 には to-r1 という線が一本あり、アドレスは 10.0.1.2/24 です。
ping はICMPを使います。ICMPはインターネット層のプロトコルで、10.0.1.1 から返事が二つ届きます。
三つ目はリンク層の情報です。ルーターのIPアドレス、lladdr とハードウェアアドレス、最後に REACHABLE が一行で出ます。
ルーターが待つポートを見る
sudo ip netns exec r1 ss -ltnここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ポートはトランスポート層のもの
この実行は、接続を待っているTCPのポートを並べます。LISTEN の行が三つあり、ポートは 2601、2616、2623 です。
どのポートも、ルーターの中の小さなプログラムにつながっています。三つとも 127.0.0.1 で待っていて、これはルーターが自分自身と話すためのアドレスです。
よくある間違い
注意
Ethernetヘッダーが相手の機器まで旅をすると思いがちです。実際は一区間しか持ちません。ルーターはそのたびに外して、次の線のために新しく付け直します。最後まで旅をするのはIPヘッダーです。
さらに挑戦:ポートのいらないパケット
ping のパケットは Ethernet IP ICMP で、TCPやUDPのヘッダーがありません。
課題に has_transport(packet) という関数を足してみましょう。TCPかUDPのヘッダーが一つでもあれば True を返します。
ウェブの頼みと ping で試し、ping にポート番号がいらない理由を考えましょう。