この連載ではこれまで、ネットワークを構成する基本的な要素「物理層」と「データリンク層」、「ネットワーク層」の解説を行いました。今回から2回に分け、その上位の階層となる「トランスポート層」の役割や機能について紹介します。

トランスポート層の役割

トランスポート層には、大きく2つの役割があります。

(1)アプリケーション(上位の階層)から受け取ったデータの区別
【送信時】データの送信元となるアプリケーション、宛先となるアプリケーションを区別できるよう番号を指定する
【受信時】指定された番号をもとに適切なアプリケーションへデータを届ける

(2)下位の階層で動作するプロトコルの能力に合わせたデータ分割
【送信時】適切な大きさにデータを分割する
【受信時】分割されたデータを元の状態に組み立て直す

つまり、上位の階層との関係性を保つ仕事を進めつつ、下位の階層との関係性も保つ仕事を同時に進める、という2面の働きをする層になります。

  • トランスポート層の役割

    トランスポート層の役割

ここからは2つの役割について、それぞれ紹介していきます。

アプリケーションから受け取ったデータの区別

(1)アプリケーションを区別する仕組み

「動画を再生しながら、友達とメッセージのやり取りをするアプリケーション(ソフトウェア)に切り替える」というように、1台の機器で複数のネットワーク通信を同時進行させるという使い方は珍しくありません。

これは、トランスポート層が同時に複数のアプリケーションから受け取ったデータを正しく区別することで実現しています。

例えば、役所で手続きをする時の様子を思い浮かべてみましょう。まず整理券で番号を発行し、住民票や戸籍、他にも年金など、いくつも並んでいる窓口の中から目的に適した番号の窓口を選んで書類(データ)を渡します。何か確認を求められるときや手続きの返事をもらうときは整理券の番号を使って呼び出されます。

整理券の番号によって返事が違う人へ渡らないよう自分のことを区別できますし、また、窓口の番号によって手続きの書類を適切に処理してくれる係の人が区別できます。

  • 窓口で手続きをするイメージ

    窓口で手続きをするイメージ

トランスポート層も同様に、「データ通信を依頼するアプリケーション」と「そのデータを渡すべきアプリケーション」を番号で区別しています。

  • トランスポート層の働きによるアプリケーションの区別

    トランスポート層の働きによるアプリケーションの区別

(2)インターネットにおけるアプリケーションの区別

TCP/IPにおけるトランスポート層のプロトコルは、アプリケーションの区別に「ポート番号」という16ビットの値を使います。データ通信の依頼を受けたアプリケーションを「送信元ポート番号」、そのデータを届けるべきアプリケーションを「宛先ポート番号」として示します。

これらはトランスポート層の処理に不可欠な情報のため、L4(トランスポート層)ヘッダとしてデータに付与されます(ヘッダの具体的な内容は、次回の記事で紹介します)。

  • 送信元ポート番号と宛先ポート番号

    送信元ポート番号と宛先ポート番号

16ビットのポート番号は10進数に変換すると0~65535という範囲に相当しますが、下表のような用途に応じた3つのグループに大別されます(IANAについては第12回の記事をご参照ください)。

  • ポート番号3つのグループ

    ポート番号3つのグループ

ウェルノウンポート番号とユーザポート番号の範囲は、番号と用途があらかじめ決まっています。先ほどの役所の例では、手続きごと割り当てられた窓口の番号に近いイメージです。

一方のダイナミックポート番号は、割り当て・用途の取り決めがなく、自由に利用できる範囲です。一時的に区別できれば良いという場面において、使い勝手が良い番号と言えます。先ほどの役所の例では、整理券の番号に近いイメージです。使用するポート番号がどのように決まるか、もう少し詳しく見てみましょう。

(3)送信元ポート番号の選ばれ方

送信元ポート番号は、通信の実行中だけ一時的にアプリケーションを区別できれば十分役割を果たすことができます。

ここでは、用途の取り決めがないダイナミックポート番号の範囲から通信を行う時点で使われていない番号がランダムに選ばれ、送信元ポート番号として使われます。下図のように新しいアプリケーションが通信を要求する度にランダムな番号を一つ選んでいきます。 通信が終わるとその番号は解放されるため、違うアプリケーションが同じ番号を使い回す可能性もあります。

  • 送信元ポート番号が割り当てられる様子

    送信元ポート番号が割り当てられる様子

