【コンピュータネットワーク】コンピュータネットワークの基礎知識まとめ(秋採用)

記事ディレクトリ


序文

秋採用ノートの概要のコンピュータネットワーク
の著者はchatgptによって書かれているため、一部の回答には方法があるかもしれません(GPTの3.5バージョンにはいくつかの欠陥があります)、ほとんどの回答は書き終えた後に修正されています、もし矛盾があれば学生全員に指摘してほしいと思います。
参考教科書:コンピュータネットワーク 第7版
2023.7.25 初回更新

コンピュータネットワークのメモ

このメモは、TCP および HTTP プロトコルに焦点を当てています。

TCPとUDPの違いは何ですか

ここに画像の説明を挿入

TCP (Transmission Control Protocol) と UDP (User Datagram Protocol) は、コンピュータ ネットワークで一般的に使用される 2 つのトランスポート層プロトコルです

TCP は、信頼性の高いデータ送信を提供する接続指向のプロトコルです。シーケンス番号、確認番号、再送信メカニズム、輻輳制御などのテクノロジーを使用して、信頼性の高いデータ送信を保証します。TCP は接続を確立し、データを送信し、データの順序と整合性を保証し、送信完了後に接続を解放します。TCPは、ファイル送信、電子メール、Webブラウジングなど、データ伝送の高い信頼性が要求されるアプリケーションに適しています。

UDP は、信頼性の低いデータ転送を提供するコネクションレス型プロトコルです。UDP はデータをデータグラムにカプセル化します。各データグラムは独立しており、順序はなく、確認や再送信のメカニズムもありません。UDP は接続を確立する必要がなく、データを直接送信します。UDP は、リアルタイムのオーディオやビデオの送信、オンライン ゲームなど、リアルタイム要件が高く、データ信頼性要件が比較的低いアプリケーションに適しています。

違い:

  1. 接続性: TCP はコネクション型プロトコルであり、UDP はコネクションレス型プロトコルです。TCP は通信する前に接続を確立する必要がありますが、UDP はデータを直接送信します。
  2. 信頼性: TCP は信頼性の高いデータ送信を提供しますが、UDP は信頼性の保証を提供しません。TCP は確認応答および再送信メカニズムを使用してデータの整合性と信頼性を確保しますが、UDP はこれらのメカニズムを提供しません。
  3. シーケンス: TCP はデータ送信の順序を保証しますが、UDP はデータの順序を保証しません。TCP はパケットを並べ替えて、データが送信された順序で確実に受信されるようにしますが、UDP はパケットを並べ替えません。
  4. 輻輳制御: TCP には、ネットワークの輻輳を回避するために、ネットワーク状況に応じてデータ送信速度を調整できる輻輳制御メカニズムがあります。UDP には輻輳制御メカニズムがなく、データ パケットの送信速度はアプリケーションによって決定されます。
  5. 伝送効率: UDP は伝送オーバーヘッドが低く、伝送効率が高いのに対し、TCP は伝送オーバーヘッドが大きいです。TCP は接続の確立、状態情報の維持、エラー検出を実行する必要があるため、これらの追加のオーバーヘッドが伝送効率の低下につながります。
  6. アプリケーション シナリオ: TCP は、ファイル転送、電子メール、Web ブラウジングなど、データ送信の高い信頼性が必要なアプリケーションに適しています。UDP は、リアルタイムのオーディオやビデオの送信、オンライン ゲームなど、リアルタイム要件が高く、データ信頼性要件が比較的低いアプリケーションに適しています。
  7. サイズ制限: TCP には固定のパケット サイズ制限がなく、ネットワークの状態やアプリケーションの要件に応じて調整できます。UDP のパケット サイズは、ネットワークの最大送信単位 (MTU) によって制限され、通常は 1500 バイトです。
  8. 接続数: TCP は 1 対 1、1 対多、および多対 1 の接続をサポートできますが、UDP は通常、1 対 1 または 1 対多の単純な通信に使用されます。

特定のアプリケーション要件に応じて、TCP を使用するか UDP を使用するかを選択する必要があります。データ送信の信頼性と順序性が重要な場合は、TCP を選択できます。リアルタイム性と伝送効率がより重要な場合は、UDP を選択できます。

TCPとUDPの2つのプロトコルをベースにした上位層プロトコルとは何ですか?

TCP プロトコルに基づく上位層プロトコルは次のとおりです。

  1. HTTP (ハイパーテキスト転送プロトコル): Web ブラウザと Web サーバーの間でハイパーテキスト データを送信するために使用され、Web アプリケーションで最も一般的に使用されるプロトコルです。
  2. FTP (ファイル転送プロトコル): クライアントとサーバーの間でファイルを転送するために使用されます。
  3. SMTP (Simple Mail Transfer Protocol): メール クライアントとメール サーバーの間で電子メールを転送するために使用されます。
  4. POP3 (Post Office Protocol Version 3): メール サーバーから電子メールを受信するために使用されます。
  5. IMAP (Internet Message Access Protocol): メール クライアントとメール サーバー間の電子メールの管理に使用されます。

UDP プロトコルに基づく上位層プロトコルは次のとおりです。

  1. DNS (Domain Name System): ドメイン名を IP アドレスに解決するために使用され、コンピュータがドメイン名を通じてインターネット リソースにアクセスできるようになります。

  2. DHCP (Dynamic Host Configuration Protocol): IP アドレスおよびその他のネットワーク構成情報をコンピュータに自動的に割り当てるために使用されます。

  3. TFTP (Trivial File Transfer Protocol): クライアントとサーバーの間でファイルを転送するために使用されます。FTP に似ていますが、より単純です。

  4. SNMP (Simple Network Management Protocol): ネットワーク デバイス間の管理と監視に使用されます。

  5. RTP (Real-time Transport Protocol): リアルタイム アプリケーションでオーディオおよびビデオ データを送信するために使用されます。

TCPとUDPはどの分野でより多く使用されていますか?

TCP の適用分野:

  1. Web ブラウジング: TCP は、Web コンテンツの信頼性の高い送信を保証するために HTTP プロトコル データの送信に広く使用されています。
  2. ファイル転送: TCP の信頼性と逐次的な性質により、TCP は FTP や SFTP などのファイル転送プロトコルに推奨されます。
  3. 電子メール: TCP の信頼性と接続性により、TCP は SMTP や POP3 などの電子メール プロトコルの基礎となります。
  4. リモート ログイン: TCP は、リモート端末の信頼性の高い接続を確保するために、SSH (セキュア シェル) などのリモート ログイン プロトコルで使用されます。
  5. データベース アクセス: TCP は、データの信頼性の高い送信を保証するために、MySQL、PostgreSQL などのデータベース アクセス プロトコルに使用されます。

UDP の適用分野:

  1. リアルタイムのオーディオとビデオの送信: UDP は、遅延が少なく、送信効率が高いため、VoIP (Voice over IP) やビデオ会議などのリアルタイムのオーディオとビデオの送信に推奨されるプロトコルです。
  2. オンライン ゲーム: UDP は、遅延が短く、伝送速度が速く、リアルタイム要件が高いゲーム シナリオに適しているため、オンライン ゲームで広く使用されています。
  3. リアルタイム データ送信: UDP は、センサー データや株価などのリアルタイム データの高速送信が必要なアプリケーションに適しています。
  4. DNS 解決: UDP はドメイン ネーム システム (DNS) 解決プロセスで使用され、ドメイン名を IP アドレスに迅速に解決します。
  5. ブロードキャストとマルチキャスト: UDP はブロードキャストとマルチキャスト機能をサポートしており、マルチポイント通信やストリーミング メディア送信に適しています。

TCP は信頼性の高い伝送を実現するためにどのようなテクノロジーを使用していますか? (TCPが確実な伝送を実現する仕組み)

信頼性を実現するために TCP で使用される主な手法のいくつかは次のとおりです。

  1. シーケンス番号と確認メカニズム: TCP はデータを小さなデータ ブロックに分割し、各データ ブロックに一意のシーケンス番号を割り当てます。受信側は、受信確認セグメントを送信して受信データを確認します。送信者は、受信した確認セグメントに従って、どのデータが受信されたか、どのデータを再送信する必要があるかを判断します。

  2. タイムアウト再送信: 送信者が指定時間内に確認応答セグメントを受信しない場合、データ損失とみなし、データを再送信します。タイムアウト期間は、ネットワークの状態や輻輳レベルに応じて動的に調整されます。

  3. スライディング ウィンドウ: TCP は、スライディング ウィンドウ メカニズムを使用して、送信者がデータを送信する速度を制御します。スライディング ウィンドウのサイズは、受信側の利用可能なバッファ サイズとネットワークの混雑度によって異なります。送信側はスライディング ウィンドウの範囲内でのみデータを送信でき、受信側はセグメントを確認することでスライディング ウィンドウの位置を更新します。

  4. 輻輳制御: TCP は輻輳制御アルゴリズムを使用してネットワークの輻輳を回避します。送信レートを動的に調整することでネットワークの輻輳を監視し、ネットワークのフィードバックに基づいて対応する調整を行います。

  5. 並べ替えと再構築: TCP は、ネットワーク内のセグメントの並べ替えと再構築を処理できます。受信したメッセージ セグメントをシーケンス番号に従って並べ替えて再組み立てし、データの正確性を保証します。

  6. パリティ チェックサム: TCP はデータを送信するときにチェックサムを計算し、データ セグメントにチェックサムを追加します。データを受信すると、受信側はチェックサムを再計算し、メッセージ セグメント内のチェックサムと比較して、データが間違っているか破損しているかを検出します。

タイムアウト再送信とタイムアウトタイマーについての話

タイムアウト再送信とタイムアウト タイマーは、信頼性の高いデータ送信のための TCP プロトコルの 2 つの重要なメカニズムです。

タイムアウト再送とは、送信者がデータを送信した後、一定時間内に確認応答 (ACK) メッセージを受信しない場合、データが失われたとみなし、タイムアウト再送メカニズムをトリガーすることを意味します。送信者は、信頼性の高いデータ送信を保証するために、未確認のデータを再送信します。時間外再送信の時間は通常、タイムアウト タイマーによって制御されます。

タイムアウト タイマーは、送信者が時間を計測するために使用するタイマーです。送信者がデータを送信すると、タイムアウト タイマーが開始され、タイムアウト期間が設定されます。タイムアウト期間内に確認メッセージが受信されなかった場合、タイムアウト タイマーがトリガーされ、送信者はデータが失われたとみなしてタイムアウト再送信メカニズムをトリガーします。タイムアウト タイマーの時間は通常、さまざまなネットワーク環境に適応するために輻輳制御アルゴリズムによって動的に調整されます。(ネットワークの輻輳がひどい場合、送信者はパケット損失をより早く検出し、タイムアウト再送信メカニズムをトリガーするために、タイムアウト タイマーをより短い時間に設定します。逆に、ネットワークの輻輳が低い場合、送信者はタイムアウトします。不必要な再送信を避けるために長めに設定されています。)

スライディング ウィンドウ コントロールについての話

スライディング ウィンドウ制御は、信頼性の高いデータ送信のためのウィンドウ ベースのフロー制御メカニズムです。送信者と受信者間のウィンドウを介したデータの送信を制御します。

