2.

パケットとは|ネットワーク データ単位 PDU の基礎、ヘッダ/ペイロード、IP パケットの構造を図解

編集
この記事の要点
  • パケットは、ネットワークレイヤ(OSI 第 3 層)でやり取りされるデータの単位(PDU: Protocol Data Unit)
  • 通信データを小さな塊に分割して送ることで、回線を効率的に共有し、一部が失われても部分的に再送できる
  • パケットは ヘッダ(宛先 IP、送信元 IP、TTL など)と ペイロード(実データ)から構成される
  • 上位層では「セグメント」(TCP)、下位層では「フレーム」(イーサネット)と呼び方が変わる点に注意

パケットとは

ネットワークにおけるパケット (packet) とは、データを送受信するために小さな塊に分割した、ネットワーク層(OSI 参照モデルの第 3 層)でのデータ単位のことです。インターネットでやり取りされるあらゆる通信(Web ページの閲覧、メール送信、動画ストリーミング、ゲーム通信など)は、すべて多数のパケットに分けて送られています。

同じ通信回線を多数の通信が共有しても効率よく動作する、途中の経路で 1 つが消失しても再送できる、といったインターネットの基本的な性質はパケット化によって実現されています。

なぜデータをパケットに分けるのか

1. 回線の共有 (多重化)

もし大きなファイルを 1 つの巨大なデータブロックとして送ってしまうと、その間は同じ回線を使う他の通信が一切流せません。データをパケットに分割することで、複数の通信を細切れに混ぜて流せるようになり、限られた回線を多数のユーザーで効率的に共有できます。

2. 部分的な再送

大きなデータを 1 つの塊で送ってしまうと、途中で 1 ビットでもエラーが発生したら全部送り直しになります。パケットに分けてあればエラーが起きたパケットだけを再送できるため、効率が大幅に向上します。

3. 経路の柔軟な選択

インターネットでは、同じ宛先に向かうパケットでも、混雑状況に応じて経由するルータが異なります。パケット単位で経路を選択できるため、一部のルータが落ちても別経路で迂回できます。

パケットの構造

パケットは大きくヘッダペイロードの 2 つから成ります。

部分役割
ヘッダ送信元 IP / 宛先 IP / TTL / プロトコル番号など、ルーティングに必要な制御情報
ペイロード実際に運びたいデータ(上位層のセグメント等)

IPv4 パケットのヘッダ

IPv4 パケットのヘッダには、最低でも 20 バイトの固定領域があり、主な項目は次の通りです。

  • バージョン: 4(IPv4)または 6(IPv6)
  • 送信元 IP アドレス: パケットを送った機器のアドレス
  • 宛先 IP アドレス: パケットを届ける先のアドレス
  • TTL (Time To Live): 経由可能な最大ホップ数。0 になると破棄される
  • プロトコル番号: ペイロードが TCP (6) なのか UDP (17) なのかを示す
  • チェックサム: ヘッダの整合性検証

パケットとフレーム・セグメントの違い

OSI 参照モデルの階層ごとに、データの呼び方は変わります。混乱しやすいので一度整理しておきましょう。

OSI 層名称(PDU)主なプロトコル
L7 アプリケーション層メッセージ / データHTTP, FTP, DNS
L4 トランスポート層セグメント (TCP) / データグラム (UDP)TCP, UDP
L3 ネットワーク層パケットIP, ICMP
L2 データリンク層フレームEthernet, Wi-Fi
L1 物理層ビット銅線・光ファイバ

パケットは L3 で扱う単位で、その下位の L2 ではパケットがイーサネットフレームの中に包み込まれ、さらに L1 でビットとして物理メディアに流されます。逆に送信側では、HTTP のメッセージが TCP セグメントになり、それが IP パケットになり、それがイーサネットフレームになる、というように段階的にカプセル化されます。

パケットの大きさ(MTU と MSS)

1 つのパケットに乗せられる最大サイズは MTU (Maximum Transmission Unit) と呼ばれ、イーサネットでは通常 1,500 バイトです。アプリケーションが送りたいデータがそれを超える場合、TCP 側で適切なサイズに分割(セグメント分割)し、複数のパケットとして送ります。MTU を超えるパケットを送ろうとすると断片化 (fragmentation) が発生し、性能低下や通信不調の原因になります。

