レイヤ4: トランスポート層
- トランスポート層: 通信における信頼性に関するプロトコル群
- 通信の方式、通信状態の確認方法、異常発生時の対処など通信が期待通り行わられるためのプロトコル群が定義される
ポート番号
- アプリケーションを特定するための番号のこと
- ポート番号により1台のコンピュータ(1つのIPアドレス)で複数のアプリケーションを同時に利用することができる ⇨ セッションの多重化
- 16ビットの整数(0~65535)で定義される
0 ~ 65535(16ビット)
ポート番号 | 種類 | 詳細 |
---|---|---|
0~1023 | ウェルノウンポート | インターネット標準として管理されている予約済ののポート番号 サーバー側のポートとして使用される 例)SMTP(メールサーバ):25 |
1024~49151 | 登録済みのポート | サーバー側で予め登録されているポート番号 例)Microsoft SQL Server:1433/1434 |
49151~65536 | ダイナミックポート | 誰もが自由に使用可能なポート番号 主にクライアント側の送信元ポート番号として使用される |
TCPとUDP
- TCPはコネクション型の通信方法で
- UDPはデータダイヤグラム型の通信方法
TCP | UDP | |
---|---|---|
通信方法 | コネクション型 | データダイヤグラム型 |
特徴 | 確実性重視 | 即時性重視 |
信頼性 | 髙い | 低い |
利用速度 | 低速 | 高速 |
利用例 | Webサイト閲覧、メールなど 一般的にインターネットを利用する方法 |
IP電話、映像配信、Web会議など リアルタイム性を重視する方法 |
TCP(Transmission Control Protocol)
- IP同様インターネットにおいて標準的に利用されているプロトコルで信頼性の高い通信を実現するために使用
- コネクション型: 信頼性を高めるために送信元&宛先双方で状況を確認しあいながら通信する方法
- 送信データはセグメントという単位に分割されて制御・送信される
コネクションの確立(3ウェイハンドシェイク)
- TCPを用いて通信を行う際は通信前に仮想のコネクション(接続)を確立する
- 送信するためのコネクション確率は以下の2ステップで行われる
①送信元から宛先に接続したい旨を伝えるためSYNを1にセグメントを送信する
②SYN:1のセグメントを受け取った宛先は接続を承認する場合、送信元にACKを1にしてセグメントを送り返す - TCPでは通信前に必ずコネクション(接続)を確率するための情報のやり取りを行い、これを3ウェイハンドシェイクと呼ぶ
- 3ウェイハンドシェイクは以下の3ステップで行われる
①A⇨Bの接続要求に応えるため、AはBにSYM:1でセグメントを送信する
②接続承認&B⇨Aの接続要求を伝えるため、BはAにACK:1/SYN:1でセグメントを送り返す
③接続承認を伝えるため、AはBにACK:1でセグメントを更に送り返す
TCPセグメンテーション/MSS
- TCPセグメントとして1回に送信できる最大データ量をMSS(Maximum Segment Size)という
- MSSは3ウェイハンドシェイクで決定される
- TCPにおいてデータをMSSサイズに分割し、TCPセグメントを生み出すことをTCPセグメンテーションという
- MSS値が適切に決められていればIPフラグメンテーションは起きない
シーケンス番号
- 送信元⇨宛先に送信する、分割データが元データと比較してどの位置にあるかを示す番号
- 送信時に分割されたデータはこれを手がかりに再構成される
※ 3ウェイハンドシェイクにおいては特殊な使い方をされる点に注意
確認応答番号(ACK番号)
- 宛先⇨送信元に返信する、次に受信したいデータのシーケンス番号を送信元に示す番号
- 送信元はこれを受け取ると『この直前までのデータは送信が成功した』と理解する
※ 3ウェイハンドシェイクにおいては特殊な使い方をされる点に注意
データの転送(順序制御)
- 順序制御によるデータ転送におけるポイント
①送信元ホストは一番目に送るデータのシーケンス番号及びACK番号に3ウェイハンドシェイクで決めた値をそれぞれ設定する
②宛先ホストはデータを受信すると確認応答用のセグメント(サイズ:0/ACK:1)を送り返す
③送信元ホストも宛先ホストもデータを送り返す際は以下のルールでシーケンス番号及びACK番号を設定する - シーケンス番号: 送られてきたACK番号
- ACK番号: 送られてきたシーケンス番号+送られてきたデータサイズ
アクシデントへの対応(再送制御)
- 確認応答を受信できない場合、送信元はそのデータの転送は失敗したとしても一度送り直す(再送制御)
- TCPでは『この時間待っても応答がなければ送信失敗とみなして再送する』とう再送タイマーが設定される
- 一定回数再送しても確認応答の受信がない場合、送信元は接続を強制終了する
送信の効率化(ウィンドウ制御)
- バッファ: データを一時保存できる領域
フロー制御(流量制御)
- 高負荷で処理がもたつきバッファが溢れそうな時などにウィンドウサイズを調整することで(=送信側の送信量)をコントロールする、受信側の機能のことをフロー制御(流量制御)という
通信障害
- 大量データ通信などが原因でネットワークが混雑し、データ通信が困難になることを輻輳という
- 信号は想定より早くor遅く宛先に到着することがあり、これをジッタという
輻輳制御
- ウィンドウサイズ分いっきに送ってしまうと受信側の状況によっては処理しきれず輻輳(ネットワーク上の混雑を)起こしてしまうことがあるため、輻輳が起きないように慎重にデータを送信していくこと
スロースタート
- 輻輳制御の中心機能
- 最初は輻輳ウィンドウを広げていく(=送信量を増やしていく)ことで受信側の輻輳を防ぐ
- 輻輳ウィンドウは1⇨2⇨4⇨8と倍で大きくなっていく
- タイムアウトが起こると輻輳ウィンドウを初期値に戻してから送信を再開する
UDP(User Datagram Protocol)
- TCPのようなコネクション・送信データの制御や管理といった概念がなく、指定されたポート番号にデータを送るプロトコル
- UDPは信頼性を考慮しないベストエフォーど型の通信とも言える
- オーバヘッド(データ転送に付随して発生する処理負荷)が小さいため処理スピードが高速ないなる
TCPとUDPの比較
TCP(信頼性を重視)
- コネクション型(信頼性が高い)
①コネクションの確率・終了を行う
②通信の品質管理機能・回復機能を持つ
③ウィンドウ制御や輻輳制御で柔軟な通信が可能 - オーバーヘッドが大きい(高速性が低い)
- データの単位=セグメント
- シーケンス番号をはじめ、ヘッダで様々な情報を扱う
- 用途: メールやファイル転送など、品質を求める通信
UDP(スピードを重視)
- コネクションレス型(信頼性が低い/ベストエフォード)
①コネクションの概念がない
②通信の制御を行わず、多少のデータ結損も厭わない - オーバーヘッドが小さい(高速性が高い)
- データの単位=データグラム
- ヘッダは非常に単純な構造
- 用途: IP電話やストリーミングなど、速度を求める通信
参考サイト
【CCNA講座】「TCP」「UDP」を日本一易しく解説!【インフラエンジニア基礎入門 #6】
TCP/IPとは?通信プロトコルの階層モデルを図解で解説