CCNA学習#5未経験の方向け

復習


・トランスポート層(レイヤ4)とは、通信における信頼性に関するプロトコル群です。
・通信の方式、通信状態の確認方法、以上発生時の対処など通信が期待通り行われるためのプロトコルを定義しています。

前回までは、ホスト同士の通信IPアドレスについて、まとめていました。
IPアドレスが郵便番号、ポート番号が住所でかみ砕いて理解しましょう。

1. トランスポート層


今回は、トランスポート層についてのお話になります。

2. ポート番号

・アプリケーションを特定するための番号をポート番号といいます。

・ポート番号により1台のコンピュータ(1つのIPアドレス)で複数のアプリケーションを同時に利用することができます。
 この機能をセッションの多重化といいます。
 トランスポート層が提供するサービスの1つとされています。

・ポート番号は16ビットの整数で定義されます。

・0〜23はウェルノウンポートと呼ばれ、イーサネット標準として用途が決められています。
 1024〜49151は登録済みポートと呼ばれ、サーバー側で登録されています。

・49152〜65535はダイナミックポートと呼ばれ、誰でも自由に使うことが出来ます。

3. TCP


・TCP(transmission Control protocol)はIP同様インターネットにおいて標準的に利用されているプロトコルで信頼性の高い通信を実現するために使用されています。
 信頼性を高めるために、送信元と宛先双方で状況を確認しあいながら、通信する方式をコネクション型といいます。

・送信データはセグメントという単位に分割されて、制御と送信がされます。

3-1. 制御ビット

URG/ACK/PSH/RST/SYN/FINの6ビットで構成される、TCP通信制御に使用されるフィールドになります。

各フィールドに1をセットすることで、対応する制御情報を伝達することができます。

3-2. TCP コネクションの確立(3ウェイハンドシェイク)

・TCPを用いて通信を行う際は、通信前に仮想のコネクションを確立します。

・送信するためのコネクションの確立は2ステップで行われます。

・送信元から宛先に、接続したい旨を伝えるため、SYNを1にしてセグメントを送信します。

・SYN:1のセグメントを受け取った宛先は、接続を承認する場合、送信元にACKを1にセグメントを送り返します。

・TCPでは通信前に必ず、コネクション(接続)を確立するための情報のやり取りを行います。
これを3ウェイハンドシェイクと呼びます。

・3ウェイハンドシェイクは以下の3ステップで行われます。
(送信元をA,宛先をBとします。)


①A→Bの接続要求を伝えるため、AはBにSYN:1でセグメントを送信します。

②接続承認&B→Aの接続要求を伝えるため、BはAにACK:1/SYN:1でセグメントを送り返します。

③接続承認を伝えるため、AはBにACK:1でセグメントを更に送り返します。

3-3. TCP~TCPセグメンテーション・MSS

・TCPセグメントとして、一回に送信できる最大のデータ量をMSS(maximum Segment Size)と言います。

・MSSは3ウェイハンドシェイクで決定されます。経路上のMTUの最小値をもとにして、算出されます。

・TCPにおいてデータをMSSのサイズに分割し、TCPセグメントを生み出すことをTCPセグメンテーションと言います。

・MSS値が適切に決められていればIPフラグメンテーションはおきません。

3-4. TCP シーケンス番号とACK番号の初期値

・3ウェイドハンドシェイクにおいて、シーケンス番号とACK番号(確認応答番号)は以下のルールで決めます。
(送信元をA、宛先をBとします)

①A→B 接続要求SYN:1を送る際に、シーケンス番号にランダム値を設定します。

②B→A 接続要求にこたえる(AKC:1)際に、受け取ったシーケンス番号+1を設定します。
接続要求(SYN:1)を送り返すため、シーケンス番号にはランダムな値を設定します。

③A→B 接続要求応える(AKC:1)ため、AKC番号に受け取ったシーケンス番号+1を設定します。

・3ウェイドハンドシェイクはそのあとの通信で用いるシーケンス番号の初期値を決定する役割も持ちます。

3-5. TCP データ転送(順序制御)

・順序制御による、データ転送におけるポイントは以下になります。

・送信元ホストは1番目に送るデータのシーケンス番号およびACK番号に、3ウェイドハンドシェイクで決めた値をそれぞれ設定します。

・宛先ホストはデータを受信すると確認応答用のセグメントを送り返します。

・送信元ホストも宛先ホストも、データを送り返す際は以下のルールでシーケンス番号およびACK番号を設定しています。


シーケンス番号:送られてきたACK番号

ACK番号:送られてきたシーケンス番号+送られてきたデータサイズ

3-6. TCP アクシデントへの対応(再送制御)

・確認応答を受信できない場合、送信元はそのデータは転送に失敗したとしてもう一度送りなおします。(再送制御)

・TCPでは「この時間待っても応答がなければ送信失敗とみなして再送する」という再送タイマーが設定されています。
 この待機時間はネットワークによって異なっており、具体的には3ウェイハンドシェイクの際に最適な時間を算出して、設定しています。

・一定回数再送しても、確認応答の受信がない場合、送信元は接続を強制終了します。

3-7. TCP コネクション終了

・接続の終了は3ウェイハンドシェイクと同様に以下の3ステップで行われます。

①A→Bの接続要求を伝えるため、AはBにFIN:1でセグメントを送信します。

②接続終了承認&B→Aの接続要求を伝えるため、BはAにACK:1/FIN:1でセグメントを送り返します。

③接続終了承認を伝えるため、AはBにACK:1でセグメントを送り返します。

4. UDP

UDPは高速な通信を実現するコネクションレス型のプロトコルになります。

・UDPはTCPのようなコネクション・送信データの制御や管理といった概念が一切ありません。
 指定されたポート番号に何も考えずにデータを送るプロトコルでこの通信方式はコネクションレス型と呼ばれています。

・UDPは信頼性を考慮しない、ベストエフォート型の通信とも言え、信頼性が必要ならば上位のアプリケーション層で補うしかありません。

・UDPヘッダは非常に単純な構造であり、TCPとは扱うデータの性質も異なるため、UDPで扱うデータの単位はデータグラムと呼ばれています。

・オーバーヘッド(データ転送に付随して発生する処理負荷)が小さいため、処理スピードが非常に高速になります。


そのため、IP電話や動画ストリーミング、分割の不要な小さいデータなどで活躍します。

5. まとめ TCPとUDPの比較


5-1. TCP

・コネクション型(信頼性が高いです。)

・コネクションの確立。終了します。
 通信の品質管理機能・回復機能を持っています。
 ウィンドウ制御や輻輳制御で臨機応変な通信が可能になっています。

・オーバーヘッドが大きい(高速性が低いのが特徴)

・データの単位=セグメント

・シーケンス番号をはじめ、ヘッダで様々な情報を扱います。

・用途:メールやファイル転送など、品質を求める通信になります。

5-2. UDP

・コネクションレス型(信頼性が低い/ベストエフォート)
 コネクションの概念がありません。
 通信の制御を行わず、多少のデータ欠損も厭わないのが特徴です。

・オーバーヘッドが小さい(高速性が非常に高いです。)

・データの単位=データグラム

・ヘッダは非常に単純な構造になっています。

・用途:IP電話やストリーミングなど速度を求める通信で利用されています。


上記のTCPとUDPの特徴の違いを把握し、理解しましょう。