パケットを観察するツール

実際にネットワーク上を流れているパケットを観察したい場合は、以下のツールが定番です。

  • Wireshark: GUI で各層のヘッダを階層的に展開して可視化
  • tcpdump: CLI のパケットキャプチャツール。サーバー上で気軽に使える
  • traceroute / mtr: パケットが経由するルータを順に表示
# 特定の宛先 IP のパケットだけキャプチャ
sudo tcpdump -i eth0 host 192.0.2.10 -nn -vv

# HTTP (80番ポート) のリクエストだけ
sudo tcpdump -i eth0 'tcp port 80' -A

パケットスイッチング vs 回線スイッチング

パケット交換方式 (packet switching) の対概念に、固定電話で使われてきた回線交換方式 (circuit switching) があります。回線交換は通話開始時に発信者と着信者の間に専用の物理回線を確保し、終話まで占有する方式で、品質が安定する代わりに回線の利用効率が低くなります。これに対しパケット交換は、複数の通信が同じ回線を細切れに共有するため回線利用率が大幅に高く、コストが安い反面、輻輳時には遅延や損失が発生する可能性があります。インターネットは後者を採用することで爆発的に普及しました。

パケットロスとジッタ

パケットは経路上のルータが混雑するとキューに溜まり、バッファ溢れで破棄されることがあります。これがパケットロスです。TCP は再送制御でロスを補いますが、UDP には再送機能がないため、ロスはアプリケーション側で対処する必要があります。音声通話やオンラインゲームでは、わずかなロスが品質に直結します。さらに、各パケットの到着間隔がばらつく現象をジッタ (jitter) と呼び、音声や映像のストリーミングではジッタを吸収するためのバッファを設けて再生品質を保ちます。「回線速度はそこそこ出ているのに通話が途切れる」というケースは、帯域不足ではなくジッタやロスが原因のことが多いです。

TCP と UDP - パケットの上位層

IP パケットのペイロードに何が入るかは、ヘッダのプロトコル番号で識別されます。最も使われるのは TCP(プロトコル番号 6)と UDP(プロトコル番号 17)です。TCP は順序保証・再送・フロー制御・輻輳制御を担当し、HTTP / メール / SSH などの「確実に届いてほしい」通信で使われます。UDP は最小限のヘッダだけを付けて高速に送る軽量プロトコルで、DNS / 音声通話 / ゲームなどの「ロスがあってもいいから早く」という通信で使われます。HTTP/3 が UDP ベースの QUIC を使うことで、TCP の輻輳制御のオーバーヘッドを回避しつつ、独自に信頼性を実装している点も近年の重要なトピックです。

パケットフィルタリングとファイアウォール

ネットワーク機器ではパケットのヘッダ情報を読み取り、特定の条件にマッチするパケットを通過させる/破棄する制御を行います。これがパケットフィルタリングで、ファイアウォールの基本機能です。送信元 IP、宛先 IP、宛先ポート番号、TCP のフラグなどを条件にして、たとえば「外部から SSH (22 番) への接続は拒否、内部から外部の HTTPS (443 番) は許可」といったルールを定義します。さらに高度な機能としてステートフルインスペクションがあり、TCP の状態(接続確立中、確立済み、終了中)を追跡して応答パケットだけを通すといった動的な制御も可能です。

パケットの寿命 - TTL とループ防止

IP ヘッダの TTL (Time To Live) は本来「秒数」を意味する名前ですが、現代のルータ実装では「経由可能な最大ホップ数」として運用されています。各ルータがパケットを転送するたびに TTL を 1 減らし、0 になったパケットは破棄して送信元に ICMP メッセージで通知します。これによってルーティングテーブルの不整合などで発生するパケットのループを防いでいます。traceroute はこの仕組みを利用し、TTL を 1, 2, 3 …と増やしながら送ることで、経路上のルータを順番に発見しています。

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. セグメント
  2. パケット
  3. フレーム

最近更新/作成されたページ