スライディングウィンドウ制御の原理は次のとおりです。

  1. 送信ウィンドウ: 送信者は、送信できるデータ セグメントの範囲を表す送信ウィンドウを維持します。送信ウィンドウのサイズはネットワークの帯域幅と遅延に依存し、ネットワークの状態に応じて動的に調整できます。
  2. 受信ウィンドウ: 受信機は、受信機が受信できるデータ セグメントの範囲を表す受信ウィンドウを維持します。受信ウィンドウのサイズは、受信機の処理能力とバッファ サイズによって異なります。
  3. ウィンドウ スライディング: データを送信する際、送信側はデータを複数のデータ セグメントに分割し、それらを受信側に順番に送信します。送信者は、受信者がデータが正常に受信されたことを確認する確認メッセージを送信するのを待ちます。受信者がデータ セグメントの受信を確認すると、送信者は送信ウィンドウを前方にスライドさせて、より多くのデータを送信できるようになります。
  4. 確認応答と再送信: データ セグメントを受信した後、受信側は送信側に確認メッセージを送信します。送信者が一定期間内に確認応答を受信しない場合、データ セグメントが失われたとみなして再送信します。送信者は、データ ストリーム全体を再送信することなく、失われたデータ セグメントを選択的に再送信できます。

スライディング ウィンドウ制御のワークフローは次のとおりです。

  1. 送信者はデータを複数のデータ セグメントに分割し、ウィンドウ サイズに従って順次送信します。
  2. データ セグメントを受信した後、受信側はそれを受信バッファに格納し、送信側に確認メッセージを送信します。
  3. 確認メッセージを受信した後、送信者は送信ウィンドウを前方にスライドさせて、より多くのデータを送信できるようにします。
  4. 送信者が一定期間内に確認応答を受信しない場合、データ セグメントが失われたとみなして再送信します。

スライディングウィンドウ制御により、送信側と受信側はウィンドウのサイズとスライディングの速度に応じてデータ送信を制御できます。このメカニズムにより、さまざまなネットワーク環境や条件に適応しながら、データ伝送の効率と信頼性を向上させることができます。

要約すると、スライディング ウィンドウ制御は、送信ウィンドウと受信ウィンドウを介したデータの送信を制御します。送信者は受信者の確認応答に基づいてウィンドウをスライドさせ、より多くのデータを送信できるようにします。受信者は、受信ウィンドウのサイズに従ってデータが正常に受信されたことを確認し、送信者に確認メッセージを送信します。このメカニズムを通じて、スライディング ウィンドウ制御はデータ送信の効率と信頼性を向上させることができます。

引き違い窓が大きすぎたり小さすぎたりする危険性

スライディング ウィンドウが大きすぎたり小さすぎたりすると、データ送信の効率と信頼性に悪影響が生じます。

  1. スライディング ウィンドウが大きすぎる:
    • 帯域幅の無駄: スライディング ウィンドウが大きすぎる場合、送信者は大量のデータ セグメントを継続的に送信し、受信者はこれらのデータ セグメントを時間内に処理して確認できない可能性があります。これにより、受信側でバッファ オーバーフローが発生し、データ損失が発生し、ネットワーク帯域幅が浪費されます。
    • 輻輳の増加: スライディング ウィンドウが大きすぎると、ネットワークの輻輳が増加します。送信者が大量のデータ セグメントを連続して送信すると、ネットワークが混雑し、遅延の増加やパケット損失の増加につながる可能性があります。これにより、全体的な伝送効率と信頼性が低下します。
  2. スライディング ウィンドウが小さすぎる:
    • 低い伝送効率: スライディング ウィンドウが小さすぎる場合、送信者は毎回少量のデータ セグメントしか送信できず、次のデータ バッチを送信する前に受信者が確認メッセージを送信するまで待つ必要があります。これにより、送信者はネットワーク帯域幅を十分に活用できなくなり、データ送信の効率が低下します。
    • 遅延の増加: スライディング ウィンドウが小さすぎると、データ送信の遅延が増加します。送信側は受信側の確認応答情報を待つ必要があるため、送信側の待ち時間が長くなり、データ送信時間が長くなります。

したがって、スライディング ウィンドウのサイズは、ネットワークの帯域幅、遅延、混雑に応じて合理的に設定する必要があります。ウィンドウが大きすぎると、帯域幅の浪費や輻輳の増加につながる可能性があり、ウィンドウが小さすぎると、非効率な送信や遅延の増加につながる可能性があります。適切なウィンドウ サイズを使用すると、効率的で信頼性の高いデータ送信を実現できます。

スライディング ウィンドウはどのようにしてフロー制御を実現するのでしょうか?

以下は、フロー制御を実現するためのスライディング ウィンドウの基本原理です。

  1. 送信者は送信ウィンドウのサイズを維持します。送信者は、送信ウィンドウを維持することによって送信されるデータの量を制御します。送信ウィンドウのサイズはネットワークの帯域幅と遅延に依存し、ネットワークの状態に応じて動的に調整できます。
  2. 受信機は受信ウィンドウのサイズを維持します。受信機は、受信ウィンドウを維持することによって自身の処理能力とバッファ サイズを制御します。受信ウィンドウのサイズは、受信機が現在受信できるデータの量を示します。
  3. 送信者は、受信者の受信ウィンドウ サイズに従ってデータを送信します。送信者は、受信者の受信ウィンドウ サイズに従って、送信できるデータの量を決定します。送信者は送信ウィンドウ内でのみデータを送信できますが、受信ウィンドウのサイズを超えることはできません。
  4. 受信者はウィンドウ サイズ情報を送信者に送信します。受信者は、受信ウィンドウ サイズ情報を確認メッセージに含めて送信者に送信します。このようにして、送信者は受信者の受信ウィンドウのサイズに応じて送信ウィンドウのサイズを調整できます。
  5. 送信ウィンドウのサイズを動的に調整する: 送信者は、受信者によって送信された受信ウィンドウ サイズ情報に従って、送信ウィンドウのサイズを動的に調整します。受信側の受信ウィンドウが大きくなると、送信側はより多くのデータを送信できますが、受信側の受信ウィンドウが小さくなると、送信側は送信するデータの量を減らす必要があります。

このように、スライディング ウィンドウ メカニズムはフロー制御を実装し、送信側と受信側の間のデータ転送速度がネットワークの条件に確実に適応するようにします。送信者は、受信者の受信ウィンドウ サイズに応じて、送信されるデータの量を制御します。これにより、大量のデータを送信し、受信者が時間内に処理できなくなることを回避し、それによってデータ送信の効率と信頼性が向上します。

TCPの輻輳制御技術とは何ですか? 一般的な輻輳制御アルゴリズムは何ですか?

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-dO7etMCJ-1690270230621) (C:\Users\93701\AppData\Roaming\Typora\) typora-user-images\ image-20230723144208996.png)]

輻輳制御は、コンピュータ ネットワークにおけるネットワーク輻輳の発生を回避または軽減するために使用されるネットワーク トラフィック管理メカニズムです。輻輳は、ネットワーク内のデータ トラフィックがネットワーク リンク、スイッチ、またはルーターの処理能力を超えると発生し、その結果、ネットワーク パフォーマンスの低下、遅延の増加、さらにはデータ損失が発生します。

輻輳制御の目標は、送信側のデータ送信速度を制限したり、ネットワーク リソースの割り当てを調整したりして、ネットワーク内のトラフィックがネットワークの容量を超えないようにすることで、ネットワークの安定性と信頼性を維持することです。

輻輳ウィンドウ(Congestion Window) は、送信側が送信するデータ量を制御するために TCP プロトコルで使用されるメカニズムです。ネットワークの輻輳を回避するために導入されたフロー制御メカニズムです。

輻輳ウィンドウのサイズは、送信者が送信できるデータ量を示します。当初、輻輳ウィンドウのサイズは比較的小さく、送信者は少量のデータしか送信できません。ネットワークが通常に動作し、データ パケットの送信が成功すると、輻輳ウィンドウが徐々に増加し、送信者はより多くのデータを送信できるようになります。

TCP で使用される輻輳制御技術には、主にスロー スタート、輻輳回避、高速再送信、および高速回復が含まれます。

  1. スロー スタート: TCP 接続が最初に確立されるとき、送信者は初期の輻輳ウィンドウを小さい値に設定し、その後ラウンドトリップ時間 (RTT) が経過するたびに輻輳ウィンドウのサイズを 2 倍にして送信者の数を徐々に増やします。 . ネットワークの輻輳ポイントまたは輻輳ウィンドウの最大値に到達するまでの送信レート。(送信ウィンドウを小さいものから大きいものに増やしてください。試し続けてください)

  2. 輻輳回避: スロー スタート フェーズが終了すると、送信側は輻輳回避フェーズに入ります。この段階では、送信側は、ネットワークに過剰なデータ トラフィックが流入するのを避けるために、送信レートをゆっくりと上げるために、輻輳ウィンドウのサイズを毎回 1 RTT ずつ増やすだけです。(スロースタートの2倍成長ではなく、直線成長「追加増加」に属します)

  3. 高速再送信: 送信者は、繰り返し確認応答 (ACK) を 3 回続けて受信すると、ネットワークの輻輳が原因ではなく、パケットが失われたと判断します送信者は、タイムアウト タイマーの起動を待たずに、失われたパケットをただちに再送信します。(高速再送信により、ネットワーク全体のスループットが約 20% 向上します)

  4. 高速回復: 高速再送信後、送信者は高速回復フェーズに入ります。このフェーズでは、送信者は輻輳ウィンドウを半分にし、輻輳ウィンドウのサイズをパケットが失われる前の半分に設定します。その後、送信側は輻輳回避アルゴリズムを使用して輻輳ウィンドウのサイズを徐々に増やし続けます。

一般的な輻輳制御アルゴリズムには次のものがあります。

  • Tahoe アルゴリズム: 最も初期の TCP 輻輳制御アルゴリズム。スロー スタートと輻輳回避フェーズのみ。

  • Reno アルゴリズム: Tahoe アルゴリズムに基づいて、高速回復メカニズムと高速再送信メカニズムが追加されています。

  • 新しい Reno アルゴリズム: Reno アルゴリズムが改善され、より柔軟な高速回復および高速再送信メカニズムが追加されました。

  • 三次アルゴリズム: 輻輳ウィンドウの二乗関数に基づいており、ネットワークの適応性と公平性が優れています。

  • BBR アルゴリズム: 帯域幅と往復時間の推定に基づいて、送信レートをより正確に調整し、ネットワーク スループットを向上させることができます。

TCPフロー制御と輻輳制御の違い

TCP フロー制御と輻輳制御は、TCP プロトコルの 2 つの異なるメカニズムであり、その目的と実装方法も異なります。

フロー制御は、受信者が送信者からのデータを処理できるようにし、送信者が大量のデータを送信して受信者が時間内に処理できなくなるのを防ぐことです。フロー制御は、送信者と受信者の間で実行され、受信者がウィンドウ サイズ情報を送信者に送信し、受信バッファーにどれだけの空き領域があるかを送信者に通知します。送信者は、受信者のウィンドウ サイズに応じてデータの送信速度を制御し、受信者が時間内にデータを処理できるようにします。

輻輳制御は、ネットワークの輻輳を回避するために導入されたメカニズムです。ネットワークでは輻輳制御が行われ、ネットワークの混雑度や受信側のフィードバック情報を監視することで送信側の送信レートが調整されます。ネットワークが輻輳している場合、輻輳制御により送信側の送信レートを下げ、ネットワークの負荷を軽減し、輻輳のさらなる悪化を防ぎます。輻輳制御アルゴリズムは、ネットワークの輻輳に応じて送信側の輻輳ウィンドウ サイズを動的に調整し、合理的なフロー制御を実現します。

