OSI 参照モデル | TCP/IP モデル | TCP/IP プロトコル | 実装 |
---|---|---|---|
アプリケーション層 | アプリケーション層 | HTTP, DNS, DHCP, SSH, MIME, TLS | アプリケーション プログラム |
プレゼンテーション層 | |||
セッション層 | |||
トランスポート層 | トランスポート層 | TCP, UDP | OS |
ネットワーク層 | インターネット層 | IP, ICMP, ARP, IPSec | |
データリンク層 | ネットワーク インターフェイス層 | イーサネット (有線) IEEE 802.11(Wi-Fi/無線) | デバイスドライバー Network Interface |
物理層 |
![](https://hogetech.info/wp-content/uploads/2024/02/1b026e84d361a6428de218cfb1471068.png)
TCP/IP プロトコルでは、IP がネットワーク層に相当します。
インターネットとは何か
現在のネットワーク (LAN) は、イーサネット (有線) や IEEE802.11(無線) で構成されます。
通常、「インターネット」は「The Internet」を指します。
まずはインターネットとは何かをはっきりさせましょう。 もともとinterとは中間とか間、相互といった意味を持ちます。 internationalなら国際ですし、intercessionなら仲介です。 ですから、語源的にはネットワークとネットワークをつなぐものが、 すなわちインターネットです。 英語だと、小文字で始まるinternetがこれに相当して、 LANとLANをつないだもの、 というイメージになります。
対して日本でインターネット、 英語では大文字で始まるThe Internetのほうは、 もっと限定的です。 これはIPという約束に従って接続された、 世界規模のコンピュータネットワークを意味します。
IP には、主に次の3つの機能があります。
IP アドレスとは
IP アドレスのフォーマット
IP アドレス (IPv4) は 32bit で構成されます。
通常は、1Byte(8bit) で区切り、10 進数で「192.168.1.1」のように表現します。
ネットワーク部 | ホスト部 | |||
---|---|---|---|---|
10進数 | 192. | 168. | 1. | 1 |
2進数 | 11000000. | 10101000. | 00000001. | 00000001 |
IP アドレスは、ネットワーク部とホスト部に分かれます。
![](https://hogetech.info/wp-content/uploads/2024/02/1d2490d6be293d397574ecc5b66eb1ff.png)
なお、IP アドレスの何 bit 目までがネットワーク部なのかは、サブネットマスクで表現します。
サブネットマスクの bit が 1 の部分がネットワーク部、0 の部分がホスト部を表します。
ネットワーク部 | ホスト部 | |||
---|---|---|---|---|
IP アドレス | 192 (11000000) | 168 (10101000) | 1 (00000001) | 1 (00000001) |
サブネットマスク | 255 (11111111) | 255 (11111111) | 0 (00000000) | 0 (00000000) |
なお、上記の省略した書き方が 「192.168.1.1/16」です。(上位 16bit までがネットワーク部)
この書き方を CIDR 表記 (プレフィックス表記) と言います。
予約済み IP アドレス
予約済み IP アドレスには以下のものがあります。
192.168.1.1/24 のホストが所属するネットワークアドレスは 192.168.1.0 です。
ネットワーク部 | ホスト部 | |||
---|---|---|---|---|
IP アドレス | 192 (11000000) | 168 (10101000) | 0 (00000000) | 1 (00000001) |
ネットワーク アドレス | 192 (11000000) | 168 (10101000) | 1 (00000001) | 0 (00000000) |
同じネットワークに所属するホストは、同じネットワーク部の値を持ちます。
![](https://hogetech.info/wp-content/uploads/2024/02/beaffbfc9d6177df55fc56812c7dacb6-1.png)
192.168.0.1/24 のホストのブロードキャストアドレスは 192.168.0.255 です。
ネットワーク部 | ホスト部 | |||
---|---|---|---|---|
IP アドレス | 192 (11000000) | 168 (10101000) | 0 (00000000) | 1 (00000001) |
ネットワーク アドレス | 192 (11000000) | 168 (10101000) | 1 (00000001) | 255 (11111111) |
なお、IP アドレス 255.255.255.255 はリミテッドブロードキャストアドレスと呼び、自分の所属するネットワークに所属する全てのホストに一斉配信できます。
IP アドレスの種類
IP アドレスには、次の2種類があります。
- プライベート IP アドレス
- グローバル IP アドレス
以下の IP アドレスがプライベート IP アドレスとして利用できます。
- 10.0.0.0 ~ 10.255.255.255 (10/8)
- 172.16.0.0 ~ 172.31.255.255 (172.16/12)
- 192.168.0.0 ~ 192.168.255.255 (192.168/16)
グローバル IP アドレスは、プライベート IP アドレスと一部の IP アドレスを除いた以下の範囲です
- 1.0.0.0 ~ 9.255.255.255
- 11.0.0.0 ~ 126.255.255.255
- 128.0.0.0 ~ 172.15.255.255
- 172.32.0.0 ~ 191.255.255.255
- 192.0.0.0 ~ 192.167.255.255
- 192.169.0.0 ~ 223.255.255.255
インターネットを契約すると、プロバイダー (ISP) からグローバル IP アドレスが割り当てられます
※ グローバル IP アドレスは、世界的には ICANN が管理、日本国内では JPNIC が管理
※ プロバイダー (ISP) は、ユーザーの代わりに JPNIC にグローバル IP アドレスの割り当てを申請
IPアドレスとMACアドレスの違い
IP アドレスはゴールの宛先、MAC アドレスは次の宛先を示します。
Host1 から Host2 (192.168.2.2) へデータを送信する場合を考えます。
![](https://hogetech.info/wp-content/uploads/2023/12/44a3d6da8358bae39988dd877ca731e9-1024x270.png)
この時、データを送信する際の IP アドレスと MAC アドレスを見ていきます。
- Host1 --> Router1 に送信する時
- 宛先 IP アドレスは 192.168.2.2
- 宛先 MAC アドレスは 0006.2AE4.2964
- Router1 --> Router2 に送信する時
- 宛先 IP アドレスは 192.168.2.2
- 宛先 MAC アドレスは 0090.2B9A.0097
- Router2 --> Host2 に送信する時
- 宛先 IP アドレスは 192.168.2.2
- 宛先 MAC アドレスは 000B.BE59.1810
上記のように、宛先 IP アドレスはゴールまで変わりませんが、MAC アドレスは次の宛先に変わっていきます。
ルーティングとは
ルーティングは、ルーティングテーブルを使って決定します。
ルーティングテーブルは、以下のコマンドで確認できます。
ホストのルーティングテーブル
ホスト側 (Linux) でルーティングテーブルを確認してみます。
![](https://hogetech.info/wp-content/uploads/2023/12/7daaad793ceeeb55710bc558c4b79d49-1024x515.png)
203.0.113.0/24 via 192.168.0.254 dev eth0 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2 default via 192.168.0.1 dev eth0
上記のルーティングテーブルの意味は次のとおりです。
- 203.0.113.0/24 ネットワーク宛の通信は、ルーター 192.168.0.254 に転送
- 192.168.0.0/24 ネットワーク宛の通信は、データリンク層で通信 (ルーター経由不要)
- それ以外のネットワーク宛の通信は、ルーター 192.168.0.1 に転送 (デフォルトゲートウェイと呼ぶ)
![](https://hogetech.info/wp-content/uploads/2023/12/2c436320b7c4931c6551ecd29a5e9208-1024x364.png)
ルーターのルーティングテーブル
ルーティングテーブルを次の2種類に分けて確認します。
直接接続したネットワーク
![](https://hogetech.info/wp-content/uploads/2023/12/e521f2a22feed0410a2fc1fc635d23ae-1024x486.png)
直接接続したネットワークを確認します。
C 192.168.1.0/24 is directly connected, FastEthernet0/0 C 192.168.100.0/24 is directly connected, FastEthernet0/1 C 192.168.200.0/24 is directly connected, FastEthernet1/0
3つのネットワークアドレスを確認できます。
(※ネットワークアドレスなので、ホスト部は 0 です。)
ルーター経由のネットワーク
![](https://hogetech.info/wp-content/uploads/2023/12/2fbee58ee48d904b0f2aa3dce1c11b4b-1024x501.png)
ルーティングプロトコルで取得した、ルーター経由で到達可能なネットワークを確認します。
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks R 192.168.2.0/24 [120/1] via 192.168.100.2, 00:00:17, FastEthernet0/1 R 192.168.3.0/24 [120/1] via 192.168.200.2, 00:00:07, FastEthernet1/0
ネットワーク 192.168.2.0/24 宛は、ネクストホップ 192.168.100.2 (Fa 0/1) に送信します。
ルーティングテーブルの作成方法
ルーティングテーブルの作成方法は、次の2種類があります。
- スタティックルーティング (静的経路制御)
- ダイナミックルーティング (動的経路制御)
自動でルーティングテーブルを作成する際の手順を、ルーティングプロトコルと呼びます。
IP フラグメンテーション
※IP パケットをイーサネットでカプセル化すると、MTU は 1500 bytes となります。(ここ)
※イーサネットフレームのデータが 1500 bytes を超えるとジャンボフレームと呼びます。
送信する IP パケットのサイズが MTU を超える場合は、IP パケットを分割して送信します。
![](https://hogetech.info/wp-content/uploads/2024/02/86be8dc5397ea32bd7c8f4459bff7210.png)
UDP ヘッダは IP ペイロードの一部なので、IP ペイロードを分割した先頭の IP パケットにだけ UDP ヘッダを含む
MTU を確認する方法
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
Path MTU (PMTU)
つまり、経路上のルーターで IP フラグメンテーションが不要なサイズです。
![](https://hogetech.info/wp-content/uploads/2024/02/68b2946214c35490fd52ed23a46ab952-e1707576982289.png)
IP フラグメンテーションはルーターに負荷を与えるため、ルーター上でやりたくないです。
そこで、Path MTU に従って、予めホスト側で IP パケットを分割しておくことで、経路上のルーターで IP フラグメンテーションが発生しなくなります。
Path MTU Discovery
Path MTU Discovery は、以下のように IP の Don't Fragment bit (IP フラグメンテーション禁止フラグ) と、ICMP の Type3 Code4 (Fragment Needed and DF was Set) を利用します。
![](https://hogetech.info/wp-content/uploads/2024/02/55b7d252371e7e37c3a44ccf8143ac2c.png)
ルーターは ICMP で次の MTU を伝え、ホストは PMTU を更新する
ICMP が帰って来なくなったので、Path MTU は 1280 となります。
※ICMP がフィルタリングされると、Path MTU を更新できない = ブラックホール問題と呼ぶ
Path MTU の確認方法
PING example.com (93.184.216.34) 2000(2028) bytes of data. From 93.184.216.34 icmp_seq=1 Frag needed and DF set (mtu = 1356)
93.184.216.34 via 192.168.0.1 dev eth0
cache expires 486sec mtu 1356
TCP セグメンテーション
上位層で分割機能がある場合は、IP 層でフラグメンテーションが不要となります。
![](https://hogetech.info/wp-content/uploads/2024/02/beb696158d384441ea46728c4350ba69.png)
TCP は、TCP 層でフラグメンテーションしてるので、TCP ヘッダが各セグメントに含まれる
IP パケットのフォーマット
IP パケットは、[IP ヘッダ] と [IP ペイロード] から構成され、フォーマットは以下のとおりです。
フィールドの名称 | ビット | 各フィールドの説明 |
---|---|---|
バージョン | 4 bit | IP プロトコルのバージョン 4:Internet Protocol version 4 (IPv4) 6:Internet Protocol version 6 (IPv6) |
ヘッダ長 (IHL) | 4 bit | IP ヘッダの長さ |
サービスタイプ | 8 bit | 送信する IP サービスの品質制御 現在は先頭 6bit を DSCP, 後続 2bit をECN として利用 |
全長 | 16 bit | パケットの長さ (IP ヘッダ + 送信するデータ) |
識別番号 (identification) | 16 bit | 各パケットを識別する番号 フラグメントしたパケットは同じ値を持つ |
フラグ | 3 bit | 1bit目:未使用 2bit目:フラグメントを許可するか (Dont Fragment bit) 3bit目:フラグメントしたパケットに続きがあるか (More Fragment bit) |
フラグメント オフセット | 13 bit | フラグメントが、分割前のパケットのどの位置か |
生存時間 (TTL) | 8 bit | ルータ or L3 スイッチをホップできる回数。 パケットがルーターを無限ループすることを阻止するため ホップするごとに TTL が 1 つずつ減少し、 TTL値が 0 になると、パケットを破棄 |
プロトコル | 8 bit | パケットに含まれる上位のプロトコルの種類 (一覧はこちら) 01 : ICMP 06 : TCP 17 : UDP |
ヘッダチェックサム | 16 bit | IP ヘッダが壊れていないことをチェック |
送信元 IP アドレス | 32 bit | 送信元の IP アドレス |
送信先 IP アドレス | 32 bit | 送信先の IP アドレス |
オプション | 可変長 | 通常は使用しない。デバッグなどで使う |
パディング | 可変長 | IP ヘッダを 32 bit の整数倍にする詰め物として 0 を入れる |
ネットワーク機器
- ルーター
- L3 スイッチ
ルーターの役割は主に 2 つです。
- ネットワークを分割
- ルーティング
ネットワークを分割
ネットワークを分割することで、ARP 等のブロードキャストを防ぎ、不要な通信を削減できます。
![](https://hogetech.info/wp-content/uploads/2023/12/router.gif)
![](https://hogetech.info/wp-content/uploads/2023/12/switch.gif)
その他にも、ネットワークを分割することで、ネットワークごとに IP パケットをフィルタリングするルールを定義できます。
ルーティング
ネットワーク同士を繋ぎ、エンドツーエンドで (端のホストから端のホストまで) IP パケットを転送する経路を決定します。
![](https://hogetech.info/wp-content/uploads/2023/12/routing-2.gif)
L3 スイッチ
L3 スイッチの基本的な機能 (ネットワーク同士の接続・ルーティング) は、ルーターと同じです。
L3 スイッチは、大量のトラフィックをルーターで処理しきれなくなったために生まれました。
そのため、対応するプロトコルを TCP/IP に絞ることで処理速度に特化した製品となってます。
ルーターと L3 スイッチの違い
ルーター | L3 スイッチ | |
---|---|---|
プロトコル | マルチプロトコル | TCP/IP のみ |
主な対象 | WAN と LAN を接続 | LAN と LAN を接続 |
ポート数 | 少ない | 多い |
処理速度 | 普通 | 速い |
https://panasonic.co.jp/ew/pewnw/product/column/010.html
https://www.oresamalabo.net/entry/2020/02/23/020820
ネットワーク層を使った通信例
最後に、ネットワーク層を使った実際の通信を見てみます。
■通信例
ホスト 192.168.1.2 から、ホスト 192.168.2.2 に ping (ICMP) を送信します。
- Host1 が MAC アドレスを取得するために ARP をブロードキャスト
- Router1 が自分宛 (デフォルトゲートウェイ宛) の ARP を受信したので、ARP に MAC アドレスを含めて返す
- 受信した MAC アドレスを利用して、Host1 が ICMP を Router1 に送信
- Router1 がルーティングテーブルを元に、Router2 に ICMP を転送
- Router2 は ICMP の Dest 192.168.2.2 に相当する MAC アドレスがわからないので破棄
- Router2 は MAC アドレスを調べるために、ルーティングテーブルで該当するネットワークに ARP をブロードキャスト
- Host1 はレスポンスが来ないので、192.168.2.2 に ICMP を再送し Host2 に届く
(再送 = 手順3 からやり直す。Router2 は手順 6 で 192.168.2.2 の MAC アドレスを取得したので、再送時は手順5 がうまくいく)
関連記事
OSI 参照モデルの L3/ネットワーク層に関する説明は以上となります。
OSI 参照モデル | TCP/IP モデル | TCP/IP プロトコル | 実装 |
---|---|---|---|
アプリケーション層 | アプリケーション層 | HTTP, DNS, DHCP, SSH, MIME, TLS | アプリケーション プログラム |
プレゼンテーション層 | |||
セッション層 | |||
トランスポート層 | トランスポート層 | TCP, UDP | OS |
ネットワーク層 | インターネット層 | IP, ICMP, ARP, IPSec | |
データリンク層 | ネットワーク インターフェイス層 | イーサネット (有線) IEEE 802.11(Wi-Fi/無線) | デバイスドライバー Network Interface |
物理層 |