2020-02-13 Show 現在のインターネットを支える技術であるTCP/IPについて、基礎となるプロトコル群と、TCPの基本機能を丸田一輝さん、 中山悠さんに解説していただきました。
今からおよそ50年前、パケット交換方式による世界初のコンピュータネットワークであるARPANETが構築されました。それ以来、TCP/IP(Transmission Control Protocol / Internet Protocol)は通信を実現する基盤技術として使われ続けています。今ではパソコンに限らず、スマートフォンやゲーム機、センサー、最近では自動車など、無線通信機能を持ったさまざまな端末も含めコンピュータネットワークは構成されています。 その中でも「通信の信頼性を確保する」役割を担っているTCPは、その性質上、多くの機能を備えています。加えて、時代とともに進化するアプリケーションの要求に合わせて常に進化を続けています。本稿では、現在のインターネットを支える技術であるTCP/IPについて、基礎となるプロトコル群と、TCPの基本機能について解説します。 プロトコルスタックエンジニアHubに会員登録すると 登録のメリット
目次
IP(Internet Protocol)はTCP/IPの名前に含まれているように、TCP/IPのさまざまなプロトコルの中でもとても重要なプロトコルです。まずは、IPの役割を明確にしておきましょう。 IPの役割は、「エンドツーエンドの通信を行う」ことです。 つまり、ネットワーク上のあるホストから別のホストへのデータを転送するのがIPの役割です。送信元ホストと宛先ホストは、同じネットワーク上でも異なるネットワークでもどちらでもよいです。 IPでデータを転送するためには、転送したいデータにIPヘッダを付加して、「IPパケット」とします。宛先が異なるネットワークに接続している場合は、間にルータが存在します。送信元ホストから送信されたIPパケットは、経路上のルータが転送して最終的な宛先ホストまで送り届けられます。ルータがIPパケットを転送することを指して「ルーティング」と呼びます。 図 IPによるエンドツーエンド通信ただし、IPだけで目的の宛先までデータが届くわけではありません。IPには「0」「1」のデータを電気信号などの物理的な信号に変換するような機能はないからです。IPパケットをネットワーク上に送り出すためには、さらにイーサネットやWi-Fiなどのネットワークインタフェース層のプロトコルが必要です。IPパケットをさらにイーサネット/Wi-Fiなどのネットワークインタフェース層プロトコルのヘッダでカプセル化し物理的な信号に変換して、ネットワーク上に送り出します。 関連記事データを物理信号として送り届けるイーサネットおよび無線LANについて、以下のページからさらに詳しい解説記事のリンクがあります。 IPにとってのデータは「TCP」や「UDP」などのトランスポート層プロトコルであることがほとんどです。そして、TCPやUDPにとってのデータがHTTPなどのアプリケーションプロトコルです。 関連記事ネットワーク上に送り出されるデータについて、以下の記事もあわせてご覧ください。 なお、IPには現在広く利用されているIPv4からIPv6へ移行しようとしています。IPv4でもIPv6でも「エンドツーエンドの通信を行う」という基本の役割は共通です。IPv6を理解するためにも、IPv4の役割や仕組みを理解しておくことがとても重要です。 関連記事IPv6について、以下のページからさらに詳しい解説記事をご覧いただけます。 IPヘッダフォーマットIPでデータを転送するために付加するIPヘッダのフォーマットは以下のとおりです。 図 IPv4ヘッダフォーマットバージョン「バージョン」にはそのものずばりのIPのバージョンが入ってきます。現在のIPのバージョンは「4」です。そして、IPの次のバージョンは「6」となります。バージョン4の次が5を飛ばして6になっています。バージョン5はすでに実験用に使われているので、「4」の次は「6」となっています。 ヘッダ長ヘッダ長にはIPヘッダの長さが入ります。ただし実際の長さが入ってくるのではなく、4バイト単位の長さです。つまり標準ではIPヘッダは20バイトですので、ヘッダ長は「5」です。 サービスタイプサービスタイプはQoS(Quality of Service)制御で利用します。QoSとは、主にルータやスイッチなどのネットワーク機器でデータを転送する際に優先度に応じた転送を行う制御です。サービスタイプでデータを優先度に応じてIPパケットをグループ化することができます。 関連記事QoSについて、以下のページからさらに詳しい解説記事のリンクがあります。 パケット長パケット長ではヘッダを含めた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で運ぶデータがどんなプロトコルのデータであるかを識別するのがプロトコル番号です。 主なプロトコル番号は次の表の通りです。
なお、プロトコル番号は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アドレスを指定していることを意識させないようにしています。IPアドレスは数字の羅列なので、ユーザにとってはわかりづらいためです。Webブラウザやメールソフトなどでは、ユーザは宛先IPアドレスを指定しなくてもよいようにしています。ですが、必ずIPアドレスが必要です。 ユーザにIPアドレスを意識させませんが、IPアドレスを指定できるようにするためにDNSがあります。DNSもTCP/IPの通信を支えるとても重要なプロトコルです。 関連記事 |