(4)宛先ポート番号の選ばれ方

ブラウザはWebページの情報を、電子メールのアプリケーションはメールの情報をやり取りしたいことが事前に分かっています。

そこで、適切に処理をしてくれるアプリケーションを事前に定義しているウェルノウンポート番号やユーザポート番号が宛先ポート番号として使われます。アプリケーションに設定されていることが多いため、その内容に従うことになります。

  • 宛先ポート番号が割り当てられる様子

    宛先ポート番号が割り当てられる様子

ウェルノウンポート番号の中から利用頻度が高いものを下表にまとめましたので、参考にしてみて下さい。

  • ウェルノウンポート番号の例(抜粋)

    ウェルノウンポート番号の例(抜粋)

下位の階層で動作するプロトコルの能力に合わせたデータ分割

(1)データを分割する意義

私たちは日常的にさまざまな容量のデータをやり取りしています。特定の1台が大容量のデータを送信するために長時間に渡ってネットワークを占有すると、他の機器はその通信が終わるまで転送ができなくなってしまいます。

そういった非効率を解決するため、データを適切な大きさに分割(セグメンテーション)して通信を行うことが一般的です。

  • データ分割(セグメンテーション)のイメージ

    データ分割(セグメンテーション)のイメージ

こうすることでデータ転送が行われない隙間のタイミングが生まれやすく、複数の機器が互いに通信の機会を得られるようになっています。

(2)インターネットにおけるデータ分割

トランスポート層で分割するデータの大きさは、データリンク層で作られるフレームの大きさを基準にして決まります。私たちがインターネット通信を行う際、一般的なEthernetの機器は最大1518バイトのフレームで運搬を行っています。

これを基準にするとフレームヘッダとフレームトレーラ部分を除いた1500バイトがIPパケットの最大値となります。さらにIPパケットヘッダ部分を除く1480バイトがトランスポート層の処理で作られるデータ容量の最大値と計算できます。

  • Ethernetフレームを基準にしたデータ容量の最大値

    Ethernetフレームを基準にしたデータ容量の最大値

(3)分割したデータへの処理

しかし、データを分割すると内容はバラバラになってしまいます。そのため、一つひとつを正しく処理できるようにするため、分割した内容には一つずつヘッダ情報を付与する必要があります。

  • セグメンテーション時のヘッダ付与

    セグメンテーション時のヘッダ付与

こうして作られたものを「データセグメント」と呼び、このあとネットワーク層をはじめとする下位の階層に引き継がれ、送信処理が進められます。

(4)到着したデータの処理

これらデータセグメントを受信した機器は、受け取った内容をどのアプリケーションに届けるべきかヘッダ情報を根拠に分類します。

分類ができるとヘッダを外し中身の部分だけを保管しておきます。全ての内容を受け取ると分割された状態から元のデータの状態へ再構築し、所定のアプリケーションへ届けます。

  • 受信時におけるセグメンテーション後の再構築

    受信時におけるセグメンテーション後の再構築

まとめ

・トランスポート層は「データのやりとりを行うアプリケーションを区別する」「適切な大きさにデータを分割する」という2つの役割を持つ
・アプリケーションを区別する根拠として「ポート番号」という値が用いられる
・トランスポート層は、下位層で運搬できるデータ容量に合わせてデータの分割(セグメンテーション)を行う
・セグメンテーションの際、一つひとつに「送信元ポート番号」および「宛先ポート番号」などがヘッダ情報として付与される

次回は、TCP/IPに定義されている2種類のプロトコル「TCP」と「UDP」について、2種類ある理由や、それぞれの特徴について紹介します。

著者プロフィール


伊藤 さくら(いとう さくら)


ネットワンシステムズ株式会社
ビジネス開発本部イノベーション推進部ネットワークアカデミーチーム所属
2020年ネットワンシステムズ入社。シスコシステムズ社認定インストラクター資格を取得し、社内外に向けて初学者を対象にしたネットワーク基礎コースの研修を多く実施。産学連携の一環として大学との共同開発による情報セキュリティ授業のカリキュラム策定にも参加し、その講義を担当。また、放送業界に特化した技術者育成研修にも取り組んでいる。