ネットワーク基礎

ネットワークの基礎 ~TCP/IP②トランスポート層~

復習 ~トランスポート層(レイヤ4)とは~

通信の信頼に関するプロトコル群

  • 確実な伝送orスピードどちらをとるか
  • 異常があった時の対処に関するルール
  • 通信量の調節に関するルールetc

ポート番号

  • アプリケーションを特定する為の番号(ポート番号)
  • ポート番号により1台のコンピュータ(1つのIPアドレス)で複数のアプリケーションを同時に利用することができる(セッションの多重化)
  • トランスポート層が提供するサービスの一つ
  • 通信元(ポート)⇄宛先(ポート)間で滞りなく通信を行うために定義されるプロトコル群がトランスポート層
  • ポート番号は16ビットの整数(0~65535)で定義される
  • 0~1023=ウェルノウンポート
  • インターネット標準として用途が予め決められている
  • サーバ側のポートとして使用される
  • 1024~49151=登録済みポート
  • サーバ側で登録されている
  • 例:Microsoft SQL Server:1433/1434
  • 49152~65535=ダイナミックポート
  • 誰でも自由に使用可能
  • 主に、クライアント側の送信元ポートとして使用される

代表的なウェルノウンポート

ポート番号プロトコルTCP/UDP概要
20FTP(データ転送用)TCPFile Transfer Protocol
サーバ⇄クライアント間のファイル転送プロトコル
21FTP(コントロール用)TCP
69TFTPUDPTrivial File Transfer Protocol
ユーザ名+パスワードによる認証がなく、UDPを採用した効率重視なファイル転送プロトコル
22SSHTCPSecure Shell
リモートコンピュータを安全に遠隔操作する為のプロトコル
23TelnetTCPTeletype network
リモートコンピュータを遠隔操作する為のプロトコル
25SMTPTCPSimple Mail Transfer Protocol
簡易なメール転送プロトコル
110POP3TCPPost Office Protocol Version3
メール受信用プロトコル。受信したメールは取得後、メールサーバ上から破棄される
143IMAPTCPInternet Message Access Protocol
メール受信用プロトコル。受信したメールはメールサーバ上に保存される
53DNSTCP/UDPDomain Name System
インターネット上のホスト名(ドメイン名)とIPアドレスを関連づける仕組みを提供
67DHCP(サーバ)UDPDynamic Host Configuration Protocol
ネットワーク上に接続された機器に対し、自動でIPアドレスなどの接続情報を割り振るプロトコル。
接続情報を割り振る機能を持った機器はDHCPサーバと呼ばれる
68DHCP(クライアント)UDP
80HTTPTCPHypertext Transer Protocol
サーバ⇄クライアント間のデータの送受信を担うプロトコル
インターネット上の通信等で広く使われる
443HTTPSTCPHypertext Transer Protocol Secure
HTTP通信をより安全に行う為のプロトコル
123NTPUDPNetwork Time Protocol
機器の時計機能を正しい時刻に同期させる
161SNMPUDPSimple Network Management Protocol
UDP/IPベースのネットワーク監視・管理を行う為のプロトコル。
管理コンピュータ→161、監視対象(エージェント)→162。
エージェントは異常を検知するとトラップと呼ばれる通知を管理コンピュータに送る
520RIPUDPRouting Information Protocol
経路選択(ルーティング)で用いられるプロトコル

TCP

  • TCP(Transmission Control Protocol)はIP同様インターネットにおいて標準的に利用されているプロトコルで、信頼性の高い通信を実現させるために利用される
  • 信頼性を高めるために送信元&宛先双方で状況を確認し合いながら、通信する方法をコネクション型といい、TCPもその一つである
  • 通信データはセグメントという単位に分割されて制御・送信される

TCP ~セグメント~

制御ビット

以下の6ビットで構成されるTCP通信制御に使用されるフィールド。各フィールドに1をセットすることで対応する制御情報を送信先に伝達。

  • URG:緊急対応が必要
  • ACK:ACK番号が有効
  • PSH:受信後すぐにアプリに連携せよ
  • RST:異常発生のため強制終了したい
  • SYN:接続開始したい
  • FIN:接続終了したい

追加の制御ビット(予約)

  • NS:輻輳回復保護
  • CWR:輻輳ウィンドウを小さくした
  • ECE:輻輳制御機能が有効

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

  • TCPを用いて通信を行う際は通信前の仮想のコネクション(接続)を確立する
  • 送信する為のコネクション確立は、以下の2ステップで行われる
  1. 送信元から宛先に接続したい旨を伝えるため、SYNを1にしてセグメントを送信する
  2. SYN:1のセグメントを受け取った宛先は接続を承認する場合、送信元にACKを1にしてセグメントを送り返す

