目次
概要
IP(Internet Protocol)とは、データ転送プロトコルです。IPによって、あるホストから別のホストまで物理的にどんなに遠くはなれていてもデータを送り届けることができます。IPのデータ転送の仕組みとそれを実現するためのIPv4ヘッダフォーマットについて解説します。
IPとは
IP(Internet Protocol)はTCP/IPの名前に含まれているように、TCP/IPのさまざまなプロトコルの中でもとても重要なプロトコルです。IPv4の基本的な仕様はRFC791で定義されています。
まずは、IPの役割を明確にしておきましょう。
IPの役割は、「 ネットワーク上のあるホストから別のホストへのデータを転送する 」ことです。このことを「エンドツーエンド通信」とも表現します。
「ホスト」とは、TCP/IPを利用している機器全般を指します。具体的にはPC/スマートフォン/サーバやルータ/レイヤ3スイッチなどのネットワーク機器が「ホスト」です。送信元ホストと宛先ホストは、同じネットワーク上でも異なるネットワークでもどちらでもよいです。このWebページをご覧いただいているということは、まさにIPでデータを転送したことになります。
IPでのデータの転送
IPでデータを転送するためには、転送したいデータにIPヘッダを付加して、「IPパケット」とします。そして、IPパケットをネットワークに送り出せばいいだけです。
宛先が異なるネットワークに接続している場合は、間にルータやレイヤ3スイッチが存在します。送信元ホストから送信されたIPパケットは、経路上のルータが転送して最終的な宛先ホストまで送り届けられます。ルータがIPパケットを転送することを指して「ルーティング」と呼びます。
でも、IPだけではダメ
ただし、IPだけで目的の宛先までデータが届くわけではありません。IPには「0」「1」のデータを電気信号や電波などの物理的な信号に変換するような機能はないからです。このことをきちんと理解しておきましょう。
IPパケットをネットワーク上に送り出すためには、さらにイーサネットやWi-Fiなどのネットワークインタフェース層のプロトコルが必要です。イーサネット/Wi-Fiは、「0」「1」のデータを電気信号や電波といった物理的な信号として送り届けるためのプロトコルです。
IPパケットをさらにイーサネット/Wi-Fiなどのネットワークインタフェース層プロトコルのヘッダでカプセル化し物理的な信号に変換して、ネットワーク上に送り出します。
関連記事
データを物理信号として送り届けるイーサネットおよび無線LANについて、以下のページからさらに詳しい解説記事のリンクがあります。
IPにとってのデータは「TCP」や「UDP」などのトランスポート層プロトコルであることがほとんどです。そして、TCPやUDPにとってのデータがHTTPなどのアプリケーションプロトコルです。
関連記事
なお、IPにはIPv4からIPv6へ移行しようとしています。IPv4でもIPv6でも「エンドツーエンドの通信を行う」という基本の役割は共通です。IPv6を理解するためにも、IPv4の役割や仕組みを理解しておくことがとても重要です。
関連記事
IPでのデータの転送のイメージ
IPヘッダでカプセル化してデータを転送することは、宛先と送信元の間で仮想的なトンネル(通信経路)を作成するイメージです。ネットワーク、特にインターネット上には膨大な数のホストが存在します。でも、関係のないところにはデータは転送されていきません。宛先IPアドレスのホストにだけ転送されるからです。そうなるように、ルータ/レイヤ3スイッチがルーティングします。
ただ、IPの仮想的なトンネルは事前に作っているわけではありません。経路上のルータやレイヤ3スイッチがIPヘッダに基づいて転送した結果として作成されます。このようなIPの特徴がコネクションレス型転送プロトコルです。途中の経路は固定的なものではなく、変わる可能性があります。
こうしたIPで作る仮想的なトンネルは単方向です。データの行きと返りで、別々のIPによるトンネルができます。
IPv4ヘッダフォーマット
IPでデータを転送するために付加するIPv4ヘッダのフォーマットは以下のとおりです。
バージョン
「バージョン」にはそのものずばりのIPのバージョンが入ってきます。現在のIPのバージョンは「4」です。そして、IPの次のバージョンは「6」となります。バージョン4の次が5を飛ばして6になっています。バージョン5はすでに実験用に使われているので、「4」の次は「6」となっています。
ヘッダ長
ヘッダ長にはIPヘッダの長さが入ります。ただし実際の長さが入ってくるのではなく、4バイト単位の長さです。つまり標準ではIPヘッダは20バイトですので、ヘッダ長は「5」です。
サービスタイプ
サービスタイプはQoS(Quality of Service)制御で利用します。QoSとは、主にルータやスイッチなどのネットワーク機器でデータを転送する際に優先度に応じた転送を行う制御です。サービスタイプでデータを優先度に応じてIPパケットをグループ化することができます。
関連記事
パケット長
パケット長ではヘッダを含めたIPパケット全体の長さが入ってきます。生のデータの長さを知りたいときには、パケット長-ヘッダ長でわかります。
識別番号/フラグ/フラグメントオフセット
「識別番号」「フラグ」「フラグメントオフセット」はデータの分割と組み立てに関わってくる情報です。
ただし、現在ではIPでのデータの分割や組み立てを行うことはあまりありません。IPの上位のプロトコルであるTCPでの分割し、IPでの分割が発生しないようにすることが多くなっています。
TTL(Time To Live)
「TTL」とは Time To Live の略でパケットの生存時間を表していす。実際には「パケットが何台のルータを経由することができるか?」ということを表しています。TTLは、ルータのルーティングテーブルに不整合があり、IPパケットがネットワーク内を延々とループしてしまうことを防ぐためのものです。
ルータを経由するごとにTTLが-1され、TTLが0になるとルータはそのIPパケットを破棄します。
プロトコル番号
「プロトコル番号」とは上位のプロトコルが何かを識別するための番号です。IPの上位層のトランスポート層にはTCPとUDPの2つのプロトコルがありますが、そのどちらにデータを渡せばいいのかということをプロトコル番号で識別します。また、インターネット層に含まれるICMPやOSPF、IGRP、EIGRPといったプロトコルもIPヘッダを付加してIPパケットとして運ばれます。つまり、IPで運ぶデータがどんなプロトコルのデータであるかを識別するのがプロトコル番号です。
主なプロトコル番号は次の表の通りです。
プロトコル番号 | プロトコル |
---|---|
6 | TCP |
17 | UDP |
1 | ICMP |
89 | OSPF |
88 | EIGRP |
なお、プロトコル番号はIPヘッダの次のヘッダを表しているとも考えられます。データにIPヘッダを付けてIPパケットとしています。そして、IPにとってのデータにはさまざまなプロトコルのヘッダが付加されています。プロトコル番号を見れば、IPヘッダの次のヘッダがどんなプロトコルのものであるかがわかります。
ヘッダチェックサム
ヘッダチェックサムは、IPヘッダにエラーがないかどうかをチェックするためのフィールドです。
送信元IPアドレス/宛先IPアドレス
このフィールドには、送信元と宛先IPアドレスが入ります。送信元IPアドレスは必ずユニキャストアドレスになります。ブロードキャストアドレスやマルチキャストアドレスが送信元IPアドレスフィールドに入ることはありません。
関連記事
ユニキャスト/ブロードキャスト/マルチキャストについて、以下の記事もあわせてご覧ください。
オプション/パディング
オプションフィールドによって明示的にどの経路を通るのかを指定することができます。これをソースルーティングと呼んでいます。ただし、セキュリティ上インターネット上のルータではソースルーティングを指定しているパケットは捨てられてしまう可能性があります。また、ほかにも経路上のタイムスタンプを取得するなどの使い方があります。オプションはIPの実験を行うためにさまざまな用途で利用されていましたが、現在ではほとんど使うことがなく、IPヘッダのオプションはないものと考えて差し支えありません。
また、パディングはIPヘッダのサイズを調整するためのものです。オプションが付加された場合、パディングを付加してIPヘッダのサイズが4バイト(32ビット)の倍数になるようにします。オプションを付加することはほとんどないので、パディングが付加されることもまずありません。
IPヘッダの中で大事なのはIPアドレス
エンドツーエンド通信を行うために、IPヘッダ内で一番重要な情報は宛先/送信元IPアドレスです。TCP/IPで通信するときには、IPアドレスを必ず指定していることを忘れないでください。
関連記事
ただし、アプリケーションを利用するユーザには、IPアドレスを指定していることを意識させないようにしています。IPアドレスは数字の羅列なので、ユーザにとってはわかりづらいためです。Webブラウザやメールソフトなどでは、ユーザは宛先IPアドレスを指定しなくてもよいようにしています。ですが、必ずIPアドレスが必要です。
ユーザにIPアドレスを意識させませんが、IPアドレスを指定できるようにするためにDNSを利用します。DNSもTCP/IPの通信を支えるとても重要なプロトコルです。
まとめ
ポイント
- IPによってあるホストから別のホストまでデータを転送できます。転送したいデータにIPヘッダを付加した「IPパケット」をネットワーク上に送り出しせばOKです。
- ただ、IPだけではダメです。ネットワーク上に送り出す、すなわち、「0」「1」を物理的な信号とするためにイーサネット/Wi-Fiなどと組み合わせます。
- IPヘッダの中で最も重要な情報は、IPアドレスです。IPでのデータの転送には必ずIPアドレスが必要です。
TCP/IP
- TCP/IPの階層
- IP(Internet Protocol) ~データを送り届ける~
- ICMP ~きちんとIPで転送できますか?~
- Ping ~きちんとデータは届きますか?~
- Windows OSのPingコマンド
- トレースルート ~データはどのルータを通っていますか?~
- tracertコマンド(Windows OS)
- ICMPリダイレクト
- トラブルはどこ? ~Pingとトレースルート~
- ARP ~IPアドレスとMACアドレスを対応付け~
- ARPフォーマット
- Gratuitous ARP(GARP)
- ポート番号 ~どのアプリケーションのデータなの?
- TCPの概要
- TCPの動作
- UDPの概要
- アプリケーションのデータが届くまでのまとめ
- DNS ~宛先IPアドレスを求める~
- nslookupコマンド ~DNSの名前解決の確認~
- DHCP ~IPアドレスを自動割り当て~
- Cisco IOS DHCPサーバの設定と確認コマンド
- Ciscoルータ DHCPサーバの設定例
- DHCPリレーエージェント
- DHCPリレーエージェントの設定例[Cisco]
- DHCPサーバ配置のまとめ
- TCP/IPの設定のまとめ
- ipconfigコマンド ~Windows OSのTCP/IP設定を確認~
- Linux(Ubuntu)でのTCP/IP設定の確認コマンド
- Webサイト
- HTMLとCSS ~Webページを作る~
- URL ~Webサイト(Webページ)のアドレス~
- HTTP ~HTMLファイルを転送する~
- Webアプリケーション ~Webブラウザだけあればいい~
- HTTP Cookie
- Webアプリケーションのセッション管理
- Webプロキシサーバ ~Webアクセスを代わりに~
- Webアクセスのまとめ
- 電子メール
- SMTP ~電子メール送信用プロトコル~
- POP3 ~メール受信用プロトコル~
- IMAP4 ~メールサーバ上でメールを管理~
- 電子メールのまとめ
- FTP ~代表的なファイル転送プロトコル~
- TFTP ~簡易的なファイル転送プロトコル~
- Windows10/11のTFTPクライアント
- ネットワークのトラブルの切り分け手順