🟢

【超図解】トランスポート層のプロトコルをわかりやすく解説

2023/07/29に公開

はじめに

こんにちは!猿喰です。
この記事ではネットワークを理解していただくために、OSI参照モデルをレイヤーごとに詳しく説明しています。ターゲットとしてはITパスポート、基本情報技術者レベルの知識を身につけることとしています。
今回は第4層(レイヤ4)トランスポート層の説明になります。
>>OSI参照モデルについて最初から見たい方は以下の記事から御覧ください 
https://zenn.dev/itpassport/articles/03bd090fa135ba

それでは参りましょう~。

トランスポート層とは?

トランスポート層とは、大きく以下の重要な役割があります。

  • ポート情報を付与して、どのアプリケーションに渡すかの橋渡しを行う
  • 通信の信頼性の担保

という重要な役割を担っています。
これから詳しく説明していきますが、このトランスポート層も非常に重要なレイヤーなので、
しっかり学んでいきましょう。

トランスポート層の役割1.ポート情報を付与して、どのアプリケーションに渡すかの橋渡しを行う

例えば、あるコンピュータとコンピュータが、ネットワーク通信をする際に、コンピュータに届けるまでの技術は、実はこれまで説明した第3層ネットワーク層までの技術で成り立っています。

しかし、コンピュータに到着しただけでは、データは目的値にはたどり着くことが出来ません。
宛先のコンピュータに到着したのに、たどり着けないとはどういうことでしょうか。
これを、現実世界に置き換えてみましょう。
現実の世界に例えると、ものを届ける際に、ダンボールの送り状に、住所は記載されているが、宛名は書かれていないという状況と同じです。
その場合は、その家までは届けることができますが、その人間には届けることはできません。
ここでいう宛名を提供しているのが第4層トランスポート層です。

コンピュータに話を戻しましょう。
コンピュータで、動いているアプリには全てポート番号があり、やり取りにはこのポート番号を指定しています。
このポート番号が先程の現実世界で言う宛名です。
PCゲームを立ち上げながら、メール参照をしたり、ブログサイトを立ち上げながら、この記事を見てるということもあると思います。
それら全てのアプリケーションにポート番号が割り振りされています。
このポート番号はブラウザのタブレベルで割り振らています。

送信側(サービス利用者)のコンピュータ側の目線で見てみる

ではまず、送信側(サービス利用者)のコンピュータ側の目線で見てみましょう。
送信側(サービス利用者)というのは、皆さん今、PCやスマホでこの記事を見ていたりすると思いますが、その時のPCやスマホの状態のことです。

あなたが見てるスマホ(ないしはPC)がこのサイトに送ってるリクエストに対して、適切にレスポンスを返せる理由は、あなたのスマホ(ないしはPC)がリクエストを送る際に、一緒に自分のIPアドレスとポート番号を付与しているためレスポンスが適切に返ってきます。
これは返信用封筒を一緒に送ってると考えるとイメージがしやすいかもしれません。

ちなみに送信者側のこのポート番号は、アプリケーションを立ち上げたタイミングでコンピュータがランダムに割り振りをします。
例えばPCのブラウザでブログを見ようとした場合は、そのブラウザ(タブ)を立ち上げた時点でポート番号がランダムで付与されています。

受信側(サービス提供者)の目線で見てみる

次に受信側(サービス提供者)の目線で見てみましょう。
受信側(サービス提供者)というのは、WEBサイトだったり、色んな人からアクセスを受け付ける側のことを言います。

WEBサーバー君は悩んでいました。
「ランダムでポート番号割り振ると皆到達できないな。受信側のポートは決めておくか」

ポート番号がランダムで割り振られると言いましたが、これは先ほどの送信側、サービス利用者の場合です。
サービス利用者は返信封筒を一緒に送ってアクセスするため、どのポート番号だったとしても、WEBサイト側は返信先がわかりますが、受信側、例えばWebサイトが、ランダムにポート番号を付与していると、サービス利用者側からすると、その番号が何か知ることができません。

そのため、よく利用されるサービスやプロトコルはあらかじめポート番号が決まっています。
この、よく利用されるプロトコルやサービスのために予約されている0番から1023番の番号を
「ウェルノウンポート」といいます。
例えば、ポート番号20.21番はFTPのために予約されていますし、25番はSMTPというプロトコルで予約されています。
そして、各サービスは、このポート番号でサービス提供し、アクセスを待ち受けています。

例えば、一番下のhttpsというプロトコルは、Webブラウザでサイトを閲覧するときの通信などに利用されるプロトコルです。
どこかのWEBサイトを開いた時のURLを確認すると、httpsと頭についていますので確認してみてください。

このhttpsというプロトコルを利用してWEBサイトにアクセスする場合は、ブラウザが暗黙にそのサイトの443番のポート番号宛てにアクセスをしているので通信が成り立っているんですね。
このウェルノウンポートの番号は、情報処理技術者の試験でも出題されることが多いので、
この図に載っているポート番号は最低でも押さえておきましょう。

