IPv4 ヘッダーを理解する (ゲスト ブロガー Gajanan Parwar)

    本ページは英語ドキュメントを翻訳したものです。

     


     

    IPv4 ヘッダーを理解する

    Gajanan はネットワーク サービス配信コンサルタントで、2017 年のうちに CCIE Routing and Switching 認定を取得するという目標を掲げています。彼は、2011 年に CCNA Routing and Switching 認定、2012 年に CCNA Voice 認定、および 2014 年に CCNP SWITCH 試験を受け、好スタートを切っています。このゲスト ブログで、Gajanan は IPv4 ヘッダーについてわかりやすく説明してくれます。

     

    TCP/IP プロトコル スタックは、数百万台のコンピュータを接続するために使用される通信言語で、文字通り世界中に普及しています。IP はスタックの重要なプロトコルの 1 つです。この記事では、ルータなどの中間 IP デバイスがルーティングや受信した IP パケットの処理に使用する IP ヘッダー フィールドについて説明します。また、IP ヘッダーの各フィールドの機能について調べ、パケット キャプチャを実行し、IP プロトコルを使用して各種トラフィックを送信するときにこれらのフィールドがどのように変わるか確認していきます。それでは始めましょう。


    IP プロトコルの概要
    IP プロトコルはネットワークでパケットの移動を行います。また、すべての上位層プロトコル(TCP や UDP など)は IP を使用してそれらのデータを宛先に送信します。


    トポロジ:


    Topology.png

     

    注:IP パケットをキャプチャするために、R1 と R2 の間に Wireshark をインストールしています。

     

     

    R1 から R2 ループバック インターフェイス(2.2.2.2)を ping し、Wireshark を使用して IP パケットをキャプチャしましょう。PING プログラムでは ICMP プロトコルを使用している点に注意してください。ICMP プロトコルは IP プロトコルの一部です。

     

    キャプチャされた IP パケット:
    IP Packet Captured.png

     

    IP ヘッダーの標準サイズは、オプションが使用されない限り 20 バイトです(オプション フィールドはストリクト送信元ルーティングまたはルーズ送信元ルーティングに関連します)。

     

    これらすべてのフィールドについて説明します。

     

    Version 4.png

    このフィールドは、パケットの IP バージョンを示します。IPv4 パケットの場合はバイナリ 0100(0+4+0+0)、IPv6 パケットの場合は 0110(0+4+2+0)に設定される 4 つ目のビット値です。


    Header Length 20 bytes.png

    これは IP ヘッダーの長さを指定する 4 つ目のビット フィールドです。この例では、オプション フィールドを使用していないため、最小値の 20 バイトになります。この値の計算方法は、4 ビット = 0 1 0 1 = (0+4+0+1) = 5 X 4 バイト(32 ビット ヘッダー長) = 20 バイトです。オプション フィールドを含む最大値は 60 バイト(4 ビット = 1 1 1 1 = (8+4+2+1) = 15 X 4 バイト(32 ビット ヘッダー長) = 60 バイト)です。拡張 ping で(パケットがルートで宛先までに通過する必要のある正確なパスを指定するために使用される)ストリクト送信元ルーティングを使用して、ヘッダー長をチェックします。ストリクト ルーティングを使用する拡張 ping: 

    R1 Ping.png


    パケット キャプチャにはヘッダー長が示され、現在はオプション フィールドを含め 28 バイトになっています。

    8 バイトのフィールドが、ストリクト ルーティングが使用されている元の IP ヘッダー(20 バイト)に追加されています。

    Internet Protocol version 4.png

    Differentieated services field.png

    これはパケットのマーキングに使用される 8 ビット フィールドで、マーキングに基づいてパケットを処理するために使用できるルータを示します。6 ビット値(DS5 ~ DS0):DSCP は、ルータが転送されるのを待機している間にパケットをキュー登録する方法を定義します。2 ビット値:ECN は、パケットをドロップすることなく、ネットワーク輻輳に関するエンドツーエンド通知を行うことができます。


    このフィールドのすべてのビットを 0 に設定すると、標準サービスを使用していることを示します。


    Differentieated services field 0x00.png

     

    DSCP Expedited Forwarding(101110) = 128+32+16+8 = 184 で拡張 ping をもう一度使用しましょう。


    R1 Ping 2.png

     

    パケット キャプチャでは DSCP フィールドに 101110 のバイナリ値が示されます。

     

    10.png

     

    11.png

    この 16 ビット フィールドは、ヘッダーとデータの長さを含む IP データグラムのトータル長を示します。パケットで送信されるデータ量を把握する場合は、トータル長から(前に説明した)ヘッダーの長さを差し引くだけでこの情報を得ることができます。このフィールドは送信するデータに応じて変わり、最大値は 65535 バイトです(値 65535 が MTU に一致しない場合は、フラグメント化されます)。


    サイズが 200 の拡張 ping を使用しましょう。

    12.png

    パケット キャプチャにはトータル長の値 200 が示されます。 

    この例では、データ サイズは次のように計算されました。

    データ サイズ(バイト単位)= トータル長 - ヘッダー長(バイト数)

                          = 200-20

                          = 180(これには 172 バイトのデータ + 8 バイトの ICMP ヘッダーが含まれる)

    13.png

    14.png

    これは、IP パケットを一意に識別するために使用される 16 ビットのビット フィールドです。パケットがフラグメント化されている場合、この値を指定すると、受信者はパケットを再度リアセンブルできます。サイズが 3000 バイトのパケットを送信しましょう(MTU の現在の値は 1500 バイトであるため、このパケットはフラグメント化されます)。基本的に、Ping プログラムはデフォルトで 5 つの ICMP エコー要求を送信します。

     

    15.png

     

    1 つ目の ICMP パケットは、3 つのチャンク(1500+1500+40)にフラグメント化され、各チャンクは同じ ID 番号を使用します。1 つ目の ICMP エコー要求では 0x001e(30)、2 つ目の ICMP エコー要求では 0x001f(31)になります。

     

    1 つ目の ICMP エコー要求


    image11.png

    17.png 18.png 19.png

     

    2 つ目の ICMP エコー要求


    20.png

    21.png 22.png 23.png


    24.png

    この 3 ビット フラグ フィールドは、フラグメンテーションで使用されます。通常、使用しない場合は 0 に設定されます。


    image20.png


    1 つ目のビットは予約済みで、0 に設定されます。2 つ目のビットは DF(Don’t Fragment)ビットと呼ばれ、このパケットがフラグメント化されないことを示します。

     

    サイズが 3000 バイトで、DF ビットが 1 に設定された拡張 ping を使用しましょう。


    25.png


    結果:パケットは、MTU に適合できないないためドロップされており、DF ビットが 1 に設定されているためフラグメント化されていません。


    キャプチャされたドロップには、DF ビットが 1 に設定されていることが示されます。


    26.png

     

    3 つ目のビットは MF(More Fragments)ビットと呼ばれ、最後のパケットを除くフラグメント化されたすべてのパケットに設定されます。


    ここで最後の例で使用されている ICMP エコー要求 1 パケットのパケット キャプチャを使用できます。


    MF
    ビットが 1 に設定された 1 つ目の ICMP パケットの最初の 2 つのチャンク


    27.png

    28.png

     

    ICMP エコー要求 1 の 3 つ目のチャンクが通常どおり送信されています。

    0 に設定された MF は、フラグメント化されたパケットの最後のチャンクであることを受信者に示します。


    29.png

    30.png

    この 13 ビット フィールドは、パケットのフラグメンテーションが発生するときに使用されます。このフィールドは、このフラグメントのデータの移動先となるメッセージ全体における位置を示します。

    フラグメント化されている、サイズが 3000 バイトの ICMP エコー要求 1 の前の例を使用して、3 つのチャンクとフラグメンテーション後の開始位置をチェックしましょう。

     

    1 つ目のチャンクの開始:0 


    31.png

     

    2 つ目のチャンク – 中間:1480

     

    32.png

    3 つ目のチャンク – 終了:2960


    33.png

     

    これは 8 ビットの値で、パケットの有効期間を制限します。この値は送信者が設定し(255 など)、宛先までのパスの各ルータでデクリメントされます。この値が 0 に達すると、パケットはドロップされ、送信者には ICMP メッセージで通知されます。これにより、パケットがルーティング ループに永遠に陥ることはなくなります。


    34.png


    この 8 ビットの値は、IP パケットにカプセル化されている上位層プロトコルを示します。このフィールドは、受信者がトラフィックが属する上位層を特定するために使用されます。この例では、ICMP になります。番号 11 = ICMP、2 = IGMP、6 = TCP、17 = UDP


    image32.png


    この 16 ビット フィールドの値は、IP ヘッダーでのみ計算されます。送信者は IP ヘッダーのビットに基づいて値を計算し、それをチェックサム フィールドに格納します。パケットが受信側で受信されると、もう一度計算が実行されます。結果が一致しない場合、IP はパケットを廃棄します。エラー メッセージは生成されません。IP は信頼できないサービスであるため、足りないデータグラムを検出して再送信するのは上位層が行います。

     

    ICMP エコー要求


    image34.png

     

    ICMP エコー応答

     

    image36.png

    image35.png

    この 32 ビット値は、送信元 IP アドレスを識別するために使用されます。この例では、R1 発信インターフェイスになります。

     

    image33.png

    この 32 ビット値は、宛先 IP アドレスを識別するために使用されます。この例では、R2 ループバック インターフェイスになります。


    オプション フィールド

    このオプション フィールドは、ほとんど使用されません。また、すべてのデバイスがすべてのオプションをサポートしているわけではありません。

    オプション フィールドを使用すると、前の例で確認したように、ヘッダー長の値が増えます。

    オプション フィールドには、レコード ルート、ストリクト送信元ルーティング、ルーズ送信元ルーティングなどがあります。

     

    image38.png

     

    まとめ:

    この記事では、特定のタイプのトラフィックを送信する場合に、これらのフィールドがどのように変わるか説明しました。この記事が IPv4 ヘッダーの全体図を把握する際にお役に立つことを願います。

     

    このゲスト ブログは、Gajanan Parwar が提供しています。

    Photo+1.jpg



     

    「これはすばらしい人々の集まる優れたコミュニティです。このグループではお互いに協力して問題を解決し、ネットワーキングの概念に関する疑問を明らかにしていきます。ネットワークの概念を理解し、実際に体験してみてください。試験で取り上げられる各トピックについてしっかり基礎固めをしてから認定試験に臨んでください。

    CLNBanner