要約すると、フロー制御は受信側がデータを処理できるようにするための制御であり、輻輳制御はネットワークの輻輳を回避するための制御です。フロー制御は送信者と受信者の間で行われ、輻輳制御はネットワーク内で行われます。どちらも、データの信頼性の高い送信とネットワーク パフォーマンスの最適化を保証することを目的としていますが、その目的と実装方法は異なります。

TCP接続確立の動作原理について話す

TCP (Transmission Control Protocol) は、コネクション指向で信頼性の高いトランスポート層プロトコルであり、ネットワーク通信において重要な役割を果たします。TCP がどのように機能するかを簡単に説明します。

  1. 建立连接:在进行TCP通信之前,客户端和服务器需要通过三次握手建立连接。首先,客户端发送一个SYN(同步)报文给服务器,服务器收到后回复一个SYN+ACK(同步+确认)报文给客户端,最后,客户端再回复一个ACK(确认)报文给服务器。这样,连接就建立起来了。(三次握手)
  2. 数据传输:一旦连接建立,客户端和服务器就可以开始传输数据。TCP使用滑动窗口机制来进行流量控制和拥塞控制。发送方将数据切分成称为TCP段的小块,并将它们发送给接收方。接收方会确认已经收到的数据,并且发送方可以根据接收方的确认信息调整发送速率。
  3. 确认和重传:接收方收到数据后会发送确认消息给发送方,表示已经成功接收。如果发送方在一定时间内没有收到确认消息,就会认为数据丢失,会进行重传。接收方可以通过序列号来检查是否有丢失的数据段,并将其丢弃,以避免重复处理。
  4. 关闭连接:当数据传输完成或者需要终止连接时,可以通过四次握手来关闭连接。首先,一方发送一个FIN(结束)报文给另一方,另一方收到后回复一个ACK报文表示确认。然后,另一方发送一个FIN报文给第一方,第一方收到后回复一个ACK报文表示确认。最后,连接就关闭了。(四次挥手)

TCP的工作原理保证了数据的可靠传输和顺序性,同时还具备流量控制和拥塞控制的机制,以适应不同网络环境下的传输需求。这使得TCP成为了互联网上应用最广泛的传输协议之一。

重点讲一下TCP的三次握手和四次挥手过程

当建立TCP连接时,需要进行三次握手;而在关闭连接时,需要进行四次挥手。下面我会重点讲解一下TCP的三次握手和四次挥手过程。

  1. 三次握手(Three-way Handshake):

    a. 第一步:客户端向服务器发送一个SYN(同步)报文,其中包含一个初始的序列号(seq)。这个SYN报文相当于客户端发起连接请求的信号,表示客户端希望与服务器建立连接。

    b. ステップ 2: SYN メッセージを受信した後、サーバーは確認番号 (ack) とサーバーの初期シーケンス番号 (seq) を含む SYN+ACK (同期 + 確認) メッセージで応答します。

    c. ステップ 3: サーバーから SYN+ACK メッセージを受信した後、クライアントは、接続が確立されたことを示す確認番号 (ack) を含む ACK (確認) メッセージを送信します。

    このように、3 ウェイ ハンドシェイクを通じて、クライアントとサーバーの両方が互いの送受信能力と初期シリアル番号を確認し、双方向の信頼性の高い接続が確立されます。

  2. 4 ウェイ ハンドシェイク: a. ステップ 1: クライアントが接続を閉じたい場合、FIN (終了) メッセージをサーバーに送信します。b. ステップ 2: FIN メッセージを受信した後、サーバーは確認として ACK メッセージを送信します。c. ステップ 3: サーバーは、サーバーも接続を閉じることを示す FIN メッセージをクライアントに送信します。d. ステップ 4: サーバーから FIN メッセージを受信した後、クライアントは確認として ACK メッセージを送信します。

    このように、4回手を振ることで双方が相手の終了意思を確認し、接続の終了処理が完了します。

3 ウェイ ハンドシェイクおよび 4 ウェイ ハンドシェイクでは、各ステップで双方が接続の信頼性と順序を保証するために確認情報を送受信する必要があります。これらのプロセスでのメッセージと確認番号の交換は、双方が互いの状態と意図を正しく理解できるようにすることで、接続の確立と終了が確実に行われることを保証します。(下の2枚の写真は非常に重要で、内部の状態も重要です)

[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Z1iG7e2e-1690270230621) (C:\Users\93701\AppData\Roaming\Typora) \typora-user-images\ image-20230723112552073.png)]

小文字の ACK はシーケンス番号、大文字の ACK はフラグです。

SYN=1 は、同期シーケンス番号 (SYN) フラグが 1 に設定されていることを示します。

図のハンドシェイク プロセスは通常次のとおりです。

  1. クライアントは、SYN フラグを 1 に設定し、ACK (確認応答) フラグを 0 に設定して、TCP パケットをサーバーに送信します。同時に、クライアントはランダムなシーケンス番号、たとえば x を生成します。

  2. サーバーは SYN=1 データ パケットを受信すると、SYN フラグと ACK フラグの両方が 1 に設定されたデータ パケットでクライアントに応答します。また、サーバーはランダムなシーケンス番号 (たとえば y) を生成し、確認番号を x+1 に設定します。

  3. サーバーの SYN=1 および ACK=1 データ パケットを受信した後、クライアントは、SYN フラグが 0、ACK フラグが 1、確認番号が y+1 に設定された確認データ パケットをサーバーに送信します。シーケンス番号は依然として x+1 である必要があります (2 回目のハンドシェイクでは、サーバーの確認番号は x+1 であり、受信が期待される次のバイトのシーケンス番号が x+1 であることを示します)。


[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-baVz2K76-1690270230621) (C:\Users\93701\AppData\Roaming\Typora\) typora-user-images\ image-20230723121127429.png)]

4 つの手を振るとは、TCP 接続が閉じられたときに 2 者間の通信が終了するプロセスを指します。以下は、4 つの波のプロセスと関連分野の変化です。

  1. 最初の波:
    • アクティブなクロージング パーティ (クライアント) は、FIN フラグが 1 に設定されたメッセージ セグメントをパッシブ クロージング パーティ (サーバー) に送信します。フィン=1
    • メッセージ セグメントのシーケンス番号は、アクティブなクロージング パーティによって送信された最後のバイトのシーケンス番号を示します。シーケンス=u
  2. 第二波:
    • 最初のハンド ウェーブのメッセージ セグメントを受信した後、パッシブ クロージング パーティは、ACK フラグ ビットが 1 に設定されたメッセージ セグメントをアクティブ クロージング パーティに送信し、クロージング要求が受信されたことを示します。ACK=1
    • メッセージ セグメント内の確認応答番号は、受動的終了側が受信することを期待している次のバイトのシーケンス番号を示します。ack=u+1,seq=v
  3. 第三の波:
    • パッシブな終了側は、FIN フラグが 1 に設定されたメッセージ セグメントをアクティブな終了側に送信し、接続を閉じる準備ができていることを示します。FIN=1、ACK=1 ack=u+1
    • メッセージ セグメント内のシーケンス番号は、パッシブ クロージング パーティによって送信された最後のバイトのシーケンス番号を示します。seq=w ( 2番目の seq=v と異なるのは、サーバーがデータを送信している可能性がありますが、クライアント側がデータの送信を停止したためです)
  4. 第 4 の波:
    • アクティブな終了パーティが 3 回目に手を振っているメッセージ セグメントを受信した後、ACK フラグが 1 に設定されたメッセージ セグメントをパッシブな終了パーティに送信し、終了要求が受信されたことを示します。ACK=1
    • セグメント内の確認応答番号は、アクティブな近くのパーティが受信することを期待している次のバイトのシーケンス番号を示します。ack=w+1、seq=u+1

TCP の 3 ウェイ ハンドシェイクと 4 ウェイ ウェーブの状態遷移プロセスについて話します (状態とは何ですか)

スリーウェイ ハンドシェイク プロセス: (詳細については、次の図を参照してください)

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-uMoc55wm-1690270230622) (C:\Users\93701\AppData\Roaming\Typora\) typora-user-images\ image-20230723112552073.png)]

  1. 初期状態: クライアント側は CLOSED 状態、サーバー側は LISTEN 状態です。

  2. 最初のハンドシェイク: クライアントは、SYN フラグを 1 に設定したメッセージ セグメントをサーバーに送信し、同時に初期シーケンス番号 (ISN) を選択します。

    • クライアントの状態は SYN_SENT に変わり、サーバーの確認を待ちます。
  3. 2 番目のハンドシェイク: クライアントから SYN メッセージ セグメントを受信した後、サーバーは ACK フラグ ビットが 1 のメッセージ セグメントをクライアントに送信し、受信を確認するために SYN フラグ ビットが 1 のメッセージ セグメントもクライアントに送信します。クライアント SYN の初期シーケンス番号を選択します。

    • サーバーのステータスが SYN_RCVD に変わります。
  4. 3 回目のハンドシェイク: サーバーから SYN/ACK セグメントを受信した後、クライアントは ACK フラグが 1 に設定されたセグメントをサーバーに送信し、サーバーからの SYN/ACK の受信を確認します。

    • クライアントのステータスが ESTABLISHED に変わります。
  5. クライアントから ACK セグメントを受信した後、サーバーも ESTABLISHED 状態に入ります。

    • サーバーのステータスが ESTABLISHED に変わります。

4回手を振るプロセス:(詳細は下図を参照)

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-CaRvbyiU-1690270230622) (C:\Users\93701\AppData\Roaming\Typora\) typora-user-images\ image-20230723121127429.png)]

  1. 初期状態: クライアントとサーバーの両方が ESTABLISHED 状態にあります。
  2. 第 1 波: クライアントは、FIN フラグを 1 に設定したメッセージ セグメントをサーバーに送信します。これは、送信するデータがないが、データを受信できることを示します。
    • クライアントの状態は FIN_WAIT_1 に変わります。
  3. 第 2 の波: クライアントから FIN セグメントを受信した後、サーバーは ACK フラグが 1 に設定されたセグメントをクライアントに送信し、クライアントからの FIN の受信を確認します。
    • サーバーのステータスは CLOSE_WAIT に変更され、クライアントのステータスは FIN_WAIT_2 に変更されます。
  4. 3 番目の波: サーバーは、送信するデータがないことを示す、FIN フラグを 1 に設定したメッセージ セグメントをクライアントに送信します。
    • サーバーのステータスが LAST_ACK に変わります。
  5. 4 番目のウェーブ: サーバーから FIN セグメントを受信した後、クライアントは ACK フラグが 1 に設定されたセグメントをサーバーに送信し、サーバーからの FIN の受信を確認します。
    • クライアントの状態は TIME_WAIT に変更され、最長セグメント寿命 (MSL) の 2 倍待機した後、CLOSED 状態に入ります。
  6. クライアントから ACK セグメントを受信した後、サーバーも CLOSED 状態に入ります。
    • サーバーのステータスが CLOSED に変わります。

