TCP/IP -トランスポート層について-

トランスポート層の概要  

TCP/IPのアプリケーション層の次はトランスポート層と呼ばれています。アプリケーション層がサービスを実現する役割があるのに対して、トランスポート層には、アプリケーション層とネットワーク層のデータのやり取りの橋渡しを行う役割があります。そのデータの橋渡しを行う方法によって、TCP(Trancemission Control Protocol)とUDP(User Dategram Protocol)の2種類のプロトコルが存在します。TCPはwwwサービスや電子メールなどに使われる信頼性を重視した場面で用いられるプロトコルになっています。一方で、UDPはストリーミングやIP電話などスピードが重視される場面で使用されるプロトコルです。
[expand title=”Trigger Text”]

TCPプロトコル  

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

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

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

brwu

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

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

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

adeih

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

インターネットでは、パケットがどこかでいきなりなくなる事があリます。 両者で何が届いたかを把握しているため、足りないものを再度送りなおす事が可能です。 このように再度送り直すことを再送と 呼びます。この信頼性は、アプリケーションプログラマにとっては非常にありがたいものです。 普通にプログラムを書く人は「ネットワークでパケットがなくなったらどうするか」や「ネットワークの途中でデータの内容が変わったらどうしよう」というの は考えたくありません。 TCPを使うことにより、プログラマはそのようなわずらわしさから解放されます。 メール、WWW、FTPなどでは、データがそのまま伝わることが要求されます。 そのため、それらのプロトコルはTCPを使った通信を行っています。

UDPプロトコル  

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

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

——————————以下参考文献です。——————————

・「TCP/IPの絵本」, アンク, SHOEISYA
・Geekなページ, http://www.geekpage.jp/technology/ip-base/tcp-udp.php

[/expand]

コメントを残す

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>