※セッションとコネクションの違い

  • セッションは、具体的な一連のデータのやりとりそのもの・通信そのもの
  • コネクションは、あくまで通信ルート・道筋

※セッションとコネクションの違い ~IP電話の場合~

  1. 電話を受けた側が電話に出て、コネクション確立
  2. 会話(音声データの行き来)で、セッション確立
  3. 会話が終わって、セッション切断
  4. 電話が繋がってる必要がないので、コネクション切断

3ウェイハンドシェイク

  • TCPでは通信前に必ずコネクション(接続)を確立する為の情報のやり取りを行う(3ウェイハンドシェイク)
  • 3ウェイハンドシェイクは、以下の3ステップで行われる(送信元をA、宛先をBとする)
  1. A→Bの接続要求を伝える為、AはBにSYN:1でセグメントを送信
  2. 接続承認&B→Aに接続要求を伝える為、BはAにACK:1/SYN:1でセグメントを返送
  3. 接続承認を伝える為、AはBにACK:1でセグメントをさらに返送

TCP ~TCPセグメンテーション/MSS~

  • データ送信の際、分割・送信・(受信側で)再構成する仕組みのことを順序制御という
  • TCPセグメントとして一回に送信できる最大データ量のことを、MSS(Maximum Segment Size)という
  • MSSは3ウェイハンドシェイクで決定される
  • 経路上のMTU最小値を元にして算出される
  • TCPにおいてデータをMSSのサイズに分割し、TCPセグメントを生み出すことをTCPセグメンテーションという
  • MSS値が適切に決められていれば、IPフラグメンテーションは起きない
  • MSSはほとんどの場合、「MTUー40」で設定される(MTU:1500/MSS:1460が王道)
  • 理由は、MTUとMSSの差が「IPヘッダ(20バイト)+TCPヘッダ(20バイト)」のため

TCP ~シーケンス番号~

シーケンス番号

  • 送信元→宛先に送信する、分割データが元データと比較してどの位置にあるかを示す番号
  • 送信時に分割されたデータは、これを手掛かりに再構成される
  • 3ウェイハンドシェイクにおいては、特殊な使われ方をされる点に注意

確認応答番号(ACK番号)

  • 宛先→送信元に返信する、次に受信したいデータのシーケンス番号を送信元に示す番号
  • 送信元はこれを受け取ると「この直前までのデータは送信が成功した」と判断する
  • 3ウェイハンドシェイクにおいては、特殊な使われ方をされる点に注意

TCP ~シーケンス番号とACK番号の初期値~

  • 3ウェイハンドシェイクは、その後の通信で用いるシーケンス番号の初期値を決定する役割も持つ
  • 3ウェイハンドシェイクにおいて、シーケンス番号とACK番号(確認応答番号)は、以下のルールで決まる(送信元をA、宛先をBとする)
  1. A→B
    1. 接続要求(SYN:1)を送る際、シーケンス番号にランダム値を設定する
  2. B→A
    1. 接続要求に応える(ACK:1)際、ACK番号に「受け取ったシーケンス番号+1」を設定する
    2. 接続要求(SYN:1)を送り返す為、シーケンス番号にはランダム値を設定する
  3. A→B
    1. 接続要求に応える(ACK:1)ため、ACK番号に「受け取ったシーケンス番号+1」を設定する

TCP ~データの転送(順序制御)~

順序制御によるデータ転送のポイントは以下

  • 送信元ホストは、一番目に送るデータのシーケンス番号およびACK番号に3ウェイハンドシェイクで決めた値をそれぞれ設定する
  • 宛先ホストはデータを受信すると、確認応答用のセグメント(サイズ:0/ACK:1)を送り返す
  • 宛先ホストも送信元ホストも、データを送り返す際は以下のルールでシーケンス番号およびACK番号を設定する
  • シーケンス番号:送られてきたACK番号
  • ACK番号:送られてきたシーケンス番号+送られてきたデータのサイズ

TCP ~アクシデントへの対応(再送制御)~

  • 確認応答を受信できない場合、送信元はそのデータの転送は失敗したとしてもう一度送り直す(再送制御)
  • TCPでは「この時間待っても応答がなければ送信失敗とみなして再送する」という再送タイマーが設定される
  • この時間はネットワークによって異なり、具体的には3ウェイハンドシェイクの際に最適な時間を算出・設定する
  • 一定回数再送しても確認応答の受信がない場合、送信元は接続を強制終了する