TCP 接続の状態に関しては、いくつかの一般的な状態があります。

  1. CLOSED: 初期状態、または接続が閉じられた状態。この状態では、TCP 接続は確立されていないか、閉じられています。
  2. LISTEN (リスニング): サーバーはクライアントの接続状態を待機しています。この状態では、サーバーは指定されたポートで待機しており、クライアントからの接続要求を受け入れる準備ができています。
  3. SYN_SENT (同期送信): クライアントは、SYN セグメントを送信した後、サーバーの確認を待ちます。この状態では、クライアントは接続要求を送信し、サーバーからの応答を待っています。
  4. SYN_RECEIVED (同期受信): クライアントの SYN メッセージ セグメントを受信した後に独自の SYN メッセージ セグメントを送信するサーバーのステータス。この状態では、サーバーはクライアントの接続要求を受信し、独自の接続確認を送信しました。
  5. ESTABLISHED(確立):コネクションが確立されており、双方ともデータ送信が可能です。この状態では、クライアントとサーバー間の接続が正常に確立され、データ送信が可能になります。
  6. FIN_WAIT_1 (終了待ち 1): クライアントは FIN セグメントを送信した後、サーバーの確認を待ちます。この状態では、クライアントは接続終了要求を送信し、サーバーからの確認応答を待っています。
  7. CLOSE_WAIT (クローズ待機): サーバーはクライアントから FIN セグメントを受信した後、接続を閉じるまで待機します。この状態では、サーバーはクライアントの接続終了要求を受信し、接続を閉じるのを待っています。
  8. FIN_WAIT_2 (終了待機 2): クライアントはサーバーが FIN セグメントを送信するのを待ちます。この状態では、クライアントはサーバーから接続終了要求を受信し、サーバーが自身の接続終了要求を送信するのを待っています。
  9. LAST_ACK (最終確認): サーバーは FIN セグメントを送信した後、クライアントの確認を待ちます。この状態では、サーバーは接続終了要求を送信し、クライアントからの確認応答を待っています。
  10. TIME_WAIT (時間待機): 接続が閉じられ、一定時間待機した後、CLOSED 状態に入ります。この状態では、クライアントは CLOSED 状態に入る前に、すべてのセグメントが受信されたことを確認するために一定時間待機します。

MSL とは何ですか? TIME_WAIT ここで 2MSL の時間を待つ必要はありますか?

MSL (最大セグメント存続期間) は、TCP プロトコルにおける最長のセグメント存続期間を指します。これは、ネットワーク内での TCP セグメントの最大生存時間を表します。

TCP プロトコルでは、各メッセージ セグメントは送信のために複数の小さなデータ パケットに分割されます。これらのデータ パケットは、ネットワーク内のさまざまなネットワーク デバイスやリンクを通過します。ネットワーク内の遅延、輻輳、ルータ障害などの要因により、メッセージ セグメントの送信中に損失、反復、順序外れなどの問題が発生する可能性があります。ネットワーク内でメッセージ セグメントが正常に送受信されることを保証するために、TCP プロトコルでは最長メッセージ セグメント ライフ (MSL) の概念が規定されています。MSL はネットワーク内のパケットの最大存続期間を示し、この期間を過ぎるとパケットは破棄されます。MSL の具体的な値は、ネットワークの特性と構成に応じて決定され、通常は数分から数十分の間です。TCP プロトコルの 2MSL の待機時間は、この期間中にすべての遅延セグメントが確実に破棄され、後続の接続との干渉を回避するためのものです。

なぜ 2MSL の時間を待つ必要があるのでしょうか?

MSL の 2 倍待つことを選択する理由はいくつかあります。

  1. ネットワーク内のすべての遅延セグメントが確実に破棄されるようにする: MSL を 2 回待機する方が、ネットワーク内のすべての遅延セグメントが確実に消滅するように、より慎重になります。これにより、混乱やエラーが発生する可能性が回避されます。(古い接続要求セグメントは、次の新しい接続には表示されません)
  2. 新しい接続と古い接続の混乱を避ける: MSL 時間の 1 倍しか待機しない場合、この時間中にネットワーク内に遅延セグメントがまだいくつか存在する可能性があります。この期間中に再起動して同じ IP アドレスとポート番号で新しい接続を確立すると、これらの遅延セグメントが新しい接続に誤って割り当てられ、データの混乱やエラーが発生する可能性があります。MSL を 2 回待機すると、新しい接続が確立される前に、古い接続のすべてのセグメントが確実に破棄されます。
  3. ネットワーク内のさまざまなデバイスおよび実装との互換性: ネットワーク デバイスおよび TCP 実装が異なると、メッセージ セグメントの生存時間の処理方法が異なる場合があります。一部のデバイスはセグメントをより早く削除する場合がありますが、他のデバイスはセグメントをより長く保持する場合があります。MSL の 2 倍の待ち時間により、デバイスと実装間の差異に適切に対応できるようになり、信頼性の高い正しい接続が確保されます。
  4. 信頼できないネットワーク状況: ホストが MSL の 1 倍を待った直後に接続を閉じた場合、その間にサーバー側の再送信データが遅延したり、ネットワーク内で失われた場合、ホストは再送信を受信できなくなります。データ (FIN+ACK セグメント) は、データ損失またはエラーにつながる可能性があります。MSL が 2 回待機すると、受信ウィンドウが長くなり、ホストがサーバーからタイムアウト再送信データを確実に受信できるようになります。これにより、接続の信頼性が向上し、データの損失やエラーが回避されます。

TCP によって確立されたバイト ストリームの各バイトに順番に番号を付ける必要があるとはどういう意味ですか? (シリアル番号の役割) (バイトストリームの順序を保つ方法)

TCP プロトコルは、シリアル番号を使用してバイト ストリームに番号を付け、データの秩序ある送信と信頼性を保証します。

TCP 接続が確立された後、送信者は送信するデータを複数のデータ セグメント (データ セグメントは TCP セグメント) に分割し、各データ セグメントにシーケンス番号を割り当てます。シーケンス番号は、バイト ストリーム内のデータ セグメントの位置を識別するために使用される 32 ビットの整数です。各データ セグメントには開始シーケンス番号があり、バイト ストリーム全体におけるデータ セグメントの最初のバイトの位置を示します。後続のデータ セグメントでは、シーケンス番号が順番に増加します。

例えば:

送信者が 100 バイトを含むデータ ストリームを送信したいとします。

送信者はデータ ストリームをデータ セグメントに分割し、データ セグメントに連続した番号を付けます。各データ セグメントのサイズが 10 バイトであると仮定すると、データ セグメントは 10 個存在します。

最初のデータ セグメントの開始シーケンス番号は 1 で、バイト ストリーム全体における最初のバイトの位置を示します。2 番目のデータ セグメントの開始シーケンス番号は 11、3 番目のデータ セグメントの開始シーケンス番号は 21 などとなります。

送信者がデータを送信すると、各データ セグメントにはシーケンス番号が付けられます。受信側はシーケンス番号により受信データセグメントを確認し、次に期待される受信データセグメントのシーケンス番号を送信側に通知する。

受信者がシーケンス番号 1 のデータ セグメントとシーケンス番号 11 のデータ セグメントを正常に受信したと仮定すると、受信者は、次に受信される予定のデータ セグメントを示す確認番号 21 の確認メッセージを送信者に送信します。 . 開始シーケンス番号は 21 です。

送信者は、データ セグメントの送信時にシーケンス番号 21 のデータ セグメントが失われたことに気付いた場合、受信した確認番号に従って再送信し、信頼性の高いデータ送信を保証します。

TCPの確認番号とは何ですか? 効果は何ですか?

確認番号には次の 2 つの目的があります。

  1. 正常に受信されたデータ セグメントを示します。確認応答番号は、受信側が正常に受信したデータ セグメントの最後のバイトのシーケンス番号を示します。送信者は確認番号により、どのデータが受信者に正しく受信されたかを知ることができます。(例:確認番号がNの場合、N-1までのデータが全て正しく受信されたことを意味します)
  2. 受信が予想される次のデータ セグメントのシーケンス番号を示します。確認応答番号の値は、通常、受信したデータ セグメントの最後のバイトのシーケンス番号に 1 を加えたものです確認メッセージを受信した後、送信者は確認番号に従って、次に送信するデータ セグメントのシーケンス番号を決定できます。(送信者が送信したデータ セグメントの最初のシリアル番号は 1001、長さは 200 バイトです。受信者はデータ セグメントを正常に受信し、シリアル番号 1201 の次のデータ セグメントの受信を期待します。この場合、受信者はデータ セグメントを送信者に送信します。送信される ACK パケットには確認応答番号 1201 が含まれている必要があります。)

TCPセグメントのヘッダーには何が含まれますか?

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-uopPAgt4-1690270230622) (C:\Users\93701\AppData\Roaming\Typora\) typora-user-images\ image-20230723114411399.png)]

TCP セグメントのヘッダーには次のフィールドが含まれます。

  1. 送信元ポート番号 (送信元ポート): 送信者のポート番号を示す 16 ビットのフィールド。
  2. 宛先ポート (宛先ポート): 受信者のポート番号を示す 16 ビットのフィールド。
  3. シーケンス番号: データの順序どおりの送信を保証するために、送信されるバイトに番号を付けるために使用される 32 ビットのフィールド。
  4. 確認応答番号: 32 ビットのフィールド。ACK フラグが1の場合にのみ有効で、受信が予想される次のバイトのシーケンス番号を示します。
  5. データ オフセット (Data Offset): TCP ヘッダーの長さを 4 バイト単位で示す 4 ビットのフィールド。最大値は 15 であるため、TCP ヘッダーの最大長は 60 バイトです。
  6. 予約済み: 6 ビットのフィールド。将来の使用のために予約されており、現在は 0 に設定されています。
  7. 制御ビット (フラグ): 合計 6 つのフラグ ビットがあります。すなわち、URG (緊急ポインター有効ビット)、ACK (確認応答番号有効ビット)、PSH (受信側はできるだけ早くデータをアプリケーション層に渡す必要があります) 、RST (リセット接続ビット)、SYN (同期シーケンス番号ビット)、および FIN (接続終了ビット)。
  8. ウィンドウ サイズ (Window Size): フロー制御に使用される、送信側の受信ウィンドウ サイズを示す 16 ビットのフィールド。
  9. チェックサム (Checksum): TCP ヘッダーとデータにエラーがあるかどうかを検出するために使用される 16 ビットのフィールド。
  10. 緊急ポインター (緊急ポインター): 16 ビットのフィールド。URG フラグが 1 の場合にのみ有効で、緊急データのバイト オフセットを示します。
  11. オプション (オプション): 選択確認、タイムスタンプなどの TCP 機能を拡張するために使用される可変長フィールド。
  12. パディング: TCP ヘッダーの長さが 4 バイトの倍数であることを保証するために使用されます。

FINフラグ ACKフラグ SYNフラグについての話

FIN (終了) フラグ: 送信者がデータの送信を終了し、接続を閉じるように要求したことを示すために使用されます。TCP 接続の一方の当事者が FIN フラグを 1 に設定してセグメントを送信すると、その当事者はデータを送信しなくなりましたが、引き続きデータを受信できることを意味します。

ACK (確認応答) フラグ: メッセージ セグメント内の確認応答番号 (確認応答番号) フィールドが有効であることを示すために使用されます。ACK フラグが 1 に設定されている場合、確認応答番号フィールドは有効であるとみなされます。TCP 接続の確立および切断中に、相手側が送信したメッセージ セグメントの受信を確認するために ACK フラグが使用されます。

SYN (同期) フラグ: TCP 接続の確立中の同期に使用されます。TCP 接続の一方が SYN フラグを 1 に設定してメッセージ セグメントを送信する場合、その当事者が接続の確立を要求し、初期シーケンス番号 (シーケンス番号) を指定することを意味します。

フラグ ビットのサイズは 1 ビット (ビット)、つまり 1 つのバイナリ ビットのみが占有されます。

サックとは何ですか?

SACK は、TCP プロトコルのオプションの拡張である Selective Acknowledgment (選択的確認応答) を指します。SACK を使用すると、受信者は欠落しているデータ セグメントを送信者に報告できるため、TCP の信頼性とパフォーマンスが向上します。

