ネットワーク

【OSI参照モデル】トランスポート層とは

2020年2月24日

トランスポート層

トランスポート層とは、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は、まるで会話をしているような信頼性の高い通信プロトコルです。

TCP再送信

データ送信に失敗した場合の挙動は次の通りです。

  1. データを送信
  2. 返信が返ってこないので、一定時間待機して再送する
  3. データを受信した受信側は受け取ったことを返信する
  4. 送信元は、受信側からの返信を見てデータが正しく送られたことを確認する

TCP 3ウェイハンドシェイク

TCPはコネクション型のプロトコルです。コネクション型とは、会話のように相手とやり取りをしながら行う通信のことをいいます。

データ転送を行う前に、通信相手とコネクションの確立を行います。この通信相手とのコネクションの確立を3ウェイハンドシェイクといいます。

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ヘッダとして付与されます。

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ヘッダとして付与されます。

UDPはTCPと違い通信相手にデータが届いたかの確認を行わないため、UDPヘッダの内容は非常にシンプルです。

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) 物理層 電気信号などに変換するための約束事を定義

helpful