「パケット」「フレーム」「セグメント」は、どれもネットワーク通信で使われるデータのかたまりを表す言葉です。
ただし、同じものを指しているわけではありません。
それぞれ使われる階層が異なります。
| 用語 | 主に使われる階層 | 代表的なプロトコル | 役割 |
|---|---|---|---|
| セグメント | トランスポート層 | TCP | アプリケーション間の通信を管理する単位 |
| パケット | ネットワーク層 | IP | ネットワークを越えて宛先まで届ける単位 |
| フレーム | データリンク層 | Ethernet / Wi-Fi | 同一リンク上で次の相手へ届ける単位 |
簡単に言うと、次のように理解すると分かりやすいです。
セグメント:どのアプリへ、どの順番で、正しく届けるかを管理する単位
パケット:どの端末へ、どのネットワーク経路で届けるかを管理する単位
フレーム:同じネットワーク上のどの相手へ渡すかを管理する単位
ネットワーク通信では、データは階層ごとに包まれて送信されます。
たとえばWebサイトにアクセスする場合、データはおおまかに次のようにカプセル化されます。
HTTPデータ
↓
TCPセグメント
↓
IPパケット
↓
Ethernetフレーム
↓
ビット列として送信
受信側では、これとは逆の順番でデータが取り出されます。
ビット列
↓
Ethernetフレーム
↓
IPパケット
↓
TCPセグメント
↓
HTTPデータ
このように、パケット・フレーム・セグメントは、ネットワークの階層ごとに呼び方が変わるデータ単位です。
セグメントとは、主にTCPで使われるトランスポート層のデータ単位です。
TCPは、アプリケーション同士の通信を成立させるためのプロトコルです。
Webブラウザ、メールソフト、チャットアプリなどが通信するとき、TCPはデータを正しく届けるために重要な役割を果たします。
TCPの主な役割は次のとおりです。
TCPでは、アプリケーションから渡されたデータを必要に応じて分割し、TCPヘッダを付けます。
この単位をTCPセグメントと呼びます。
TCPセグメント
├─ TCPヘッダ
└─ アプリケーションデータ
TCPセグメントには、通信を正しく制御するための情報が含まれます。
代表的なものは次のとおりです。
| 情報 | 役割 |
|---|---|
| 送信元ポート番号 | 送信元アプリケーションを識別する |
| 宛先ポート番号 | 宛先アプリケーションを識別する |
| シーケンス番号 | データの順番を管理する |
| ACK番号 | どこまで受信したかを相手に伝える |
| フラグ | 接続開始・終了などを制御する |
| ウィンドウサイズ | 受信可能なデータ量を知らせる |
| チェックサム | データ破損を検出する |
たとえばHTTPS通信では、宛先ポート番号として一般的に 443 が使われます。
HTTP通信では 80 が使われます。
つまり、セグメントは単なるデータのかたまりではなく、アプリケーション間で信頼性のある通信を行うための管理情報を持った単位です。
注意点として、トランスポート層のデータ単位をすべて「セグメント」と呼ぶわけではありません。
一般的には、TCPのデータ単位をセグメントと呼びます。
一方、UDPのデータ単位はデータグラムと呼ぶのが一般的です。
| プロトコル | データ単位 |
|---|---|
| TCP | セグメント |
| UDP | データグラム |
ただし、教材や文脈によっては、トランスポート層全体のPDUをまとめて「セグメント」と説明する場合もあります。
厳密に理解するなら、次のように整理するとよいです。
TCP → セグメント
UDP → データグラム
パケットとは、主にIPで使われるネットワーク層のデータ単位です。
IPは、データを宛先の端末まで届けるためのプロトコルです。
インターネットでは、データは複数のルーターを経由して目的地へ向かいます。
このとき、ルーターはIPパケットの宛先IPアドレスを見て、次にどこへ転送するかを判断します。
IPパケット
├─ IPヘッダ
└─ TCPセグメントなどのデータ
Web通信の場合、IPパケットの中にはTCPセグメントが入ることが多いです。
IPパケット
├─ IPヘッダ
└─ TCPセグメント
├─ TCPヘッダ
└─ アプリケーションデータ
IPパケットには、ネットワーク上で宛先まで届けるための情報が含まれます。
代表的なものは次のとおりです。
| 情報 | 役割 |
|---|---|
| 送信元IPアドレス | どの端末から送られたかを示す |
| 宛先IPアドレス | どの端末へ届けるかを示す |
| TTL / Hop Limit | ルーターを通過できる回数を制限する |
| プロトコル番号 | 中身がTCPかUDPかICMPかなどを示す |
| パケット長 | パケット全体の長さを示す |
| フラグメント情報 | 分割されたパケットを管理する |
IPv4ではTTL、IPv6ではHop Limitという情報が使われます。
どちらも、パケットがネットワーク上を無限に回り続けることを防ぐための仕組みです。
パケットの大きな役割は、ネットワークを越えて宛先IPアドレスまでデータを届けることです。
たとえば、自宅のPCからWebサーバーにアクセスする場合、IPパケットは次のように複数のネットワーク機器を経由します。
自宅PC
↓
自宅ルーター
↓
プロバイダのルーター
↓
インターネット上のルーター
↓
Webサーバー側のネットワーク
↓
Webサーバー
このとき、通常のルーティングでは、宛先IPアドレスは基本的にWebサーバーのままです。
一方で、ルーターを通過するたびにTTLは減少します。
また、IPv4ではTTLが変わるため、IPヘッダチェックサムも再計算されます。
通常のルーティングでは、宛先IPアドレスは基本的に維持されます。
しかし、実際のネットワークではNATが使われることがあります。
NATとは、プライベートIPアドレスとグローバルIPアドレスを変換する仕組みです。
たとえば、自宅PCが次のようなIPパケットを送ったとします。
送信元IP:192.168.1.10
宛先IP:WebサーバーのグローバルIP
自宅ルーターがNATを行うと、インターネット側へ送るときに送信元IPアドレスが変換されます。
送信元IP:自宅ルーターのグローバルIP
宛先IP:WebサーバーのグローバルIP
このように、NAT、プロキシ、ロードバランサー、VPN、トンネルなどがある場合、IPヘッダの情報が変わることがあります。
そのため、厳密には次のように理解するとよいです。
通常のIPルーティングでは、宛先IPアドレスは基本的に維持される。
ただし、NATやプロキシなどがあると、IPヘッダの情報が変わることがある。
IPのデータ単位は、一般的には「パケット」と呼ばれます。
ただし、IPv4では「IPデータグラム」という呼び方も使われます。
また、実務では「パケット」という言葉が広い意味で使われることがあります。
たとえば、次のような表現です。
パケットキャプチャ
パケットロス
パケットフィルタ
この場合の「パケット」は、厳密にIPパケットだけを指しているとは限りません。
EthernetフレームやTCPセグメントを含めて、ネットワーク上を流れるデータ全般を指していることもあります。
したがって、文脈によって次のように整理すると分かりやすいです。
狭い意味のパケット:IPなどネットワーク層のデータ単位
広い意味のパケット:ネットワーク上を流れるデータ単位全般
フレームとは、データリンク層で使われるデータ単位です。
代表的なものには、EthernetフレームやWi-Fiフレームがあります。
データリンク層の役割は、同一リンク上の相手へデータを届けることです。
たとえば、自宅PCから自宅ルーターへデータを渡す場合、EthernetやWi-Fiのフレームが使われます。
Ethernetフレームは、おおまかに次のような構造です。
Ethernetフレーム
├─ Ethernetヘッダ
├─ IPパケットなどのデータ
└─ FCS
Ethernetヘッダには、宛先MACアドレスや送信元MACアドレスなどが含まれます。
Ethernetフレームには、同一リンク上でデータを届けるための情報が含まれます。
代表的なものは次のとおりです。
| 情報 | 役割 |
|---|---|
| 宛先MACアドレス | 同一リンク上の宛先を示す |
| 送信元MACアドレス | 送信元のMACアドレスを示す |
| EtherType | 中身がIPv4、IPv6、ARPなどのどれかを示す |
| FCS | フレームの誤りを検出する |
Web通信では、Ethernetフレームの中にIPパケットが入ることが多いです。
Ethernetフレーム
├─ Ethernetヘッダ
│ ├─ 宛先MACアドレス
│ ├─ 送信元MACアドレス
│ └─ EtherType
├─ IPパケット
└─ FCS
ただし、Ethernetフレームの中身はIPパケットだけではありません。
ARP、IPv6、PPPoE、VLANタグ付きフレームなど、さまざまなデータが入る場合があります。
フレームは、同一データリンク上の相手へデータを届けるための単位です。
ここで重要なのは、フレームの宛先MACアドレスは、必ずしも最終目的地のサーバーを指すわけではないという点です。
たとえば、自宅PCからインターネット上のWebサーバーへアクセスする場合、最初にデータを渡す相手はWebサーバーではありません。
通常は、自宅のルーター、つまりデフォルトゲートウェイに渡します。
そのため、最初に作られるEthernetフレームは次のようになります。
Ethernetフレーム
├─ 宛先MACアドレス:自宅ルーターのMACアドレス
├─ 送信元MACアドレス:自分のPCのMACアドレス
└─ 中身:Webサーバー宛てのIPパケット
一方、IPパケットの宛先IPアドレスはWebサーバーです。
IPパケット
├─ 送信元IPアドレス:自分のPC
└─ 宛先IPアドレス:Webサーバー
つまり、次の違いがあります。
IPパケットの宛先:最終的に届けたい相手
フレームの宛先:同一リンク上で次に渡す相手
フレームは、基本的にルーターを越えてそのまま届くわけではありません。
ルーターは、受け取ったフレームからIPパケットを取り出します。
そして、IPパケットの宛先IPアドレスを見て、次の転送先を決めます。
その後、出力先のネットワークに合わせて新しいフレームを作り直します。
たとえば、次のような経路を考えます。
PC → 自宅ルーター → ISPルーター → Webサーバー
この場合、区間ごとにフレームの宛先MACアドレスは変わります。
PC → 自宅ルーター
宛先MAC:自宅ルーター
自宅ルーター → ISPルーター
宛先MAC:ISPルーター側の次の相手
ISPルーター → 次のルーター
宛先MAC:次のルーター
最後のルーター → Webサーバー
宛先MAC:Webサーバー
このように、IPパケットはネットワークを越えて宛先に向かう単位ですが、フレームは各リンク上で使われる単位です。
ルーターを越えるとフレームは作り直されます。
しかし、L2スイッチでは基本的に事情が異なります。
L2スイッチは、Ethernetフレームの宛先MACアドレスを見て、適切なポートへ転送します。
ルーターのようにIPパケットを取り出して、別のフレームとして再カプセル化するわけではありません。
たとえば、次のような構成を考えます。
PC → スイッチ → ルーター
この場合、PCが送ったEthernetフレームは、スイッチを経由してルーターへ届きます。
スイッチはフレームを転送しますが、IPルーティングを行っているわけではありません。
ただし、L3スイッチのように、IPルーティング機能を持つ機器もあります。
そのため、実務では「スイッチ」という名前だけで判断せず、L2転送をしているのか、L3転送をしているのかを見ることが大切です。
パケット・フレーム・セグメントの違いは、ネットワークの階層で整理すると分かりやすくなります。
アプリケーション層:HTTPデータなど
トランスポート層:TCPセグメント / UDPデータグラム
ネットワーク層:IPパケット
データリンク層:Ethernetフレーム / Wi-Fiフレーム
物理層:ビット列、電気信号、光信号、電波
各階層は、それぞれ異なる役割を持っています。
| 階層 | データ単位 | 主な役割 |
|---|---|---|
| トランスポート層 | セグメント | アプリケーション間の通信を制御する |
| ネットワーク層 | パケット | ネットワークを越えて宛先まで届ける |
| データリンク層 | フレーム | 同一リンク上で相手へ届ける |
セグメント・パケット・フレームでは、宛先を識別するための情報も異なります。
| データ単位 | 宛先を示す主な情報 | 意味 |
|---|---|---|
| セグメント | ポート番号 | どのアプリケーションへ届けるか |
| パケット | IPアドレス | どの端末へ届けるか |
| フレーム | MACアドレス | 同一リンク上のどの相手へ届けるか |
たとえばWebサーバーへHTTPS通信を行う場合、次のようになります。
TCPセグメント
宛先ポート番号:443
IPパケット
宛先IPアドレス:WebサーバーのIPアドレス
Ethernetフレーム
宛先MACアドレス:次に渡す相手のMACアドレス
この3つは、それぞれ見ている範囲が違います。
ポート番号:アプリケーションを識別する
IPアドレス:端末やネットワーク上の宛先を識別する
MACアドレス:同一リンク上の相手を識別する
セグメント・パケット・フレームの役割をさらに整理すると、次のようになります。
セグメント:
アプリケーションのデータを、正しい順番で、必要に応じて再送しながら届けるための単位。
パケット:
宛先IPアドレスをもとに、複数のネットワークを越えて目的地へ届けるための単位。
フレーム:
同一リンク上で、次に渡す相手へデータを届けるための単位。
簡単に言い換えると、次のようになります。
セグメント:アプリ間の配送管理
パケット:ネットワーク間の配送管理
フレーム:リンク上の配送管理
ユーザーがブラウザでWebサイトにアクセスすると、まずアプリケーション層でHTTPリクエストが作られます。
たとえば、HTTPでは次のようなリクエストが作られます。
GET / HTTP/1.1
Host: example.com
HTTPSの場合、このHTTPデータはTLSによって暗号化・認証されます。
厳密には、HTTPS通信では次のような流れになります。
HTTPデータ
↓
TLSレコード
↓
TCPセグメント
↓
IPパケット
↓
Ethernetフレーム
HTTPの場合はTLSを挟まず、HTTPデータがTCPに渡されます。
次に、TCPがアプリケーションデータにTCPヘッダを付けます。
これによってTCPセグメントが作られます。
TCPセグメント
├─ 送信元ポート番号
├─ 宛先ポート番号
├─ シーケンス番号
├─ ACK番号
└─ アプリケーションデータ
HTTPS通信の場合、宛先ポート番号は一般的に 443 です。
TCPは、データが正しく届いたかを確認し、必要に応じて再送します。
また、データが分割されて届いた場合でも、シーケンス番号を使って正しい順番に並べ直します。
次に、IPがTCPセグメントにIPヘッダを付けます。
これによってIPパケットが作られます。
IPパケット
├─ 送信元IPアドレス
├─ 宛先IPアドレス
├─ TTL / Hop Limit
└─ TCPセグメント
宛先IPアドレスには、アクセス先WebサーバーのIPアドレスが入ります。
ルーターは、この宛先IPアドレスを見て、次にどこへ転送するかを判断します。
次に、EthernetやWi-Fiなどのデータリンク層でフレームが作られます。
自宅PCからインターネット上のWebサーバーへアクセスする場合、最初にデータを渡す相手は通常、自宅ルーターです。
そのため、Ethernetフレームは次のようになります。
Ethernetフレーム
├─ 宛先MACアドレス:自宅ルーターのMACアドレス
├─ 送信元MACアドレス:自分のPCのMACアドレス
└─ IPパケット
このフレームは、まず自宅ルーターへ届けられます。
自宅ルーターは、受け取ったEthernetフレームからIPパケットを取り出します。
その後、IPパケットの宛先IPアドレスを見て、次にどこへ送るかを判断します。
そして、次のネットワークへ送るために新しいフレームを作ります。
新しいフレーム
├─ 送信元MACアドレス:ルーターの出口側インターフェース
├─ 宛先MACアドレス:次に渡す相手のMACアドレス
└─ IPパケット
この処理が、経路上のルーターごとに行われます。
つまり、Webサイトにアクセスするときは、次のような関係になります。
TCPセグメント:通信の信頼性や順序を管理する
IPパケット:Webサーバーまでの配送を管理する
フレーム:各リンク上で次の相手へ届ける
IPアドレスは、ネットワーク上で端末を識別するためのアドレスです。
IPパケットには、送信元IPアドレスと宛先IPアドレスが含まれます。
送信元IPアドレス:どの端末から送られたか
宛先IPアドレス:どの端末へ届けるか
ルーターは、宛先IPアドレスを見てパケットを転送します。
MACアドレスは、EthernetやWi-Fiなどのデータリンク層で使われるアドレスです。
Ethernetフレームには、送信元MACアドレスと宛先MACアドレスが含まれます。
送信元MACアドレス:同一リンク上での送信元
宛先MACアドレス:同一リンク上での宛先
IPアドレスが「最終的な宛先」を示すのに対して、MACアドレスは「同一リンク上で次に渡す相手」を示します。
IPv4では、同一リンク上のIPアドレスに対応するMACアドレスを調べるためにARPが使われます。
たとえば、自宅PCがデフォルトゲートウェイへフレームを送る場合、まずルーターのIPアドレスに対応するMACアドレスを知る必要があります。
このときにARPが使われます。
IPv4:ARPでIPアドレスからMACアドレスを調べる
IPv6:NDPで近隣ノードの情報を調べる
IPv6ではARPではなく、NDP、つまりNeighbor Discovery Protocolが使われます。
MTUとは、あるリンクで一度に運べるネットワーク層パケットの最大サイズです。
Ethernetでは、一般的なMTUは1500バイトです。
ここで注意したいのは、EthernetのMTU 1500バイトは、Ethernetフレーム全体のサイズではないということです。
EthernetのMTU 1500バイトは、Ethernetフレームの中に入るIPパケットなどの上位層ペイロードの最大サイズを指します。
通常のEthernetフレームでは、おおまかに次のようになります。
Ethernetヘッダ:14バイト
IPパケット:最大1500バイト
FCS:4バイト
つまり、Ethernetフレーム全体としては、MTUの1500バイトより大きくなります。
14 + 1500 + 4 = 1518バイト
VLANタグが入る場合は、さらに4バイト増えます。
MSSとは、TCPセグメントで運べるアプリケーションデータ部分の最大サイズです。
典型的なIPv4環境では、次のように計算できます。
Ethernet MTU:1500バイト
IPv4ヘッダ:20バイト
TCPヘッダ:20バイト
MSS = 1500 - 20 - 20 = 1460バイト
つまり、IPv4 + TCPヘッダがどちらも最小サイズの場合、MSSは1460バイトになります。
ただし、これは常に固定ではありません。
IPv6の場合、IPv6ヘッダは通常40バイトです。
そのため、TCPヘッダが20バイトであれば、MSSは次のようになります。
MSS = 1500 - 40 - 20 = 1440バイト
また、TCPオプションが付くとTCPヘッダは20バイトより大きくなります。
その場合、実際に運べるアプリケーションデータはさらに小さくなります。
したがって、MSSについては次のように理解するとよいです。
MSS 1460バイトは、IPv4 + TCP最小ヘッダの場合の典型値。
IPv6やTCPオプションがある場合は変わる。
パケットとフレームは混同されやすい言葉です。
しかし、厳密には別の階層のデータ単位です。
パケット:ネットワーク層の単位
フレーム:データリンク層の単位
パケットはIPアドレスを使って宛先まで届けるための単位です。
フレームはMACアドレスなどを使って同一リンク上の相手へ届けるための単位です。
ただし、実務上は「パケット」という言葉が広い意味で使われることがあります。
そのため、会話の文脈によっては、フレームやセグメントを含めて「パケット」と呼んでいる場合もあります。
フレームは、基本的にルーターを越えてそのまま届くわけではありません。
ルーターは、受け取ったフレームからIPパケットを取り出し、次のネットワークへ送るために新しいフレームを作ります。
したがって、次のように理解すると正確です。
IPパケット:複数のネットワークを越えて宛先へ向かう
フレーム:各リンク上で使われ、ルーターを越えると作り直される
インターネット上のWebサーバーへアクセスする場合、自分のPCが作る最初のフレームの宛先MACアドレスは、通常WebサーバーのMACアドレスではありません。
宛先IPアドレスがLAN外にある場合、PCはデフォルトゲートウェイへデータを渡します。
そのため、最初のフレームの宛先MACアドレスは、多くの場合、自宅ルーターや社内ルーターのMACアドレスになります。
宛先IPがLAN外:宛先MACはデフォルトゲートウェイ
宛先IPが同一LAN内:宛先MACは通信相手端末
EthernetのMTU 1500バイトは、Ethernetフレーム全体の最大サイズではありません。
正確には、Ethernetフレームの中に入るIPパケットなどの上位層ペイロードの最大サイズです。
通常のEthernetフレーム全体では、EthernetヘッダやFCSが加わるため、1500バイトより大きくなります。
Ethernetヘッダ + IPパケット最大1500バイト + FCS
ここは、MTUを理解するうえで特に重要なポイントです。
パケット・フレーム・セグメントは、どれもネットワーク通信で使われるデータの単位です。
ただし、それぞれ使われる階層と役割が異なります。
セグメント:主にTCPで使われるトランスポート層の単位
パケット:主にIPで使われるネットワーク層の単位
フレーム:EthernetやWi-Fiなどで使われるデータリンク層の単位
それぞれの役割を整理すると、次のようになります。
セグメント:
ポート番号、シーケンス番号、ACK番号などを使い、アプリケーション間の通信を管理する。
パケット:
IPアドレスを使い、ネットワークを越えて宛先端末まで届ける。
フレーム:
MACアドレスなどを使い、同一リンク上の相手へデータを届ける。
Web通信の流れで見ると、データは次のように包まれて送信されます。
HTTPデータ
↓
TLSレコード(HTTPSの場合)
↓
TCPセグメント
↓
IPパケット
↓
Ethernetフレーム
↓
ビット列
受信側では、この逆の順番でデータが取り出されます。
ビット列
↓
Ethernetフレーム
↓
IPパケット
↓
TCPセグメント
↓
HTTPデータ
最も重要なのは、次の違いです。
セグメント:アプリケーション間の通信を管理する
パケット:ネットワークを越えた配送を管理する
フレーム:同一リンク上の配送を管理する
この3つを階層ごとに分けて理解すると、ネットワーク通信の仕組みがかなり整理しやすくなります。
以上、パケット・フレーム・セグメントとはなんなのかについてでした。
最後までお読みいただき、ありがとうございました。