TCP ~送信の効率化(ウィンドウ制御)~

  • 応答を待たずに次々と送信する為の技術
  • ウィンドウと呼ばれる送信可能なサイズ幅を管理しつつ、確認応答を待たずに次々とデータを送信する送信側の機能のことをウィンドウ制御という
  • 受信側データを一時保存できる領域(バッファ)を持たせることで、通信速度をUPできる
  • バッファ:データを一時保存できる領域
  • 初期ウィンドウサイズは、3ウェイハンドシェイクで送信元へと伝えられる
  • ウィンドウ:確認応答なしで送れるデータの範囲
  • スライディングウィンドウ:ウィンドウの範囲が一つ上に持ち上がること
  • 送った瞬間にスライディングウィンドウが上がらないのは、もし送れなかった場合、再送しなければならないため
  • あくまでウィンドウ内は、送る権利を持ったもの
  • 再送する可能性があったら、残しておかなけらばならない

TCP ~適切な送信量を調整(フロー制御/輻輳制御)~

フロー制御(流量制御)

  • 高負荷で処理がもたつき、バッファが溢れそうな時などにウィンドウサイズを調整することで受信量(=送信側の送信量)をコントロールする、受信側の機能のことをフロー制御(流量制御)という

輻輳制御

  • ウィンドウサイズ分一気に送ってしまうと、受信側の状況によっては処理しきれず、輻輳(ネットワーク上の混雑)を起こしてしまうことがあるため、輻輳が起きないように慎重にデータを送信していく機能輻輳制御という
  • 輻輳ウィンドウ:輻輳を起こさない為の送信量調整用のウィンドウ
  • 受け取った確認応答用のセグメントのサイズだけ、輻輳ウィンドウのサイズを拡張する

スロースタート

  • 輻輳制御の中心機能
  • 最初は輻輳ウィンドウを1セグメント分で送信し、徐々に輻輳ウィンドウを広げていく(=送信量を増やしていく)ことで、受信側の輻輳を防ぐ
  • 輻輳ウィンドウは、1→2→4→8倍々で大きくなっていく
  • タイムアウトが起こると、輻輳ウィンドウを初期値(1セグメント分)に戻してから送信を再開する

TCP ~コネクションの終了~

  • 接続の終了は、3ウェイハンドシェイクと同様に以下の3ステップで行われる(送信元をA、宛先をBとする)
  1. A→Bの接続終了要求を伝えるため、AはBにFIN:1でセグメントを送信する
  2. 接続終了承認&B→Aに接続終了要求を伝えるため、BはAにACK:1/FIN:1でセグメントを送り返す
  3. 接続終了承認を伝えるため、AはBにACK:1でセグメントをさらに送り返す

UDP

  • UDP(User Datagram Protocol)は、TCPのようなコネクション・通信データの制御や管理といった概念が一切ない、指定されたポート番号に何も考えずにデータを送るプロトコル※
  • この通信方式はコネクションレス型と呼ばれる
  • UDPは信頼性を考慮しないベストエフォード型の通信ともいえる
  • 信頼性が必要ならば、上位のアプリケーション層で補うしかない
  • UDPヘッダは非常に単純な構造であり、TCPとは扱うデータの性質も異なるため、UDPで扱うデータの単位はデータグラムと呼ばれる
  • オーバーヘッド(データ転送に付随して発生する処理負荷)が小さいため、処理スピードが高速になる
  • そのため、IP電話や動画ストリーミング、分割の不要な小さいデータの転送などで活躍する

※何もしないとはいっても、転送の過程でデータが壊れていないか程度のチェックは、UDPヘッダのチェックサムで行う

TCPとUDPの比較

TCP:信頼性を重視

  • コネクション型(信頼性が高い)
    • コネクションの確立・終了を行う
    • 通信の品質管理機能・回復機能を持つ
    • ウィンドウ制御や輻輳制御で柔軟な通信が可能
  • オーバーヘッドが大きい(高速性が低い)
  • データの単位:セグメント
  • シーケンス番号をはじめ、ヘッダで様々な情報を扱う
  • 用途:メールやファイル転送など、品質を求める通信

UDP:スピードを重視

  • コネクションレス型(信頼性が低い/ベストエフォード型)
    • コネクションの概念がない
    • 通信の制御を行わず、多少のデータ欠損もいとわない
  • オーバーヘッドが小さい(高速性が高い)
  • データの単位:データグラム
  • ヘッダは非常に単純な構造
  • 用途:IP電話や動画ストリーミングなど、速度を求める通信
タイトルとURLをコピーしました