従来の TCP プロトコルでは、受信側が順序が正しくないデータ セグメントを受信した場合、送信側に累積確認応答を送信することしかできず、どのデータ セグメントを受信したかを送信側に伝え、送信側がそのデータ セグメントのすべてのデータを再送信することを期待していました。その後。この方法には問題があります。つまり、複数のデータ セグメントが失われた場合、送信者は失われたウィンドウ全体を再送信する必要があり、その結果、ネットワーク リソースが浪費され、遅延が増加します。

SACK は、選択的確認メカニズムを導入することでこの問題を解決します。受信者は、最後に受信したデータ セグメントだけでなく、特定の範囲の欠落データ セグメントを送信者に報告できます。このようにして、送信者はウィンドウ全体を再送信することなく、欠落したデータ セグメントのみを再送信できます。

SACK は次のように機能します。

  1. 順序が乱れたデータ セグメントを受信した後、受信機は失われたデータ セグメントの範囲を記録します。
  2. 受信者は、送信者によって失われたデータセグメントの範囲を示す SACK オプションを確認応答メッセージに含めます。
  3. SACK オプションを受信した後、送信者は失われたデータ セグメントの範囲に従って選択的に再送信できます。

SACK を使用することにより、TCP は失われたデータ セグメントをより効率的に処理し、不必要な再送信を減らし、ネットワークのスループットとパフォーマンスを向上させることができます。SACK はオプションの TCP 拡張機能であり、有効にするには送信側と受信側の両方でサポートされている必要があります。

TCPキープアライブとは何ですか?

キープアライブは、ネットワーク接続の稼働状態を検出して維持するためのネットワーク プロトコルまたはメカニズムです。長期間データ送信が行われずに接続が切断されることを避けるために、定期的に小さなプローブパケットを送信することで相手がまだアクティブであるかどうかを確認します。(つまり、サーバーはこれを使用して、クライアントが切断されているか接続されているかを判断できます)

TCP プロトコルでは、キープアライブは、アイドル状態の接続でキープアライブ検出パケットを定期的に送信することによって実装されます。TCP 接続がアイドル状態のとき、つまりデータ送信がないとき、キープアライブ メカニズムは定期的に検出パケットを相手に送信します。相手が一定時間以内に応答しない場合、接続は無効とみなされ、接続は切断されます。これにより、ネットワーク障害や相手の異常終了などによる長時間の無効な接続を回避できます。

キープアライブを使用すると、ネットワーク接続の信頼性と安定性が向上します。接続の可用性を検出し、アイドル時間が長すぎるために接続が切断されるのを防ぎ、ネットワーク障害や相手の異常終了を検出するために使用できます。

オペレーティング システムまたはアプリケーションでキープアライブ メカニズムを構成し、有効にする必要があることに注意してください。オペレーティング システムやアプリケーションが異なれば、キープアライブ パラメータやデフォルト設定も異なる場合があり、特定のニーズに応じて構成および調整できます。

心拍のメカニズムは何を意味しますか?

ハートビート (ハートビート) は、キープアライブと同様に、接続を維持するためのメカニズムです。小さなプローブ メッセージを定期的に送信することで、通信相手の生存を確認します。

ハートビートは通常、アプリケーション間の接続を検出して維持するためにアプリケーション層で実装されます。これは、通信相手がまだ生きていることを確認するためにメッセージや信号を定期的に送信するメカニズムです。通常、アプリケーションは定期的に他のアプリケーションにハートビートメッセージを送信しますが、一定時間ハートビートメッセージが受信されない場合は、接続が切断されたか、相手がアクティブでなくなったとみなします。

ハートビート メカニズムは分散システムでは非常に一般的で、ノード間の接続ステータスを監視および管理するために使用されます。ノードの障害や異常を検知し、タスクの再割り当てや再接続などの対応を行うことができます。ハートビートは、分散システム内のさまざまなノードを調整して、ノード間の同期と一貫性を確保するために使用することもできます。

Heartbeat の頻度と具体的な実装は、アプリケーションのニーズに応じて構成および調整できます。通常、ハートビート メッセージの頻度は、ネットワーク遅延、接続の安定性、アプリケーションのリアルタイム要件に従って決定する必要があります。ハートビート周波数を低くすると、ネットワーク帯域幅の使用量を減らすことができますが、接続ステータスの検出に遅れが生じる可能性があります。ハートビートの頻度が高くなると、接続状態の変化をより速く検出できますが、ネットワーク帯域幅の消費量が増加します。

TCP の遅延 ACK と累積確認応答とは何ですか? どのようなシーンで使用するか

遅延 ACK (Delayed ACK) および累積確認応答 (Cumulative Acknowledgment) は、TCP プロトコルにおけるデータ確認応答に関連する概念です。

遅延 ACK とは、TCP 受信側がデータを受信した直後に確認応答 (ACK) メッセージを送信せず、複数のデータ パケットを確認するために一度に ACK を送信することを期待して一定時間待機することを意味します。これにより ACK メッセージの数が減り、ネットワーク帯域幅が節約されます。デフォルトの ACK 遅延時間は通常 200 ミリ秒です。

累積確認応答とは、TCP 受信側が ACK メッセージを送信するときに、各データ パケットを 1 つずつ確認するのではなく、連続して受信した一連のデータ パケットを確認することを意味します。たとえば、受信側がパケット 1、2、3、4 を受信した場合、これら 4 つのパケットの受信を確認する ACK メッセージを送信するだけで済みます。これにより、ACK メッセージの数が減り、ネットワーク送信の効率が向上します。

遅延 ACK と累積確認応答を使用すると、ネットワーク内の ACK メッセージの数を効果的に削減できるため、ネットワークの遅延と帯域幅の消費が削減されます。ただし、受信側は確認メッセージを送信する前に一定期間または一定数のパケットを待機する必要があるため、遅延 ACK および累積確認応答によっても一定の遅延が発生する可能性があります。リアルタイム通信や高速データ送信などの一部の特定のアプリケーション シナリオでは、遅延と帯域幅の要件のバランスをとるために、遅延 ACK と累積確認応答のパラメータを調整する必要がある場合があります。

遅延 ACK と累積確認応答は TCP プロトコルの最適化メカニズムであり、使用する必要はないことに注意してください。遅延 ACK と累積応答を使用するかどうか、およびパラメータ設定は、特定のネットワーク環境とアプリケーションの要件によって異なります。

TCP データ スティッキー パケットの問題とは何ですか?

TCP データ固着問題とは、TCP プロトコルを使用してデータを送信する際に、送信側が送信したデータが受信側で貼り合わされてしまい、受信側でデータを正しく解析、処理できなくなる現象を指します。

TCP は接続指向の信頼性の高い伝送プロトコルであり、データを個別のデータ パケットに分割して伝送します。ただし、ネットワーク伝送の不確実性により、受信者は送信者が送信したデータ パケットの境界に従って受信できない場合があり、その結果、複数のデータ パケットが結合されて、より大きなデータ ブロック (TCP) が形成されます。データスティッキーパケットの問題。

TCP データ スティッキー パケットが発生する理由は、ネットワーク遅延、輻輳、帯域幅制限など、さまざまです。受信機が結合されたデータ ブロックを受信すると、各データ パケットの境界と内容を正しく解析するために処理する必要があります。

TCP データスティッキーパケットの問題に対する解決策はありますか?

TCP データスティッキーパケットの問題を解決するには、通常、次の方法が採用されます。

  1. メッセージ固定長: 送信者は各データ パケットの長さを固定し、受信者は固定長に従ってデータ パケットを分割します。
  2. 特殊文字の分離: 送信者はデータ パケット間に区切り文字として特殊文字を追加し、受信者は特殊文字に従ってデータ パケットを分割します。
  3. メッセージ ヘッダーの識別: 送信者は、データ パケットの長さを含む識別情報を各データ パケットのヘッダーに追加し、受信者は識別情報に従ってデータ パケットを分割します。
  4. メッセージ境界を使用する: 送信者は各データ パケットの最後にメッセージ境界識別子を追加し、受信者はそれをメッセージ境界に従って分割します。

特定のアプリケーション シナリオと要件に従って、TCP データ スタックの問題に対処する適切なソリューションを選択することが非常に重要です。

Httpプロトコルについて話す

HTTP (Hypertext Transfer Protocol) は、Web ブラウザと Web サーバー間でデータを転送するためのプロトコルです。これは、クライアント/サーバー モデルに基づくステートレスなアプリケーション層プロトコルです。