トランスポート層の役割2.通信の信頼性の担保

それではトランスポート層の重要な役割の2つ目です。
トランスポート層は、通信の信頼性の担保という重要な役割を担っています。

それを説明していくために、まずトランスポート層のプロトコルを紹介します。
2つの重要なプロトコルがありますので、ぜひ覚えてください。

このお二方です。
そろそろ皆さん疲れてきたと思うので、目の保養を用意させていただきました。
この記事を見てる方には女性も男性もいるかもしれないので、左にイケメン、右に美少女を用意しました。
左のイケメンがTCP(Transmission Control Protocol)。
右の美少女がUDP(User Datagram Protocol)とさせて頂きます。

TCPの5つの重要な機能

それではまずTCPの説明をしていきたいと思います。
TCPには5つの重要な機能があります。

  1. コネクションの確立と切断
  2. 確認応答
  3. フロー制御
  4. 順序制御
  5. 輻輳(ふくそう)制御
    の5つです。これらの機能によって信頼のおける通信を実現しています。
    順番に見ていきましょう。

TCPの役割1.コネクションの確立と切断

コネクションとは接続のことを言います。
現実世界だと、「一方が電話をかけて、もう一方が電話に出る」というのがコネクションにあたります。
ネットワークの場合、コネクションを作るとき、3回のパケットのやり取りで仮想の通信路(つまりトンネル)を確立します。
最初は同期のための挨拶でSYNパケットを贈ります。
SYNとはシンクロナイズ。つまり同期のための挨拶をします。

次に、SYNパケットを受け取ったサーバーは、ACK:アック(アクナリッジメント)という肯定応答と「こちらこそ同期していいですか」というSYNパケットを送り挨拶をします。

それを受けた、最初のコンピュータは、ACK、肯定応答を返します。この3つの通信を行い、コネクションの確立が行われます。

この3回のやり取りを 3way handshaking(スリーウェイハンドシェイク)といいます。直訳すると3方向の握手です。コネクションの確立のためにはこのスリーウェイハンドシェイクを実施してることを押さえておいてください。
次に、コネクションの切断を見ていきます。

コネクションを追える手順は、両方のコンピュータが、それぞれFinパケットを送って、受け取った側がACKアック(アクナリッジメント)、応答を返すことで切断します。
Finパケットは「こちらからはデータはもう送信しませんよ」という意思表示なので、例えば、この図の青いパケットのやり取りだけの場合は、あくまで左側からの「送信は終わりましたよ」という合図なので、右側のコンピュータからのデータ送信はまだ可能な状態です。
これを「ハーフコネクト」と呼びます。
緑色のパケットで、FINパケットとACKパケットのやり取りもおこなれた場合にコネクションは完全にクローズされます。

と、ここまで紹介したやり取りでコネクションの確立と切断が行われており、これがTCPの重要な5つの役割のうちの1つです。
それでは次に2つ目を見ていきましょう。

TCPの役割2.確認応答

確認応答とは、リクエストに対するレスポンスの紐づけを管理することを言います。
具体的にはクライアントが送ったリクエストに対して、サーバーがちゃんと返事をしてくれているかを管理します。

この図では応答がきちんと返ってきてるケースです。
要求1に対して応答1というように返事が返ってきています。

一方、何らかの通信障害が発生して
別のリクエスト要求2が相手先に届かず、返事が返ってこない場合を見てみましょう。

左側のコンピュータのTCPは、一定時間この要求に対して応答がない場合、「要求2はレスポンスがないからもう一回送ろう」という判断をして、再度要求2を送ります。
これらの一連の流れがTCPの重要な5つの役割のうちの1つ確認応答の機能です。

TCPの役割3.フロー制御

フロー制御とは、通信を効率的に行うための機能です。
実は、届いたパケットはすぐ処理に回されるわけではなく、受信側のコンピュータのメモリに入ります。図で表現すると次のような感じでしょうか。

また、右側のコンピュータはメモリの空き具合を確認して、あとどれくらいメモリが空いてるかを計算します。

そして、応答すると同時に、バッファに入る数(空き容量の情報も)一緒に付与して送ります。

レスポンスを受け取った側のコンピュータ、左のコンピュータは、本当は、応答1が返ってきたら次の要求2を送る予定でしたが「メモリが空いてるよ」という情報を受けて、複数の要求ができることを知り、リクエストを複数送ります。

こんな感じです。4つまで送れると聞いたので、返事が来なくとも複数のリクエストを送れます。この機能により、可能な限り要求を送ることができるので、効率よくネットワーク通信ができるのです。
これがTCPの重要な5つの役割のうちの1つ、フロー制御の機能です。

TCPの役割4.順序制御

