トランスポート層について

『基礎から復習 ネットワーク編』の第二回目として「トランスポート層について」記述します。

はじめに、本記事は学生時代にITに興味を持って勉強を始めた頃の自分自身に当てて執筆しています。内容は以下の書籍を参考にしておりますので、より詳しく理解するためには是非以下の書籍を手にとってご覧になって下さい。また、アイキャッチ画像はxreschによるPixabayからの画像を使用させていただいております。

トランスポート層って何やってるの???

今のわい
今のわい

今回はTCP/IPのトランスポート層について紹介していくで!

トラブルが発生したら大体この辺が絡んでくるので心してかかってくれ!!

ほい、りょうかい!

10年前のわい
10年前のわい

TCP/IPのアプリケーション層の次の階層はトランスポート層と呼ばれています。アプリケーション層がサービスを実現する役割があるのに対して、トランスポート層には、アプリケーション層とネットワーク層のデータのやり取りの橋渡しを行う役割があります。

そのデータの橋渡しを行う方法によって、TCP(Trancemission Control Protocol)とUDP(User Dategram Protocol)の2種類のプロトコルが存在します。

TCPはwebサービスや電子メールなど信頼性を重視した場面で用いられるプロトコルになっています。一方で、UDPは動画のストリーミング配信やIP電話などスピードが重視される場面で使用されるプロトコルです。

TCPプロトコルについて

TCPはデータを確実に相手に届けるために、受信側と1対1の通信を行います。このような通信をコネクション型通信と言い、おおまかに次の3ステップから成り立っています。また、トランスポート層で扱うデータの単位をセグメントと言います。

  1. 受信側がデータを受け取れる状態でるかどうかを確認してから通信を開始。
  2. データを決められた大きさに分割して、TCPヘッダをつけて順番に送信する。
  3. データを送り終わったら、通信を終了する。

このように受信側との連絡を密に取ることによって、データ送信の確実性を高めています。その通信状況を伝える手段として使われるのが、TCPヘッダにある6ビットのコントロールフラグです。相手に伝えたい項目を「1」にしてフラグを立てます。

URG(Urgent):1ならセグメントが緊急データを含んでいる。
ACK(Acknowledgment):1なら通信の確認に対して了解した。
PSH(Push):1ならセグメントをすぐにアプリケーション層に移す。
RST(Reset):1なら通信を強制的に切断する。
SYN(Synchronize):1なら通信の開始を要求する。
FIN(Fin):1なら通信の終了を要求する。

また実際の通信を始める前に、両者が扱えるデータ量を確認します。セグメントサイズウインドウサイズ(一度に受け取れる量)を確認して、数値の小さい方に合わせます。ウインドウサイズは通信の途中でネットワークがすいている時は大きくし、混んでいるときは小さくするなど状況に応じて調節できます。

受信側ではTCPヘッダに書き込まれたポート番号を見て、指定されたアプリケーションプロトコルにデータを渡します。データが1つのセグメントに収まっていない場合は受け取ったデータをもとの形に組み合わせてからアプリケーション層に渡します。TCPヘッダでは次のような順序と大きさで書き込むように決められています。

確認応答番号ウインドウサイズは受信側が書き込むことになっています。

インターネットでは、パケットがどこかでいきなりなくなる事があリます。 両者で何が届いたかを把握しているため、足りないものを再度送りなおす事が可能です。 このように再度送り直すことを再送と呼びます。

この信頼性は、開発者にとっては非常にありがたいものです。 普通にプログラムを書く人は「ネットワークでパケットがなくなったらどうするか」や「ネットワークの途中でデータの内容が変わったらどうしよう」というの は考えたくありません。

TCPを使うことにより、プログラマはそのようなわずらわしさから解放されます。 メール、HTTP、FTPなどでは、データがそのまま伝わることが要求されます。 そのため、それらのプロトコルはTCPを使った通信を行っています。

但し、その一方で再送処理が行われる事により、帯域を圧迫しネットワーク遅延を発生されることもあるので注意が必要です。再送が起きてしまっている場合は、ネットワーク機器間で通信速度設定が異なっていないかや、データ受信するPCのデータ受信バッファのサイズなどを確認します。

UDPプロトコルについて

UDPでは、事前に打ち合わせをしないで一方的にデータを送りつけるコネクションレス型通信を行います。複数の相手に同時にデータを送信することができ、特定の複数の人に贈ることをマルチキャスト、不特定多数に送ることをブロードキャストと言います。UDPでやることは以下の2つだけです。

  1. データが壊れていないか確認し、壊れていたら破棄する。
  2. UDPヘッダを外して、指定されたアプリケーションプロトコルに渡す。

UDPでは、何も考えずひたすら投げつけるだけなのでTCPと比較して即時性があります。 高速に大規模なデータを通信したいときに重宝される技術になります。

10年前のわい
10年前のわい

信頼性が必要な時はTCP、とにかくスピード重視の時はUDPを採用するって事だね。

通信の遅延が発生した時はパケットを解析して調査する事になるで。ここから調査を開始して、ハード的に問題ないかとか、ソフト的な問題なのかを切り分けていく感じ。データ通信量の大きいシステムを扱う時はとっても大事やで!

今のわい
今のわい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です