目次
トランスポート層
トランスポート層とは、OSI参照モデルの第4層(レイヤ4)で定義されている層で、その役割はデータ送受信に関しての信頼性の取り決めを行うことです。
ネットワーク層では、IP(Internet Protocol)を使い目的地までデータを届けることが目的でした。IPはコネクションレス型(一方的に送る)のため、信頼性の低いプロトコルです。
そこで、通信の信頼性(データが正しく渡るための方法)について定めているのがトランスポート層です。
トランスポート層で使う主な通信プロトコルには、コネクション型の TCP(Transmission Control Protocol)とコネクションレス型の UDP(User Datagram Protocol)があります。
スポンサーリンク
TCP(Transmission Control Protocol)
TCP(Transmission Control Protocol:トランスミッション コントロール プロトコル)とは、トランスポート層で動作する信頼性の高い通信プロトコルです。
具体的なTCPの動きは次の通りです。
TCPの特徴は、データを受け取った相手が、正常にデータが届いたことを送信元に返信するところです。
送信側は、受信側からの「受け取った」という返信を確認することで、確実にデータが送られたことを確認することが出来ます。
そして、仮にデータの送信に失敗した場合は、一定時間後に再送する仕組みがあります。
このようにTCPは、まるで会話をしているような信頼性の高い通信プロトコルです。
データ送信に失敗した場合の挙動は次の通りです。
- データを送信
- 返信が返ってこないので、一定時間待機して再送する
- データを受信した受信側は受け取ったことを返信する
- 送信元は、受信側からの返信を見てデータが正しく送られたことを確認する
TCP 3ウェイハンドシェイク
TCPはコネクション型のプロトコルです。コネクション型とは、会話のように相手とやり取りをしながら行う通信のことをいいます。
データ転送を行う前に、通信相手とコネクションの確立を行います。この通信相手とのコネクションの確立を3ウェイハンドシェイクといいます。
3ウェイハンドシェイクのイメージは、下記図の通りです。
※SYNは質問、ACKは回答。
依頼/返信 | TCPヘッダ | 内容 |
接続確立要求(コンピュータA → コンピュータB) | SKY=1、ACK=0、シーケンス番号=0 | コンピュータAは、コンピュータBにコネクションの確立を要求します。TCPヘッダには、SYN:1、ACK:0、シーケンス番号は最初はランダムの値が入ります。SYNが1なので、質問を投げている形です。 |
接続確立応答/接続確立要求(コンピュータB → コンピュータA) | SKY=1、ACK=1、シーケンス番号=0 | コンピュータBは、コンピュータAからのコネクション要求に応答します。そしてコンピュータBからもコネクションの確立を要求します。TCPヘッダには、SYN:1、ACK:1が入ります。シーケンス番号は最初はランダムの値が入ります。確認応答番号は「相手から受信したシーケンス番号」+「データサイズの値」が入るのですが、3ウェイハンドシェイクでは「相手から受信したシーケンス番号」に「1」を加算した値が入ります。SYNが1、ACKが1なので、質問と回答を投げている形です。 |
接続確立応答(コンピュータA → コンピュータB) | SKY=0、ACK=1、シーケンス番号=1 | コンピュータAは、コンピュータBからのコネクション要求に応じます。これでTCPの接続が確立されました。TCPヘッダには、SYN:0、ACK:1が入ります。シーケンス番号は「相手から受信した確認応答番号」なので「1」が入ります。ACKが1なので、回答を投げている形です。 |
スポンサーリンク
TCPヘッダ
TCPで通信する時のTCPヘッダは次の通りです。TCPを使用する場合は、送信データだけではなく「送信元ポート番号」などの情報もTCPヘッダとして付与されます。
項目 | ビット数 | 説明 |
送信元ポート番号 | 16 bit | 送信元のポート番号 |
宛先ポート番号 | 16 bit | 宛先のポート番号 |
シーケンス番号 | 32 bit | 送信するデータの順番を表す番号。シーケンス番号で「このデータはデータ全体の中でどの位置のデータなのか」を判定します |
確認応答番号 | 32 bit | どの位置までデータを受信したかを表す番号 |
データオフセット | 4 bit | TCPヘッダの長さ示す値 |
予約 | 6 bit | すべてビット「0」が入る。将来の拡張のために用意されています |
コントロールフラグ | 6 bit | 下記の1ビットのフラグが存在します URG(Urgent フラグ) ACK(Acknowledgement フラグ) PSH(Push フラグ) RST(Reset フラグ) SYN(Synchronize フラグ) FIN(Fin フラグ) |
ウィンドウサイズ | 16 bit | 受信側の受信可能なデータサイズを送信側に通知するために 使用。送信側では、このフィールドにセットされたウインドウサイズを見て、送信可能な最大データサイズを判断します |
チェックサム | 16 bit | TCPヘッダとデータ部分のエラーチェックを行うために使用します |
緊急ポインタ | 16 bit | 緊急データの開始位置を示す情報 |
オプション | 可変長 | TCP 通信で機能を付加する場合に使用されるフィールド |
パディング | 可変長 | TCPヘッダの長さを32ビットの整数にするためにPaddingとして空データの 「 0 」 の値を入れることにより調整します |
UDP(User Datagram Protocol)
UDP(User Datagram Protocol:ユーザ データグラム プロトコル)とは、トランスポート層で動作する速度を優先した通信プロトコルです。
UDPはコネクションレス型のプロトコルです。相手にデータが届いたかのどうかの確認はおこなわず、一方的にデータを送ることで速度の速い通信を実現しています。そのため、多少のデータの欠落があっても高速性やリアルタイム性を重視する通信で使われています。
UDPヘッダ
UDPで通信する時の、UDPヘッダは次の通りです。UDPを使用する場合は、送信データだけではなく「送信元ポート番号」などの情報もUDPヘッダとして付与されます。
UDPはTCPと違い通信相手にデータが届いたかの確認を行わないため、UDPヘッダの内容は非常にシンプルです。
項目 | ビット数 | 説明 |
送信元ポート番号 | 16 bit | 送信元のポート番号 |
宛先ポート番号 | 16 bit | 宛先のポート番号 |
セグメント長 | 16 bit | UDPヘッダとUDPデータ領域の長さをByte単位で表示します |
チェックサム | 16bit | UDPヘッダとデータ部分のエラーチェックを行うために使用します |
OSI参照モデル 各層の役割
層(レイヤ) | 名称 | 説明 |
7層(L7) | アプリケーション層 | 利用者が使うアプリケーションが通信できるようにするため約束事を定義 |
6層(L6) | プレゼンテーション層 | 通信を行う上でのデータや画像などのデータ形式の約束事を定義 |
5層(L5) | セッション層 | 通信を確立(開始・終了)するための約束事を定義 |
4層(L4) | トランスポート層 | 通信する際の信頼性についての約束事を定義 |
3層(L3) | ネットワーク層 | データを目的地まで届けるための約束事を定義 |
2層(L2) | データリンク層 | 隣接する機器間でデータの送受信を行うための約束事を定義 |
1層(L1) | 物理層 | 電気信号などに変換するための約束事を定義 |