順序制御とは、文字通り順番のコントロールのことを言います。

先程説明したフロー制御を行うと、同時に送信するリクエストがあるため、ネットワークを通る過程でパケットの順番が変わってしまう可能性があります。

そのため、複数のリクエストを送信する際に、送信元のTCPはシーケンス番号(順序番号) をつけて送信します。
図では1,2,3,4とリクエストに番号がついていると思います。

この番号があるため、パケットを受け取った受信側のTCPは、シーケンス番号 を確認して順番に処理(上位の層に渡す)していくことができます。
これがTCPの重要な5つの役割のうちの1つ、順序制御です。

TCPの役割5.輻輳制御

最後に輻輳制御を説明します。
輻輳という言葉は聞きなれないと思いますが、輻輳(ふくそう)とは、ネットワークに想定を超える接続要求や伝送要求が行われ、通信・通話できなくなる状態のことをいいます。
つまり、ネットワーク的な混雑防止をこの機能で対応しています。

フロー制御の時に、受信したコンピュータのバッファが空いている場合「複数のパケットを送信する」と説明しましたが、実は最初からバッファに入るだけMAXで送信するわけではありません。

理由は、輻輳(ネットワークが混雑)が発生すると、パケットがネットワーク上で紛失することがあるからです。

また、一定時間応答がない場合、TCPは先に説明した「確認応答」の機能で、再度パケットを送信することを説明しました。

しかし、ネットワークが混雑している状況化で再度送信しても、パケットが紛失の可能性が高く、この状態ではいつまでたってもやり取りができません。

そのため、TCPの輻輳制御では、バッファの空き内の中で、送信できるパケット通信量を徐々に増やしていきます。例えば、右のコンピュータから4つまでメモリにおけるよ、と言われてもまずは2つのパケットを送信します。

2つの要求に対して無事にレスポンスが返ってきた場合は、徐々に送信数を増やしていきます。
次は3つ送ってみます。

しかし、3つを同時に送信してみると、また輻輳により、パケットの紛失が発生したとします

その場合は、帯域が混雑してると判断して、またパケットの送信数を減らします。

このようなネットワークの混雑を考えた上でコントロールするのがTCPの重要な5つの役割のうちの1つ、輻輳制御です。

ここまで説明した5つの機能がTCPの代表的な機能ですので、覚えておいてください。

UDPの役割

それでは、UDPの説明をしていきたいと思います。
UDPは、早くて雑なのが特徴で、リアルタイム性を重視するプロトコルです。

どれくらい雑かというと、例えばこんな感じでやり取りをしているとします。

その際に、輻輳(ネットワークの混雑)によりパケットが紛失したとします。
この場合、UDPは無視します。
TCPの場合は再送するということを説明したと思いますが、UDPはそんなこと気にしません。

また届いたパケットはチェックサムだけ実施して受け取ります。
チェックサムとは、データの信頼性を検査するための簡易なチェックのことをいいます。
送信データをブロックに区切り、各ブロックを数字化してその数字の合計をパケットにつけて送信します。また、受信側も同様の計算を行い、データが壊れているかのチェックを行います。これをチェックサムと言います。

チェックサムをして、正確なデータじゃないと判断した場合は破棄をします。
再送依頼はしません。雑ですね。

というのはですね、UDPは信頼性を犠牲にしてスループット※を高めるという目的のプロトコルです。
※ネットワークが一定時間内に処理できるデータ量

こんな雑な通信、利用することあるのか?とお思いの方もいらっしゃると思いますが、例えば、IP電話等で利用されています。

IP電話というと例えばLineの電話等でも利用されています。
なぜ電話で利用されるかというのは、正確性よりリアルタイム性が重視されるためです。
一部音が聞こえなかろうが、タイムラグがあるよりマシ。という考えのもと利用されています。
これがUDPというプロトコルです。
今のところは早くて雑、というプロトコルの位置づけではありますが、Web閲覧の時に利用しているプロトコル、httpの新バージョン、http/3では、このUDPを利用する方向で検討されています。
そのため、今後のことを考えると非常に有望なプロトコルですので、覚えておいて頂ければと思います。

TCPとUDP、二つのプロトコルが支えているトランスポート層、ネットワークの核ともいえるレイヤーなので、参考になればこれ幸いです!

それでは次回の第5層 セッション層の記事でお会いしましょう~

※前の記事から来てない方は、第1層物理層から順番に見ると、ネットワークが好きになります。
(断言しますが、非エンジニアの方でもネットワーク理解すると仕事で絶対評価されます)
ぜひ!

おわりに

これらのIT知識をUdemyの動画でも説明してます。
動画のほうがいい方、最低限のIT知識をがっちり取得したい方は以下からどうぞ。
おかげさまで数万人に受講してもらってます。
ここまで見てくださった方向けに86%OFFクーポンリンクを貼っておきます~

Discussion