以下に、HTTP プロトコルの主な機能をいくつか示します。

  1. ステートレス: HTTP はステートレスです。つまり、サーバーは以前のリクエストを記憶しません。各リクエストは独立しており、サーバーはクライアントに関する状態情報を保持しません。状態を処理するには、セッション (Session) を使用するか、Cookie を使用してクライアントの状態を追跡します。
  2. 要求-応答モデル: HTTP は要求-応答モデルに基づいています。クライアントは HTTP リクエストをサーバーに送信し、サーバーはそのリクエストを処理して、HTTP 応答をクライアントに返します。リクエストとレスポンスは両方とも、開始行、ヘッダー フィールド、およびオプションのメッセージ本文で構成されます。
  3. URL (Uniform Resource Locator) : HTTP は URL を使用して、アクセスするリソースを指定します。URL は、プロトコル タイプ (例: http://)、ホスト名、ポート番号、パス、およびオプションのクエリ パラメータで構成されます。
  4. リクエスト メソッド: HTTP ではいくつかのリクエスト メソッドが定義されており、最も一般的なのは GET と POST です。GET メソッドはリソースを要求するために使用され、POST メソッドはデータをサーバーに送信するために使用されます。その他の一般的なリクエスト メソッドには、PUT (リソースの更新)、DELETE (リソースの削除) などがあります。
  5. ステータス コード: HTTP 応答には、リクエストの処理結果を示すために使用されるステータス コードが含まれます。一般的なステータス コードには、200 (成功)、404 (見つからない)、500 (内部サーバー エラー) などがあります。
  6. ヘッダー フィールド: HTTP リクエストとレスポンスには、リクエストまたはレスポンスに関する追加情報を伝えるために使用されるいくつかのヘッダー フィールドが含まれています。たとえば、Content-Typeヘッダー フィールドは応答のコンテンツ タイプを指定するために使用され、User-Agentヘッダー フィールドはリクエストを送信するクライアントを識別するために使用されます。
  7. 永続的接続: HTTP/1.1 では永続的接続 (キープアライブ) が導入されており、これにより複数の HTTP 要求と応答を 1 つの TCP 接続で送信できるようになり、接続の確立と終了のオーバーヘッドが軽減されます。

HTTP プロトコルは Web アプリケーション通信の基礎であり、クライアントとサーバー間の通信ルールを定義します。HTTP を通じて、クライアントはサーバーにリソースを要求でき、サーバーはリソースをクライアントに返すことができます。このシンプルで柔軟なプロトコルにより、Web の発展とインターネットの普及が可能になりました。

Httpプロトコルのリクエストメソッドにはどのようなものがありますか?

HTTP プロトコルはさまざまなリクエスト メソッドを定義しており、それぞれが異なる目的とセマンティクスを持っています。HTTP プロトコルの一般的なリクエスト メソッドは次のとおりです。

  1. GET : 指定されたリソースのデータをリクエストするために使用されます。GET リクエストはべき等です。つまり、同じ GET リクエストを複数回送信すると、同じ結果が返されます。
  2. POST : サーバーにデータを送信するために使用されます。通常は、新しいリソースを作成したり、フォーム データを送信したりするために使用されます。POST リクエストは冪等ではありません。つまり、同じ POST リクエストを複数回送信すると、異なる結果が生じる可能性があります。
  3. PUT : 指定されたリソースのコンテンツをサーバーにアップロードまたは更新するために使用されます。PUT リクエストは通常​​、既存のリソースを更新するため、またはリソースが存在しない場合は新しいリソースを作成するために使用されます。
  4. DELETE : 指定されたリソースを削除するために使用されます。
  5. HEAD : GET リクエストに似ていますが、応答本文ではなく応答ヘッダーのみを返します。これは主に、リソースのサイズや種類などのリソースのメタデータを取得するために使用されます。
  6. OPTIONS : サーバーがサポートするリクエストメソッド、レスポンスヘッダーフィールドなどの情報を取得するために使用されます。
  7. PATCH : リソースを部分的に更新するために使用されます。PUT リクエストとは異なり、PATCH リクエストでは、リソース全体ではなく、更新する必要があるデータの一部を渡すだけで済みます。
  8. TRACE : 主にテストまたは診断のために、要求/応答リンク上の要求情報をエコーするために使用されます。

前述の一般的なリクエスト メソッドに加えて、HTTP プロトコルではカスタム リクエスト メソッドの拡張も可能です。ただし、実際のアプリケーションでは、一般的に使用されるリクエスト メソッドは GET、POST、PUT、および DELETE です。

最もよく使用されるのは get と post です

HTTP プロトコルの一般的なステータス コードは何ですか?

HTTP プロトコルは、リクエストの処理結果を示すステータス コードのセットを定義します。各ステータス コードには特定の意味があり、リクエストの成功、リダイレクト、クライアント エラー、サーバー エラーなどの状態を示すために使用されます。以下は、HTTP プロトコルの一般的なステータス コードです。

  1. 1xx (情報ステータス コード) : 要求が受信されたか、処理中であるか、またはさらなるアクションが必要であることを示します。

    • 100 続行: サーバーはリクエストの最初の部分を受信しました。クライアントは残りの部分の送信を続ける必要があります。
    • 101 プロトコルの切り替え: サーバーはリクエストを理解したので、新しいプロトコルに切り替えます。
  2. 2xx (成功ステータスコード) : リクエストが正常に処理されたことを示します。

    • 200 OK: リクエストは成功し、リクエストされたデータが返されます。
    • 201 Created: リクエストは正常に処理され、新しいリソースが作成されました。
    • 204 コンテンツがありません: リクエストは成功しましたが、応答にはコンテンツが含まれていませんでした。
  3. 3xx (リダイレクトステータスコード) : リクエストを完了するにはさらにアクションが必要であることを示します。

    • 301 Moved Permanently: 要求されたリソースは新しい場所に永続的に移動されました。
    • 302 Found: 要求されたリソースは一時的に新しい場所に移動されました。
    • 304 Not Modified: 要求されたリソースは変更されていないため、キャッシュされたバージョンを使用できます。
  4. 4xx (クライアント エラー ステータス コード) : リクエストにエラーが含まれているか、リクエストを完了できないことを示します。

    • 400 Bad Request: リクエストは無効であり、サーバーが理解できませんでした。
    • 401 Unauthorized: リクエストには認証が必要です。
    • 403 Forbidden: サーバーはリソースへのアクセス要求を拒否します。
    • 404 Not Found: 要求されたリソースは存在しません。
  5. 5xx (サーバー エラー ステータス コード) : サーバーがリクエストを処理中にエラーが発生したことを示します。

    • 500 内部サーバー エラー: サーバーで予期しないエラーが発生しました。

    • 502 Bad Gateway: ゲートウェイまたはプロキシとして機能するサーバーが、上流サーバーから無効な応答を受信しました。

    • 503 サービスを利用できません: 過負荷またはメンテナンスが原因で、サーバーは現在リクエストを処理できません。

Getリクエストメソッドの処理について説明します。

クライアントが GET リクエストを送信するときの一般的なプロセスは次のとおりです。

  1. クライアントが GET リクエストを作成する: クライアントは、リクエスト行、リクエスト ヘッダー、およびオプションのリクエスト本文を含む HTTP リクエストを作成します。要求行には、要求メソッド (GET)、要求された URL、およびプロトコルのバージョンが含まれます。
  2. クライアントは GET リクエストを送信します。クライアントは、構築された GET リクエストをターゲット サーバーに送信します。リクエストには、取得するリソースの URL およびその他の関連情報が含まれます。
  3. サーバーが GET リクエストを受信します。ターゲット サーバーは GET リクエストを受信した後、リクエストの処理を開始します。
  4. サーバーは GET リクエストを処理します。サーバーは、リクエスト内の URL およびその他の情報に従って、対応するリソースを見つけて取得します。通常、サーバーはファイル システム、データベース、またはその他のデータ ソースからリソースのコンテンツをフェッチします。
  5. サーバーは応答を生成します。サーバーは、取得したリソースの内容に基づいて HTTP 応答を生成します。応答は、応答行、応答ヘッダー、および応答本文で構成されます。応答行には、プロトコルのバージョン、ステータス コード、ステータス メッセージが含まれます。
  6. サーバーが応答を送信する: サーバーは、生成された HTTP 応答をクライアントに送り返します。
  7. クライアントが応答を受信: クライアントは、サーバーから送信された応答を受信します。
  8. クライアントの応答処理: クライアントは、応答内のステータス コードおよびその他の関連情報に従って応答コンテンツを処理します。処理方法としては、応答内容の表示、応答ヘッダーの解析、その他の操作の実行などが考えられます。
  9. クライアントは応答結果を表示します。クライアントは、Web ページのコンテンツをブラウザーに表示するなど、応答結果をユーザーに表示します。

Get リクエスト メッセージのコンポーネントとレスポンス メッセージのコンポーネントについて説明します。

クライアントが GET リクエストを送信すると、リクエスト メッセージは次のコンポーネントで構成されます。

  1. リクエスト行: リクエストメソッド、リクエストされた URL、プロトコルバージョンが含まれます。
    • 例: GET /api/users HTTP/1.1
  2. リクエスト ヘッダー: キーと値のペアの形式で表現された、リクエストに関する追加情報が含まれています。
    • 例えば:
      • ホスト: example.com
      • ユーザーエージェント: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/91.0.4472.124 Safari/537.36
      • 受け入れる: text/html、application/xhtml+xml、application/xml;q=0.9、image/webp、image/apng、/ ;q=0.8
  3. 空行: リクエストヘッダーとリクエストボディを区切るために使用されます。
  4. リクエストボディ: GET リクエストは、主にデータの送信ではなくリソースの取得に使用されるため、通常、リクエストボディはありません。

サンプル GET リクエスト メッセージの完全な例を次に示します。

GET /api/users?name=John&age=25 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: application/json
Authorization: Bearer abc123

各行の意味は次のとおりです。

  1. GET /api/users?name=John&age=25 HTTP/1.1: HTTP メソッド (GET)、リクエスト パス (/api/users)、クエリ パラメータ (name=John&age=25)、および HTTP プロトコル バージョン (HTTP/1.1) を含むリクエスト行。

  2. Host: example.com: リクエスト ヘッダー フィールドは、リクエストのターゲット ホスト (example.com) を指定します。

  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36: リクエスト ヘッダー フィールド。リクエストを送信したユーザー エージェント (ブラウザー) の情報が含まれます。

  4. Accept: application/json: リクエスト ヘッダー フィールドは、クライアントが受け入れることができる応答コンテンツ タイプ (application/json) を指定します。

  5. Authorization: Bearer abc123: 認証用のリクエスト ヘッダー フィールド。Bearer は認証スキーム、abc123 は認証トークンです。

  6. 空白行はリクエスト ヘッダーの終わりを示し、その後にリクエスト本文はありません。


応答メッセージは、応答行、応答ヘッダー、応答本文の 3 つの主要な部分で構成されます。

  1. 応答行: 応答行には、HTTP プロトコルのバージョン番号、ステータス コード、およびステータス メッセージが含まれます。通常、その形式は でありHTTP/1.1 200 OKHTTP/1.1プロトコルのバージョン、200ステータス コード、およびOKステータス メッセージを示します。
  2. 応答ヘッダー: 応答ヘッダーには、応答に関連するメタ情報が含まれます。これには一連のキーと値のペアが含まれており、各キーと値のペアはフィールド名とフィールド値で構成されます。一般的な応答ヘッダー フィールドにはContent-Type、(応答本文のコンテンツ タイプを指定)、Content-Length(応答本文の長さを指定)、Date(応答の日付と時刻を指定) などが含まれます。
  3. 応答本文: 応答本文には、サーバーから返された実際のデータが含まれます。サーバーの処理ロジックやクライアントのニーズに応じて、HTML、JSON、XML などのさまざまな形式のデータにすることができます。

以下は、応答行、応答ヘッダー、応答本文のコンポーネントを含む、対応する応答メッセージの例です。

HTTP/1.1 200 OK

コンテンツタイプ: application/json

コンテンツの長さ: 120

日付: 2023 年 7 月 25 日月曜日 06:46:32 GMT

{

「id」:1、

「名前」: 「ジョン」、

「年齢」:25歳、

「メール」: 「[email protected]

}

次のように解析されます。

  1. HTTP/1.1 200 OK: サーバーがリクエストを正常に処理し、ステータス コード 200 (OK) を返したことを示す応答行。
  2. Content-Type: application/json: 応答ヘッダー フィールド。応答本文のコンテンツ タイプが application/json であることを指定します。
  3. Content-Length: 120: 応答ヘッダー フィールド。応答本文の長さが 120 バイトであることを指定します。
  4. Date: Mon, 25 Jul 2023 06:46:32 GMT: 応答ヘッダー フィールドは、応答の日付と時刻を指定します。
  5. 空行: 応答ヘッダーの終わりを示します。
  6. 応答本文: サーバーから返されたデータが含まれます。これは、ID、名前、年齢、電子メールなどの属性を含む JSON 形式のオブジェクトです。

コンテンツタイプとは何ですか?

Content-Type は、送受信されるエンティティ本体のメディア タイプを示すために使用される HTTP ヘッダー フィールドの 1 つです。一般的な Content-Type タイプの一部を次に示します。

  1. text/plain: プレーンテキストタイプ。
  2. text/html: HTML ドキュメント タイプ。
  3. text/css: CSS スタイル シート タイプ。
  4. application/json: JSON データ型。
  5. application/xml: XML データ型。
  6. application/pdf: PDF ドキュメント タイプ。
  7. image/jpeg: JPEG 画像タイプ。
  8. image/png: PNG 画像タイプ。
  9. audio/mpeg: MPEG オーディオ タイプ。
  10. video/mp4: MP4 ビデオの種類。

上記のタイプに加えて、さまざまなメディア タイプやデータ形式を表すために使用される他にも多くの Content-Type タイプがあります。実際のニーズに応じて、適切な Content-Type タイプを選択できます。

Post リクエスト メソッドのプロセスについて説明します。

POST リクエスト メソッドを使用する場合、クライアントからサーバーに送信されるリクエストには、サーバーに送信されるデータを含むリクエスト本文が含まれます。POST リクエスト メソッドの一般的なプロセスは次のとおりです。

  1. クライアントはサーバーとの接続を確立します。クライアントは、TCP 接続を確立するか、他のプロトコルを使用してサーバーとの接続を確立します。
  2. リクエスト メッセージの構築: クライアントは、リクエスト行、リクエスト ヘッダー、リクエスト本文を含む HTTP リクエスト メッセージを構築します。リクエストメソッドはPOSTでリクエストラインにリクエスト先のURLを指定します。リクエスト ヘッダーには、Content-Type、Content-Length などの追加情報を含めることができます。リクエストボディには、サーバーに送信されるデータが含まれます。
  3. リクエスト メッセージの送信: クライアントは、構築されたリクエスト メッセージをサーバーに送信します。リクエストメッセージはネットワークを介してサーバー側に送信されます。
  4. サーバーはリクエスト メッセージを受信します。サーバーは、クライアントによって送信されたリクエスト メッセージを受信します。
  5. 処理要求: サーバーは、受信した要求メッセージに従って、対応する処理を実行します。これには、ユーザーの認証、リクエスト データの処理、適切なビジネス ロジックの実行などが含まれる場合があります。
  6. 応答を返す: サーバーは、応答行、応答ヘッダー、および応答本文を含む HTTP 応答メッセージを生成します。応答行には、HTTP プロトコルのバージョン番号、ステータス コード、およびステータス メッセージが指定されます。応答ヘッダーには、応答に関連するメタ情報が含まれます。応答本文には、サーバーから返されたデータが含まれます。
  7. 応答の受信: クライアントは、サーバーから返された応答メッセージを受信します。
  8. 応答の処理: クライアントは、受信した応答メッセージに従って、対応する処理を実行します。これには、応答本文内のデータの解析、応答ヘッダー内のメタ情報の処理、ステータス コードに基づくエラー処理などが含まれる場合があります。

POST リクエスト メソッドは、フォーム データの送信、ファイルのアップロードなど、データをサーバーに送信する必要があるシナリオに適しています。GET リクエスト メソッドと比較して、POST リクエスト メソッドは、URL に表示されるデータではなくリクエスト本文にデータが含まれるため、大量のデータや機密データの転送に適しています。

Post リクエスト メッセージのコンポーネントとレスポンス メッセージのコンポーネントについて説明します。

POST リクエストを使用してメッセージを送信する場合、メッセージは通常、リクエスト行、リクエスト ヘッダー、リクエスト本文で構成されます。メッセージのコンポーネントを示す POST リクエストの例を次に示します。

POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 43

{
  "username": "exampleuser",
  "password": "secretpassword"
}
  • リクエスト行: POST リクエストのリクエスト行は、リクエストメソッドが POST、リクエストターゲットが/api/login、使用される HTTP プロトコルバージョンが HTTP/1.1 であることを指定します。
  • リクエスト ヘッダー: リクエスト ヘッダーには追加情報が含まれています。この例では、Hostヘッダーはサーバーのホスト名を指定し、Content-Typeヘッダーはリクエスト本文のデータ型が JSON であることを指定し、Content-Lengthヘッダーはリクエスト本文の長さが 43 バイトであることを指定します。
  • リクエストボディ: リクエストボディには、サーバーに送信されるデータが含まれます。この例では、リクエスト本文はユーザー名とパスワードを含む JSON オブジェクトです。

これは単なる例であり、実際の POST リクエスト メッセージは特定のニーズやシナリオに応じてカスタマイズできることに注意してください。

POST リクエストを使用してメッセージが送信されると、サーバーは応答メッセージを返します。以下は応答メッセージの例です。

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 26

{
  "message": "Login successful"
}
  • 応答行: 応答行では、HTTP プロトコルのバージョンとステータス コードを指定します。この例では、応答行のステータス コードは 200 で、リクエストが成功したことを示しています。

  • 応答ヘッダー: 応答ヘッダーには追加情報が含まれています。この例では、Content-Typeヘッダーで応答本文のデータ型が JSON であることが指定され、Content-Lengthヘッダーで応答本文の長さが 26 バイトであることが指定されています。

  • 応答本文: 応答本文には、サーバーから返されたデータが含まれます。この例では、応答本文はmessageという名前のフィールドを含む JSON オブジェクトですLogin successful

GET リクエスト メソッドと POST リクエスト メソッドの違いは何ですか?

GET と POST は HTTP プロトコルの 2 つの一般的なリクエスト メソッドですが、使用方法と特性にいくつかの違いがあります。

  1. データが転送される場所: GET リクエストは URL のクエリ パラメータにデータを追加しますが、POST リクエストにはリクエスト本文にデータが含まれます。
  2. データ長制限: GET リクエストは URL にデータを追加するため、データ長は URL の長さ制限によって制限されます。POST リクエストにはリクエスト本文にデータが含まれており、明確な長さの制限はなく、大量のデータを送信できます。
  3. データ セキュリティ: GET リクエストのデータは URL に表示されるため、URL がブラウザ履歴やサーバー ログなどに保存される可能性があるため、機密情報に GET リクエストを使用することは適していません。POST リクエストにはリクエスト本文にデータが含まれており、URL には公開されないため、比較的安全です。
  4. データ キャッシュ: GET リクエストはブラウザによってキャッシュできるため、同じリクエストについて、ブラウザはリクエストをサーバーに送信せずにキャッシュから直接応答を取得することができます。POST リクエストはキャッシュされず、毎回サーバーに送信されます。
  5. べき等性: GET リクエストはべき等です。つまり、複数の同一の GET リクエストがサーバーに副作用をもたらすことはありません。POST リクエストは冪等ではないため、複数の同一の POST リクエストがサーバーに対して異なる結果を生成する可能性があります。
  6. 使用シナリオ: GET リクエストはリソースの取得やデータのクエリなどの操作に適しており、POST リクエストはデータの送信やデータの変更などの操作に適しています。

要約すると、GET リクエストは、データの取得、副作用のない操作、および高度なデータ セキュリティを必要としないシナリオに適しています。POST リクエストは、データの送信、副作用のある操作、および高いデータ セキュリティ要件があるシナリオに適しています。

URL とは何ですか?またそのコンポーネントは何ですか?

URL (Uniform Resource Locator) は、インターネット上のリソースを識別して検索するために使用される文字列です。通常、URL は次のコンポーネントで構成されます。

  1. プロトコル (プロトコル): URL の最初の部分はプロトコルで、HTTP、HTTPS、FTP など、クライアントとサーバー間の通信に使用されるプロトコルを指定します。通常、契約は://で終わります。

  2. ドメイン名 (ドメイン): ドメイン名は URL の主要部分であり、アクセスするサーバーの名前または IP アドレスを指定します。ドメイン名には、完全なホスト名 (www.example.com など) または IP アドレス (192.168.0.1 など) を使用できます。

  3. ポート: ポートはオプションで、リッスンしているサーバー上の特定のポート番号を指定します。ポートが指定されていない場合は、デフォルトのポート番号が使用されます。共通 HTTP プロトコルのデフォルトのポート番号は 80、HTTPS のデフォルトのポート番号は 443 です。

  4. パス (Path): パスは、サーバー上のリソースの特定の場所を指定します。/スラッシュで始まり、スラッシュで区切られた複数のパス セグメントを含めることができますたとえば、/products/123サーバー上のproductsディレクトリ下のリソースにアクセスすることを意味します123

  5. クエリ パラメータ (クエリ パラメータ): クエリ パラメータは、追加データをサーバーに渡すために使用されます。これらは疑問符で始まり?、複数のパラメータが&区切られます。=各パラメータは、等号で接続されたパラメータ名とパラメータ値で構成されます。例えば、?page=1&limit=10要求されたページ番号が 1 で、各ページに 10 個のデータが表示されます。

  6. アンカー (フラグメント): アンカーは、ページ内の特定の場所を指定する URL のオプションの部分です。シャープ記号で始まり#、その後にアンカー名が続きます。たとえば、#section1IDsection1が の要素までページがスクロールされることを意味します。

    URL のコンポーネントをよりよく理解するために、URL の例を次に示します。

    https://www.example.com:8080/products/123?category=electronics&sort=price#reviews
    

    この例では、URL のコンポーネントは次のとおりです。

    • プロトコル:https://
    • ドメイン名:www.example.com
    • ポート::8080
    • 道:/products/123
    • クエリパラメータ:?category=electronics&sort=price
    • アンカーポイント:#reviews

    この URL は、www.example.comHTTPS プロトコルを使用してアクセスされるホスト マシン上にあるサーバーを表します。サーバーがリッスンするポート番号は 8080 です。パスは です。これは、/products/123サーバー上のproductsディレクトリ下のリソースにアクセスすることを示します123クエリ パラメーターには、categoryis の値electronicssortis の値の2 つのパラメーターがありますprice最後に、アンカー ポイントは です#reviews。これは、ページがreviewsID の要素までスクロールされることを示します。

GetメソッドとPostメソッドのURLの違いは何ですか?

GET メソッドを使用する場合、クエリ パラメーターは URL の末尾に直接追加されます。GET メソッドを使用した URL の例を次に示します。

GET リクエストの URL の例:

https://www.example.com/api/products?id=123&category=electronics

上の例では、クエリ パラメータid=123category=electronicsクエリ パラメータが URL の末尾に直接追加され、特定の ID とカテゴリを持つ製品データをサーバーに要求します。

POST メソッドを使用する場合、データは URL に直接添付されるのではなく、リクエスト本文に配置されます。POST メソッドを使用した URL の例を次に示します。

POST リクエストの URL の例:

https://www.example.com/api/products

HTTPとHTTPSの違い

HTTP (Hypertext Transfer Protocol) および HTTPS (Hypertext Transfer Protocol Secure) は、クライアントとサーバーの間でデータを転送するためのプロトコルです。それらの主な違いは次のとおりです。

  1. 安全性:
    • HTTP: データは送信中は平文であり、暗号化されません。したがって、HTTP プロトコルには、ハッカーが送信データを傍受して盗む可能性があるなど、セキュリティ上のリスクがあります。
    • HTTPS: データのセキュリティと整合性を確保するために、データは送信中に SSL/TLS によって暗号化されます。HTTPS は公開キー暗号化と秘密キー復号化を使用して、データの盗難や改ざんを防ぎます。
  2. ポート:
    • HTTP: デフォルトではポート番号 80 が使用されます。
    • HTTPS: デフォルトではポート番号 443 が使用されます。
  3. 証明書:
    • HTTP: 証明書は必要ありません。
    • HTTPS: サーバーの ID を確認するには SSL 証明書が必要です。SSL 証明書は、安全な接続を確立するために、信頼できるサードパーティによって発行されます。
  4. SEO (検索エンジン最適化):
    • HTTP: 検索エンジンは、HTTP Web サイトのランキングを特別に優先しません。
    • HTTPS: HTTPS はより優れたセキュリティとユーザーのプライバシー保護を提供するため、検索エンジンは HTTPS を使用する Web サイトを上位にランクする傾向があります。

要約すると、HTTP は暗号化されていないプロトコルですが、HTTPS は SSL/TLS を使用してデータ送信を暗号化することで、より高いセキュリティとデータ保護を提供します。機密情報の送信、オンライン支払い、またはユーザーのプライバシーを保護する必要がある場合には、HTTPS を使用することをお勧めします。

NAT技術登場のきっかけを語る NATが提供する技術とは

NAT (ネットワーク アドレス変換、ネットワーク アドレス変換) テクノロジーは、IPv4 アドレス不足の問題を解決するために作成されました。インターネットの開発初期には、IPv4 アドレス リソースが限られており、多数のデバイスの接続ニーズを満たすことができませんでした。NAT 技術は、プライベート ネットワークとパブリック ネットワークの間でアドレス変換を行うことで、複数のデバイスがパブリック IP アドレスを共有する機能を実現します。
NAT テクノロジーは次の機能を提供します。

IP アドレス変換: NAT は、プライベート ネットワーク内のデバイスが通信するためにプライベート IP アドレスを使用します。また、パブリック ネットワークと通信する場合、NAT はプライベート IP アドレスをパブリック IP アドレスに変換して、パブリック ネットワークとの通信を可能にします。

ポート変換: NAT は、プライベート ネットワーク内のデバイスが使用するポート番号をパブリック ネットワークのポート番号に変換することもできます。このように、複数のデバイスが同じプライベート IP アドレスを使用している場合でも、異なるポート番号で区別できるため、複数のデバイスでパブリック IP アドレスを共有できます。

アドレス マッピング: NAT テクノロジは、パブリック IP アドレスをプライベート ネットワーク内の特定のデバイスにマッピングするアドレス マッピング機能も実装できます。これにより、外部ネットワークからパブリックIPアドレスにアクセスすることでプライベートネットワーク内の機器にアクセスし、リモートアクセスやポートフォワーディングなどの機能を実現できます。

動的IPアドレスとは何ですか?

動的 IP アドレスは、ネットワーク内のデバイスに割り当てられる一時的な IP アドレスを指します。静的 IP アドレスと比較して、動的 IP アドレスは一時的なものであり、デバイスがネットワークに接続されるたびに新しい IP アドレスが取得されます。
動的 IP アドレスの割り当ては、通常、DHCP (動的ホスト構成プロトコル、動的ホスト構成プロトコル) サーバーによって管理されます。デバイスがネットワークに接続すると、使用可能な IP アドレスを要求する DHCP 要求が送信されます。DHCP サーバーは、アドレス プールから使用可能な IP アドレスを選択してデバイスに割り当て、割り当てられた IP アドレスとその他のネットワーク構成情報をデバイスに送信します。デバイスは IP アドレスの使用を終了すると、その IP アドレスを DHCP サーバーに解放して、他のデバイスがその IP アドレスを再度使用できるようにします。
動的 IP アドレスの利点は、IP アドレス リソースをより効率的に使用できることです。動的 IP アドレスは一時的なものであるため、デバイスが使用されなくなった場合は、他のデバイスが使用できるようにアドレス プールに解放して戻すことができるため、IP アドレスの無駄が削減されます。さらに、動的 IP アドレスを割り当てるプロセスがより簡単かつ自動化され、ネットワーク管理者の作業負荷が軽減されます。
ただし、動的 ​​IP アドレスにはいくつかの制限もあります。IP アドレスは一時的なものであるため、デバイスはネットワークに接続するたびに新しい IP アドレスを取得することになり、一部のネットワーク アプリケーションやサービスで構成上の問題が発生する可能性があります。リモート アクセスが必要なデバイスや固定 IP アドレスが必要なデバイスの場合は、静的 IP アドレスの方が適している場合があります。

動的 IP アドレスは、パブリック ネットワークとプライベート ネットワークの両方で使用できます。
パブリック ネットワークでは、動的 IP アドレスは、インターネット サービス プロバイダー (ISP) によってユーザーに割り当てられる一時的な IP アドレスです。ユーザーがインターネットに接続すると、ISP は利用可能な動的 IP アドレスをユーザーに割り当てます。このようにして、ユーザーはこの動的 IP アドレスを通じてインターネットと通信できます。
プライベート ネットワークでは、動的 IP アドレスは、ローカル ネットワークの DHCP サーバーによってデバイスに割り当てられる一時的な IP アドレスです。デバイスがプライベート ネットワークに接続されると、DHCP サーバーは使用可能な動的 IP アドレスをデバイスに割り当てます。このようにして、デバイスはプライベート ネットワーク内で通信し、他のデバイスとデータを交換できます。

ポート変換とポート マッピングの違いは何ですか?

ポート マッピングとポート変換はどちらも、パブリック ネットワーク ユーザーがプライベート ネットワーク デバイスまたはサービスにアクセスできるようにするために使用される機能です。
ポート マッピングとは、パブリック ネットワーク IP アドレスの特定のポートをプライベート ネットワーク デバイスの特定のポートにマッピングすることを指します。このようにして、パブリック ネットワーク ユーザーがパブリック ネットワークの IP アドレスとマップされたポートにリクエストを送信すると、ルーターはこれらのリクエストを対応するプライベート ネットワーク デバイスの対応するポートに転送します。
ポート変換 (NAT 変換とも呼ばれます) は、ポート マッピングを含むより広い概念です。ポート変換とは、プライベート ネットワーク内の変換プロセスを指します。このプロセスでは、プライベート ネットワーク ユーザーの要求をあるポートから別のポートに変換し、プライベート ネットワーク内の他のデバイスに転送します。これにより、プライベートネットワークの内部機器間の通信を実現すると同時に、パブリックネットワークの利用者がプライベートネットワークの機器にアクセスする機能を実現することができる。
したがって、ポート マッピングはポート変換の一種であり、パブリック ネットワーク ユーザーがプライベート ネットワーク デバイスまたはサービスにアクセスするために使用されます。ポート変換には、プライベート ネットワーク内のデバイス間の通信を実現するために、プライベート ネットワーク ユーザー間のポート転送も含まれる場合があります。

ポート変換の例:
同じルーターに接続されている 3 つのデバイス (デバイス A、デバイス B、およびデバイス C) が存在するホーム ネットワークがあると想像してください。ホーム ネットワークはパブリック IP アドレスを使用します。
デバイス A は、ポート 80 でリッスンする Web サーバーを実行しています。デバイス B とデバイス C の両方が、インターネット経由でデバイス A 上のこの Web サーバーにアクセスしたいとします。
ホーム ネットワークにはパブリック IP アドレスが 1 つしかないため、デバイス B もデバイス C も、インターネット経由でデバイス A の Web サーバーに直接アクセスできません。
この時点で、ルーター上でポート変換を構成できます。外部ポート (例: 8080) を指定し、それをデバイス A のポート 80 にマッピングできます。
ここで、デバイス B またはデバイス C がインターネット経由でルーターのパブリック IP アドレスとマップされたポート (例: http://your_public_ip:8080) にアクセスすると、ルーターはこれらのリクエストをデバイス A の Web サーバーに転送します。
このようにして、デバイス B とデバイス C は、デバイス A に直接接続せずに、インターネット経由でデバイス A の Web サーバーにアクセスできます。
ポート マッピングの例:
カメラ デバイスを備えたホーム ネットワークがあり、パブリック インターネット経由でこのカメラにアクセスできるようにしたいとします。まず、ルーターでポート転送を設定する必要があります。

Web カメラ デバイスの IP アドレス (192.168.1.101 など) を見つけます。

ルーターの管理インターフェイスにログインし、ネットワーク設定やポート転送などのオプションでポート転送設定を見つけます。

新しいポート マッピング ルールを作成します。次の情報を入力します。

パブリック ポート: 8080 などの、空いているパブリック ポート番号を選択します。

内部 IP アドレス: カメラ デバイスの IP アドレス (192.168.1.101) を入力します。

内部ポート: カメラ デバイスが監視するポート番号 (80 など) を入力します。

プロトコル: カメラデバイスの要件に応じて、TCP または UDP を選択します。

このポート マッピング ルールを保存して適用します。

ここで、パブリック インターネット上のルーターのパブリック IP アドレスにアクセスし、ポート番号 8080 を指定すると、ルーターはこの要求をポート 80 のカメラ デバイスの IP アドレス 192.168.1.101 に転送します。このようにして、公共のインターネット経由で Web カメラ デバイスにアクセスできます。

DHCPサーバーとゲートウェイとは何ですか?

DHCP サーバーとゲートウェイはネットワーク内で異なる役割を果たし、次のような違いがあります。

機能: DHCP サーバーは、ネットワークに接続されているデバイスに IP アドレスおよびその他のネットワーク構成情報を動的に割り当てる役割を果たします。デバイスの DHCP 要求を受信し、事前構成された IP アドレス プールから使用可能な IP アドレスを選択してデバイスに割り当てます。ゲートウェイは、ローカル エリア ネットワーク (LAN) と外部ネットワーク (インターネットなど) の間の通信を接続するネットワークの出口ポイントであり、あるネットワークから別のネットワークへのデータ パケットの送信を担当します。

動作方法: DHCP サーバーは、DHCP プロトコルを通じてデバイスと通信し、デバイスの DHCP 要求を受信して​​処理し、割り当てられた IP アドレスとその他の構成情報をデバイスに送り返します。その役割は、デバイスがネットワークに参加するときに、デバイスに IP アドレスと構成情報を自動的に割り当てることです。ゲートウェイは、ネットワーク層のルーティング テーブルと転送ルールに従って、ソース ネットワークからターゲット ネットワークにデータ パケットを送信します。

アドレスの割り当て: DHCP サーバーは、IP アドレスを動的に割り当て、ネットワークに接続されているデバイスに一時的な可変 IP アドレスを提供します。これにより、デバイスは手動で構成しなくても、使用可能な IP アドレスを自動的に取得できます。一方、ゲートウェイは通常、静的 IP アドレスを持ち、ネットワークの出口ポイントであり、あるネットワークから別のネットワークにデータ パケットを転送するために使用されます。

動作範囲: DHCP サーバーの動作範囲は、ローカル エリア ネットワーク (LAN) 内のデバイスであり、LAN に接続されているデバイスに IP アドレスやその他の構成情報を提供します。ゲートウェイの範囲は、LAN と外部ネットワークを接続するネットワーク全体であり、LAN から外部ネットワークへ、または外部ネットワークから LAN へのデータ パケットの送信を担当します。

要約すると、DHCP サーバーは IP アドレスやその他のネットワーク構成情報をデバイスに動的に割り当てる役割を果たし、ゲートウェイはネットワークの出口ポイントであり、あるネットワークから別のネットワークにデータ パケットを転送する役割を果たします。それらは、機能、動作モード、アドレス割り当て、および動作範囲が異なります。

DHCP サーバーは通常、ルーターまたはネットワーク デバイス上に配置されます。ルーターはプライベート ネットワーク内のゲートウェイとして機能し、ローカル エリア ネットワーク (LAN) とインターネットなどの外部ネットワーク間の通信を接続します。

ネットワークの出口ポイントは何ですか? 192.168.0.1 は出口点ですか

ネットワークの出口ポイントは、ネットワーク通信の出口を指し、デフォルト ゲートウェイまたはゲートウェイと呼ばれることもあります。これは、ローカル エリア ネットワーク (LAN) またはプライベート ネットワークをインターネットなどの外部ネットワークに接続するスイッチング ポイントです。
出口ポイントは通常、ルーターやファイアウォールなどのネットワーク デバイスです。2 つ以上のネットワーク インターフェイスがあり、1 つはローカル エリア ネットワークに接続され、1 つ以上は外部ネットワークに接続されます。出口ポイントは、ローカル エリア ネットワーク内のデータを外部ネットワークに送信するか、データ パケットを転送することによって外部ネットワーク内のデータをローカル エリア ネットワークに送信します。
192.168.0.1 は、デフォルト ゲートウェイまたは出口ポイントの IP アドレスとしてよく使用される一般的なプライベート IP アドレスです。デフォルト ゲートウェイとは、デバイスがデータ パケットを送信するときに、ターゲット IP アドレスが同じサブネット内にない場合、データ パケットをデフォルト ゲートウェイに送信し、デフォルト ゲートウェイがデータ パケットを外部ネットワークに転送する責任を負うことを意味します。通信網。
したがって、192.168.0.1 はネットワークの出口ポイントとなり、デフォルト ゲートウェイとして機能し、LAN から外部ネットワークへ、または外部ネットワークから LAN へのパケットの送信を担当します。ただし、実際の出口点の IP アドレスは、ネットワークの構成やデバイスの設定によって異なる場合があることに注意してください。

おすすめ

転載: blog.csdn.net/weixin_46274756/article/details/131919152