〇 インターネットで使われている通信規格の基本、「TCP/IP」とは。
本連載では、インターネット活用に不可欠の技術や規格を解説する。今回は、全ての基本となる「TCP/IP」について取り上げる。
インターネットは、世界中のコンピューターがつながる巨大なネットワークだ。これは、世界各地に独立して存在するネットワークが、相互に接続し合う形で実現されている(図1)。機器のOSや通信回線などの種類を問わず通信ができるように、インターネットでは各種の規格を組み合わせて利用している。その中で最も基本となるのが「TCP/IP」だ。
Θ 世界をつなぐインターネット。
図1、世界各地の組織や家庭のネットワークを、ISP(インターネット接続事業者)などを介して相互につなぎ、地球規模の巨大ネットワークにまとめ上げたものがインターネットだ。
IPとTCPの位置付け。
インターネットで利用される規格のうち、通信の仕方を定めたもの(通信規格)をプロトコルと呼ぶ。その基本となるのが「TCP/IP」だ。機器間でデータを伝送するInternet Protocol(IP)と、IPの上で信頼性が担保された通信を実現するTransmission Control Protocol(TCP)の2つを組み合わせた名称だ。
インターネットのプロトコルは、相互に連携しており、大きく4つの階層に分類される(図2)。IPは下から2階層目のインターネット層に位置付けられており、さまざまなOSや回線が混在していても、相互に通信ができるようにルールを定めている。
Θ 回線の種類を問わず通信できる。
図2、TCP/IPを核とする通信の技術は4つの階層に分類される。機器間の通信にIPという標準規格を採用することで、通信回線の種類にかかわらず、同じ形式でデータの送受信を可能にしている。
TCPは、UDPとともにその上位に位置するアプリケーション層のプロトコルと、IPとの橋渡しをする。UDPはUser Datagram Protocolの略。ここでは、TCPが必要ない場合に使われるプロトコルだと考えてもらえば十分だ。
機器間の通信を受け持つIPには、基本となるIPv4(バージョン4)と、後継のIPv6(バージョン6)がある。世界的にIPv6への切り替えが進んでいるものの、現在は互換性を維持するため、IPv4も併用されている。
IPv6でアドレスが拡大。
IPv4とIPv6の最大の違いは、機器を識別するIPアドレスの扱いだ(図3)。IPv4では割り当て可能なアドレスの上限が32ビット、約43億個で、世界の人口にも満たず、既にほぼ空きがない。それに対して、IPv6は128ビット、約340澗(43億の4乗)個と大幅に拡張されている。これにより表記方法が変わっているが、アドレスの前方部分で自分の所属するネットワークを表し、残りの部分で端末を特定する構造は同じだ。
Θ IPアドレスで機器を識別する
図3、IPで送信元や宛先の機器を特定するのがIPアドレスだ。IPv4では32ビット、IPv6では128ビットの数値で表す。前半のネットワークの識別番号と、後半の端末番号に分かれており、その境界はプレフィックス長で示される。
Windows 11のネットワーク設定を見ると、利用できるネットワークインタフェースの物理アドレス単位でIPv4とIPv6、それぞれのアドレスが割り当てられていることが分かる(図4)。
Θ Windows 11のIP設定を確認。
図4、「設定」アプリの「ハードウェアと接続のプロパティ」画面で情報を確認(1)。1つの物理アドレスに(2)、IPv4アドレスは1つ、IPv6アドレスは複数の割り当てがある(3)。DHCPやデフォルトゲートウェイの情報もある(4)(5)。
家庭内LANに接続している機器には、自分のネットワーク内でのみ自由に割り当ててよいプライベートアドレスが割り当てられることが多い。このような特殊な割り当てられ方をするアドレスには、いくつかの種類がある(図5)。
Θ 特殊な意味を持つIPアドレス。
図5、常に自分自身を示すループバックアドレス、DHCPなしで自動設定されるリンクローカルユニキャストアドレス、ネットワーク内で自由に割り当てられるプライベートアドレスなどがある。
パソコンなどのIPアドレスは、DHCPというプロトコルで自動的に割り当てるのが一般的だ(図6)。IPアドレスの割り当てと同時に、デフォルトゲートウェイのIPアドレスなど必要な情報も伝えられる。デフォルトゲートウェイとは、自分とは異なるネットワークに属するIPアドレスの相手と通信する際に、通信を中継(転送)するルーターなどの機器を指す(図7)。なお、IPv6の自動割り当ては動作が異なるが、ここでは割愛する。
Θ 通信に必要な設定はDHCPで受け取る。
図6、ネットワークに接続した機器はDHCPサーバーを探し、応答があればIPアドレスなどの情報を取得し、TCP/IPでの通信が可能な状態になる。
Θ デフォルトゲートウェイの役割。
図7、デフォルトゲートウェイは自分のネットワークと外部の両方に接続し、通信を転送(中継)する。家庭内LANならWi-Fiルーターなどがその役割を担う。
家庭内LANでは、Wi-Fiルーターなどがデフォルトゲートウェイになる。また、DHCPサーバーとして機器にIPアドレスを割り当てる役目を担うことも多い。
アプリを指定するには。
IPアドレスは通信相手の機器を特定できるが、相手側でデータを処理すべきプログラム(プロトコル)は指定できない。これを指定するには、ポート番号という数字を使う(図8)。
Θ ポート番号でプログラムを指定する。
図8、IPアドレスで機器を指定するように、データを処理するプログラムはポート番号で指定する。Webサーバーなら80番ポート宛ての通信を受け付ける。
通常、通信を待ち受けるサーバー側では、プロトコル別に「ウェルノウン(よく知られた)ポート」という決まった番号が設定される(図9)。ポート番号を問い合わせる手間を省くためだ。クライアント側は処理を要求する際に番号を伝えられるので、任意のポート番号が使える。
Θ 主要なウェルノウンポート。
図9、よく利用されるサービスやプロトコルが利用するポート番号。同じプロトコルでも、暗号化を組み合わせるとポート番号が変わることが多い。
ところで、家庭内LANなどでプライベートアドレスしか割り当てられていない機器は、そのままだとインターネット上の機器と通信ができない。その対策として、ルーターが通信を中継する際に、通信内容に含まれる機器のプライベートアドレスをルーターのインターネット(WAN)側のアドレスに置き換えて、通信を可能にする技術が使われる。この仕組みをNAT(Network Address Translation)という(図10)。現在は、同じポート宛ての通信が複数同時に行われても正しく扱えるようポート番号も書き換えるのが一般的になっており、正確にはNAPT(Network Address Port Translation)と呼ばれる。
Θ プライベートアドレス利用に必須のNAT。
図10、LAN側の機器と外部との通信をルーターが中継する際に、IPアドレスとポート番号をルーターの情報に変換するのがNAT(NAPT)機能。外部からはルーターのIPアドレスとポート番号が通信相手として扱われる。
通信はパケット単位で。
データ通信では、プログラムでの処理や回線の利用を効率化するため、データを細かく分割して送り、受信側で再構成する(図11)。それぞれのデータにはヘッダーという付加情報が追加されパケットという固まりとして扱われる(図12)。
Θ データは細切れで送受信する。
図11、IPでは、元のデータを細かい「パケット」に分割して送受信する。1つの通信で回線を占有せず、複数の通信を並行して行える、通信エラーの際に送受信を最初からやり直さずに済むなどのメリットがある。
Θ パケットは「ヘッダー+データ」で構成。
図12 IPのパケットは、通信制御用の情報をまとめたヘッダーにデータ本体をつなげた構成。データには、通常UDPやTCPのパケットが入る。
アプリケーション層のプロトコルを処理するプログラムが用意したデータはTCPかUDPに渡り、適切なサイズに分割されると同時に、TCPやUDPのヘッダーを付けたパケットとしてIPに渡される。IPは、TCPやUDPのパケット全体をデータとして扱い、IPのヘッダーを付けたIPパケットとして送信する形だ。
ところで、IPのヘッダーに宛先や送信元のIPアドレスは含まれるが、ポート番号は含まれない。そちらは、アプリケーション層とやり取りするTCPやUDPのパケットのヘッダーに含まれる。NAT(NAPT)機能が書き換えるのは、これらのヘッダー情報だ。
自分と同じネットワークにない機器との通信では、パケットがルーターに転送される形で相手に送られる。一般に、このような通信では複数のルーターを経由する。通信の状況によっては、転送が何度も繰り返されて、パケットがいつまでも宛先に届かない場合がある。無限に通信が続くのを防ぐため、IPのヘッダーにはルーターが転送するたびに数値を減らすTTL(Time To Live、生存時間)という情報が含まれる。ルーターは、TTLがゼロのパケットは転送せずに破棄し、送信元に通知する(図13)。
Θ パケットには寿命がある。
図13、IPのパケットは転送されるごとにTTLの数値が減り、0になると破棄される。図のTTLは少ないが、実際にははるかに大きな値が使用される。
確実な通信を助けるTCP。
冒頭で、TCPをIPの上で信頼性のある通信を実現するプロトコルと述べた。そのためにTCPに備わっている機能の一つが、IPに渡す前のTCPパケットのヘッダーに連番のシーケンス番号を入れて、受信側でパケットを順番通りに再構成できるようにする仕組みだ(図14)。
Θ 通信エラー対策を備えたTCP。
図14、TCPのパケットにはシーケンス番号が付加されるため、特定パケットの転送が遅延しても正しい順番で連結できる。
TCPでは、データ本体を送り始める前に相手との接続が確立したことを確認する手続きをし、シーケンス番号の初期化などを実行する。これを3ウェイハンドシェイク(3方向の握手)という(図15)。また、パケットが到達したことを確認する返信を受け取ることで、通信の確実性を上げる(図16)。相手の状況を確認しながら通信するため、TCPはコネクション(接続)型の通信方式に分類される。
Θ TCPは“握手”で通信を確立。
図15、TCPは、最初に3回のやり取りでシーケンス番号の初期化などをし、通信が確立したことを確認してから通信を開始する。
Θ パケットの不達対策。
図16、TCPではパケットを受け取るごとに確認応答を返す。この応答が待ち時間より遅い場合は、通信経路上でデータが失われたと判断し、再送する。
一方、こうした仕組みを持たないUDPは、送信者が相手の状態を確認せず、一方的にパケットを送る、コネクションレス(接続なし)型の通信方式に分類される。パケットを受信した順番で機械的に処理するため、順番が狂ったり、一部のパケットが届かなかったりしても関知しない。その代わり、TCPより迅速にパケットを送信できるのが利点だ。信頼性より速さを求める用途で利用される。