Infra Engineer

【独学CCNA】026.IPv4ヘッダその①
2021.09.29
Lv1

【独学CCNA】026.IPv4ヘッダその①

ゼロからのCCNA独学講座

本連載では、シスコ技術者認定資格であるCCNA合格を目指して、試験範囲の解説や問題演習などを扱っていきます!
今回は、IPv4のヘッダについて説明していきます。

  • IPv4とは?
  • IPv4ヘッダ
  • まとめ
  • 確認問題
    • IPv4をあらためて

      これまで説明してきた通り、IPv4レイヤ3ネットワーク層で動作するプロトコルです。
      IP(Internet Protocol)は、レイヤ3のプロトコルとして離れたネットワーク内の端末同士での通信について取り決めをしています。
      IPの重要な役割として、前回までの記事で説明してきたIPアドレスの定義、パケットの転送(ルーティング)、IPフラグメンテーションなどが挙げられます。
      それでは、今回次回と2回に渡って、IPv4がパケットに付与するヘッダ、そこに含まれる各種情報について見ていきましょう。

      IPv4ヘッダ

      ネットワーク層のPDUをパケットと呼びます。1つ上の階層であるトランスポート層から降りてきたデータにレイヤ3プロトコルのヘッダをつけたものがパケットです。
      特にIPヘッダをつけたパケットのことをIPパケットと言うこともあります。
      IPv4のヘッダには、様々な情報が含まれています。IPv4ヘッダに含まれる情報は、レイヤ3やIPv4について学ぶ上で非常に重要になりますので、内容を確認していきましょう。
      なお、IPv4ヘッダが持つ情報については、RFC791で定義されています。

      IPv4ヘッダのフィールドは以下のようになっています。

      それでは、1つずつ内容を確認していきましょう。


      バージョン

      バージョンは、ほぼ名前のまま、IPのバージョンを表すフィールドです。
      IPv4の場合、4という値がセットされます。


      ヘッダ長

      ヘッダ長は、IPv4ヘッダそのものの大きさを表すフィールドです。IPパケットを受信した際、受信側ではこのフィールドを確認することで、パケットのどこまでがIPv4ヘッダなのかを判断することが出来ます。
      のちほど紹介しますが、IPv4ヘッダにはオプションとパディングという可変長のフィールドが存在するため、大きさが一定ではありません。なので、ヘッダ長フィールドを使ってIPv4ヘッダの大きさを受信側に通知する必要があるわけです。
      ヘッダ長にはヘッダの大きさを4byte単位に換算した値が入ります。通常のIPv4ヘッダであれば20byteになるので、その場合は5という値がセットされます。


      ToS

      ToS(Type of Service)は、パケットの優先度を示すフィールドです。パケットの優先制御や帯域制御、輻輳制御などで用いられています。
      元々は先頭3bitでパケットを転送する際の優先度を8段階で示し、次の3bitが通信の種類、最後の2bitは未使用としていました。この上位3bitをIP Precedence(IPプレシデンス値)といいます。
      現在ではDSCP(Differentiated Services Code Points)として再定義されています。元々ToSが使っていた8bitのうち実際に使われていた先頭6bitをDSCPフィールドとして、未定義だった2bitをECN(Explicit Congestion Notification)フィールドとして再定義しました。
      DSCPフィールドはIP Precedenceと同様に優先制御や帯域制御などに用いられ、ECNフィールドはネットワークの輻輳を通知するために用いられています。
      また、再定義はされましたがDSCPフィールドの上位3bitはIP Precedenceと互換性があるため、IP Precedenceを使用していても問題ないようになっています。


      パケット長

      パケット長は、IPヘッダとペイロードを足したパケット全体の大きさを示すフィールドです。
      あくまでIPパケットの大きさですので、レイヤ2で付与されるEthernetヘッダなどは含まれません。


      識別子

      識別子IPフラグメンテーションで用いられるフィールドです。パケットが宛先まで到達する途中でフラグメントしなければならなくなった際、フラグメントしたそれぞれのパケットでは、同じ識別子をコピーして保持しておきます。バラバラにしたパケットは宛先に到達した際、再構成します。識別子フィールドを用いることで、同じ識別子を持つパケットをフラグメント前の状態に再構成することができます。


      フラグ

      フラグもIPフラグメンテーションで用いられるフィールドです。3bitのうち、1bit目は特に使われておらず、2,3bit目が特別なフラグになっています。
      2bit目は、DF(Don’t Fragment)ビットといい、IPパケットをフラグメントさせない機能を持ちます。DFビットに1がセットされていた場合、そのパケットはフラグメントしてはいけないパケットだということになります。
      3bit目は、MF(More Fragments)ビットといい、フラグメントされたパケットがこのパケットのあとに続くかどうかを表す機能を持ちます。1ならこのあとにフラグメントされたパケットが続きます。
      フラグメントはパケットの再構成に複雑な処理が必要になるため、端末に負担をかけてしまいます。なので、DFビットを用いることでフラグメントをさせずに通信することも多くなっています。この場合はトランスポート層やアプリケーション層など、IPよりも上位のプロトコルでデータサイズを調整する場合が多いです。


      フラグメントオフセット

      フラグメントオフセットもIPフラグメンテーションで用いられるフィールドです。
      フラグメントした際、その1パケットが分割される前のオリジナルパケットのどの位置にあったかを表す値が入っています。この値を用いることで、フラグメントされたパケットを受信した端末はIPパケットを正しい順序でもとに戻す事ができるわけです。一番先頭のパケットでは0が、それ以外のパケットはそれぞれの位置が入ります。

      識別子・フラグ・フラグメントオフセットの3つはIPフラグメンテーションで用いられるフィールドです。
      以下の図のように、フラグメントの際に適切あ値がセットされます。

      長くなりましたので一旦ここまで。
      残りのフィールドは次の記事で解説しましょう。

      まとめ

      • IPv4ヘッダには多数のフィールドが定義されている
      • それぞれのフィールドに役割があり、値が定義されている
      • 各フィールドが持つ値を見ることで、パケットの状態を調べることができる

      確認問題

      以下の選択肢から正しいものを選んでください。

      1. IPv4ヘッダはネットワーク層のPDUに対して付与される
      2. パケット長は、IPヘッダの大きさを表すフィールドである
      3. バージョンは、ネットワーク層のプロトコルを示す番号がセットされるフィールドである
      4. IPフラグメンテーションは、識別子・フラグ・フラグメントオフセットという3つのフィールドを用いている
      解答・解説
      答え:4

      1) IPv4ヘッダは、上位層であるトランスポート層のPDUに対して付与されます。
      2) パケット長はIPパケット全体の大きさを表すフィールドです。
      3) バージョンはIPのバージョンを示すフィールドです。ネットワーク層のプロトコル番号を示すフィールドは、Ethernetヘッダのタイプフィールドです。
      4) 正解です。IPフラグメンテーションでは、IPv4ヘッダ内の識別子・フラグ・フラグメントオフセットを用いています。


      今回はIPv4ヘッダの各フィールドについて解説しました。
      次回も引き続き、残りのフィールドについて解説していきます。