🌐

IPv4のめも

に公開

IPv4について

インターネット上で通信するためのプロトコル。version4は32bitのアドレス空間をもっていて、最大42億の機器を識別可能。
パケット通信方式。

パケット通信

データをひとかたまりに包装して送信する。コネクションを継続するわけではない。通信ラインを確立して通信するのではなく、包装したデータを輸送システム(ネットインフラ)によって目的住所まで運ぶ。

binary stream

バイナリストリームについてです。
はじめにIPv4ヘッダが送信され、宛先が指定。次にそれぞれプロトコルごとのデータが続きます。

高レイヤからみたかんじ

IPv4 header TrancePort header Data

1パケットのバイナリストリーム構成
最大65535byte(トランスポートの種類によりこれ以下になることもある)

IPv4 header

物理層で活躍するデータがたくさん入ってるで!

フィールド サイズ (ビット) 説明
バージョン (Version) 4 IPのバージョン番号(IPv4では通常0100)
IHL (Header Length) 4 ヘッダの長さ(32ビットワード単位、通常は5)
DSCP/ECN 8 サービス種別/混雑通知
全体長 (Total Length) 16 パケット全体のサイズ(バイト単位)
識別子 (Identification) 16 フラグメント識別子
フラグ (Flags) 3 フラグ(DF、MFなど)
フラグメントオフセット 13 フラグメントのオフセット
TTL (Time to Live) 8 パケットの生存時間
プロトコル (Protocol) 8 トランスポート層プロトコル(例:TCPは6)
ヘッダチェックサム 16 ヘッダのエラーチェック
送信元IPアドレス 32 パケットの送信元IPv4アドレス
宛先IPアドレス 32 パケットの宛先IPv4アドレス
オプション (Options) 可変 オプションフィールド(ない場合は0バイト)
  • バージョン (Version)

    • 4ビット
    • IPプロトコルのバージョンを示す。IPv4では 0100
    • : 0100(IPv4)
    • 権限: 輸送中に変更不可
  • IHL (Internet Header Length)

    • 4ビット
    • IPv4ヘッダの長さを32ビットワード単位で示す。通常は 5(20バイト)。
    • : 0101(20バイトのヘッダ)
    • 権限: 輸送中に変更不可
  • DSCP/ECN (Differentiated Services Code Point / Explicit Congestion Notification)

    • 8ビット
    • パケットの優先度(DSCP)やネットワークの混雑状態(ECN)を示す。
    • : 00000000(通常のベストエフォートサービス)、101110(高優先度)
    • 権限: 輸送中に変更可(特にDSCP部分はQoSのために変更されることがある)
  • 全体長 (Total Length)

    • 16ビット
    • IPv4パケット全体の長さをバイト単位で示す。最小20バイトから最大65,535バイト。
    • : 0000000000010100(20バイト)、0000001111101000(2000バイト)
    • 権限: 輸送中に変更不可(ただし、パケットのフラグメント処理の際にフラグメントされた各パケットでこの値は変わる)
  • 識別子 (Identification)

    • 16ビット
    • パケットのフラグメンテーション時に、元のパケットを識別するために使用される識別子。
    • : 0101010101010101(識別子として0x5555)
    • 権限: 輸送中に変更不可(フラグメント時に使用されるが、通常ルーターはこれを変更しない)
  • フラグ (Flags)

    • 3ビット
    • パケットのフラグメンテーションに関連する制御フラグ。例: DF(Don't Fragment)、MF(More Fragments)。
    • : 010(Don't Fragmentフラグがセットされた状態)
    • 権限: 輸送中に変更不可(ルーターは通常、フラグを尊重する)
  • フラグメントオフセット (Fragment Offset)

    • 13ビット
    • フラグメントが元のパケットのどの部分に対応するかを示すオフセット値。
    • : 0000000000000(フラグメントなし、オフセットなし)、0000000100000(64バイトオフセット)
    • 権限: 輸送中に変更可(パケットがフラグメントされるときに設定される)
  • TTL (Time to Live)

    • 8ビット
    • パケットがネットワークを通過できる最大ホップ数。通常、ルーターごとに1ずつ減少し、0になるとパケットは破棄される。
    • : 00110000(TTL=48)、00000010(TTL=2)
    • 権限: 輸送中に変更可(ルーターはTTLを1減少させる)
  • プロトコル (Protocol)

    • 8ビット
    • 次の上位層のプロトコルを示す。例: TCPは 6、UDPは 17
    • : 00000110(TCP)、00010001(UDP)
    • 権限: 輸送中に変更不可
  • ヘッダチェックサム (Header Checksum)

    • 16ビット
    • IPv4ヘッダのエラーチェック用のチェックサム。パケットが正常に届いたかを確認する。
    • : 1101011001011101(0xD65D、計算されたチェックサム)
    • 権限: 輸送中に変更可(ルーターがTTLやその他のフィールドを変更した場合、再計算して更新する必要がある)
  • 送信元IPアドレス (Source IP Address)

    • 32ビット
    • パケットを送信したデバイスのIPv4アドレス。
    • : 11000000.10101000.00000001.00000001(192.168.1.1)
    • 権限: 輸送中に変更不可
  • 宛先IPアドレス (Destination IP Address)

    • 32ビット
    • パケットの宛先となるデバイスのIPv4アドレス。
    • : 11000000.10101000.00000001.00000010(192.168.1.2)
    • 権限: 輸送中に変更不可(ただし、NAT環境ではルーターがこれを変更することがある)
  • オプション (Options)

    • 可変長
    • 特別なルーティングやセキュリティ機能のために使用されるフィールド。オプションがない場合はこのフィールドは存在しない。
    • : オプションなしの場合はフィールド自体が存在しない。オプションがある場合は、00000101... などの追加バイナリデータが入る。
    • 権限: 輸送中に変更不可(通常は変更しないが、特定のルーティングオプションの場合、特定のルーターが操作することもある)

TrancePort header

トランスポート層(OSたちが頑張るところ)で活躍するデータが入ってるで!

1. UDP(User Datagram Protocol)

  • 概要:

    • UDPは、軽量で高速なトランスポート層プロトコルで、コネクションレス型のデータ転送を行います。データの信頼性や順序制御を提供せず、リアルタイムアプリケーションやストリーミングに適しています。
  • プロトコル番号: 17

  • :

    フィールド サイズ (ビット) 説明
    送信元ポート (Source Port) 16 送信元のアプリケーションを識別するポート番号
    宛先ポート (Destination Port) 16 宛先のアプリケーションを識別するポート番号
    長さ (Length) 16 UDPパケット全体の長さ(ヘッダ + データ)
    チェックサム (Checksum) 16 UDPパケットのエラーチェック(任意、0の場合は無視)
  • フィールド説明:

    • 送信元ポート (Source Port): データを送信するアプリケーションのポート番号を示します。これにより、受信側はどのアプリケーションからデータが来たかを識別できます。
    • 宛先ポート (Destination Port): データが送信される宛先のアプリケーションを識別するポート番号を示します。
    • 長さ (Length): UDPパケット全体(ヘッダとデータ)の長さをバイト単位で示します。
    • チェックサム (Checksum): UDPパケットのエラーチェック用フィールドです。受信時にデータの整合性を確認しますが、オプションとして使用されない場合もあります。

2. TCP(Transmission Control Protocol)

  • 概要:

    • TCPは、信頼性の高いデータ転送を提供するコネクション型プロトコルで、データの順序制御、再送、フロー制御などを行います。多くのインターネットアプリケーション(例: HTTP、FTP)で使用されます。
  • プロトコル番号: 6

  • :

    フィールド サイズ (ビット) 説明
    送信元ポート (Source Port) 16 送信元のアプリケーションを識別するポート番号
    宛先ポート (Destination Port) 16 宛先のアプリケーションを識別するポート番号
    シーケンス番号 (Sequence Number) 32 データの順序を管理するための番号
    ACK番号 (Acknowledgment Number) 32 受信確認番号(受信側が次に受け取りたいデータのシーケンス番号)
    データオフセット (Data Offset) 4 TCPヘッダの長さを32ビットワード単位で示す
    予約 (Reserved) 3 将来の使用のために予約されているビット、常に0
    フラグ (Flags) 9 制御フラグ(SYN、ACK、FIN、RSTなど)
    ウィンドウサイズ (Window Size) 16 受信側が受け取れるデータのバイト数(フロー制御)
    チェックサム (Checksum) 16 TCPセグメントのエラーチェック
    緊急ポインタ (Urgent Pointer) 16 緊急データの位置を示す(緊急フラグがセットされている場合)
    オプション (Options) 可変 オプションデータ(最大40バイト)
  • フィールド説明:

    • 送信元ポート (Source Port): データを送信するアプリケーションのポート番号を示します。
    • 宛先ポート (Destination Port): データが送信される宛先のアプリケーションを識別するポート番号を示します。
    • シーケンス番号 (Sequence Number): TCPセグメント内のデータの順序を管理するための番号です。これにより、受信側でデータの正しい順序が確認されます。
    • ACK番号 (Acknowledgment Number): 受信側が次に期待しているデータのシーケンス番号を示します。これにより、送信側はどのデータが受信されたかを確認できます。
    • データオフセット (Data Offset): TCPヘッダの長さを32ビットワード単位で示します。
    • 予約 (Reserved): 将来の使用のために予約されているビットで、常に0です。
    • フラグ (Flags): コネクションの確立、終了、データの受領確認などを示す制御フラグです。例えば、SYNフラグはコネクションの確立、FINフラグは終了を示します。
    • ウィンドウサイズ (Window Size): フロー制御のために、受信側が受け取れるデータのバイト数を示します。
    • チェックサム (Checksum): TCPセグメントのエラーチェック用フィールドです。
    • 緊急ポインタ (Urgent Pointer): 緊急フラグがセットされた場合、緊急データの位置を示します。
    • オプション (Options): 最大40バイトまでのオプションデータを格納するフィールドです。例えば、ウィンドウスケーリングやタイムスタンプオプションなどがあります。

3. QUIC(Quick UDP Internet Connections)

  • 概要:

    • QUICは、UDP上に構築されたトランスポートプロトコルで、HTTP/3の基盤となっています。高速な接続確立、マルチプレキシング、セキュリティ機能を統合しており、主にWebアプリケーションでの使用を目的としています。
  • プロトコル番号: ルーターのNATやファイアウォールで異なる扱いをされることが多いため、明確な固定番号はありませんが、一般的にUDP(17番)を使用します。

  • :

    フィールド サイズ (ビット) 説明
    フレームタイプ (Frame Type) 8 フレームの種類を識別する
    コネクションID (Connection ID) 64 コネクションを識別するためのID
    パケット番号 (Packet Number) 16-32 パケットの順序を管理するための番号
    ペイロード長 (Payload Length) 可変 ペイロード(データ部分)の長さ
    認証タグ (Authentication Tag) 128 パケットの整合性と認証を確保するタグ
  • フィールド説明:

    • フレームタイプ (Frame Type): QUICパケットの中に含まれるフレームの種類を識別するためのフィールドです。フレームには、ストリームデータ、ACK、パスチャレンジなどが含まれます。
    • コネクションID (Connection ID): 各QUICコネクションを識別するための64ビットのIDです。これにより、サーバーが複数のコネクションを管理できます。
    • パケット番号 (Packet Number): パケットの順序を管理するための番号で、受信側がデータを正しく再構成するために使用されます。ビット長は16ビットから32ビットまで可変です。
    • ペイロード長 (Payload Length): パケットに含まれるペイロード(データ部分)の長さを示します。
    • 認証タグ (Authentication Tag): パケットの整合性と認証を確保するための128ビットのタグです。これにより、改ざんの検出が可能です。

4. ICMP(Internet Control Message Protocol)

  • 概要:

    • ICMPは、ネットワーク診断やエラーメッセージの通知を行うために使用されるプロトコルです。IPの一部として動作し、エラーメッセージや診断情報(例: pingコマンド)を提供します。
  • プロトコル番号: 1

  • :

    フィールド サイズ (ビット) 説明
    タイプ (Type) 8 メッセージの種類を識別する(例: エコーリクエスト、エコー応答)
    コード (Code) 8 メッセージの詳細を示す補助コード
    チェックサム (Checksum) 16 ICMPメッセージのエラーチェック
    メッセージボディ (Message Body) 可変 メッセージに応じたデータ(例: エコーリクエストのデータなど)
  • フィールド説明:

    • タイプ (Type): ICMPメッセージの種類を識別するためのフィールドです。たとえば、エコーリクエスト(ping)はタイプ8、エコー応答はタイプ0です。
    • コード (Code): タイプフィールドと組み合わせて、ICMPメッセージの詳細を示す補助コードです。エラーメッセージの詳細や理由を示します。
    • チェックサム (Checksum): ICMPメッセージ全体のエラーチェックを行うためのフィールドです。
    • メッセージボディ (Message Body): タイプフィールドに応じたデータを含む可変長フィールドです。エコーリクエスト/応答の場合、送信元のデータが含まれます。

Discussion