【Java】インタビュー よくある知識ポイント(コンピュータネットワーク)

コンピュータネットワーク

OSI 7層モデル

 

アプリケーション層 (アプリケーション) :

Web サービスとエンド ユーザー間のインターフェイス。

プロトコルは次のとおりです。HTTP FTP TFTP SMTP SNMP DNS

プレゼンテーション層:

データ表現、セキュリティ、圧縮。(5層モデルではアプリケーション層にマージされています)

フォーマットには、JPEG、ASCll、DECOIC、暗号化フォーマットなどが含まれます。

セッション層:

セッションを確立、管理、終了します。(5層モデルではアプリケーション層にマージされています)

ホスト プロセスに対応し、ローカル ホストとリモート ホストの間で進行中のセッションを指します。

トランスポート層 (トランスポート) :

データを送信するためのプロトコル ポート番号、およびフロー制御とエラー チェックを定義します。

プロトコルは次のとおりです。TCP UDP、データ パケットがネットワーク カードを離れると、ネットワーク トランスポート層に入ります。

ネットワーク層 (ネットワーク) :

異なるネットワーク間の経路選択を実現するために、論理アドレスアドレッシングを実行します。

プロトコルは次のとおりです。ICMP IGMP IP(IPV4 IPV6) ARP RARP

データリンク層 (リンク) :

論理接続の確立、ハードウェア アドレス アドレス指定の実行、エラー チェックなどの機能。(基盤となるネットワークによって定義されたプロトコル)

ビットをバイトにフレームに結合し、MAC アドレスを使用してメディアにアクセスし、エラーは検出されましたが修正されませんでした。

物理層:

物理的な接続を確立、維持、切断します。(基盤となるネットワークによって定義されたプロトコル)

TCP/IP (5 層)

プレゼンテーション層: 異なるホスト間の通信のデータ形式の問題を解決する

セッション層:アプリケーション間の通信(接続)の確立と管理(下位層のカプセル化) ユーザーにとって便利な、パケットメッセージの自動送受信

トランスポート層: アンパックとグループ化 TCP: データ パケットの整合性を確保し、送信中に起こりうる危険を処理する UDP: 送信後にメッセージを終了する - ----> パケットに分割する

ネットワーク層: ルーティングとアドレス解決。ルーティングに適切なネットワーク ノードを選択します。パッケージ ----> データフレーム

データ リンク層: 物理デバイスへのアクセスを制御し、さまざまな物理デバイスでのデータの送信方法を指定し、データ エラー訂正機能を提供します。信頼性の低い物理デバイスで信頼性の高いデータ データ フレームの送信を提供する

物理層: 通信する物理デバイスを定義する仕様。ネットワークケーブルインターフェースタイプ、光ファイバーインターフェースタイプ、伝送速度など

Socket 通信は IP とポートを使用するため、この 2 つだけでネットワーク層とトランスポート層を使用していることを示しており、複数のコンピュータ通信のシステムの違いを無視しているため、プレゼンテーション層が含まれています。一般的に Socket はアプリケーションに基づいているため、セッション層とアプリケーション層が含まれます。

httpとhttps

httpのポートは80、httpsのポートは443、どちらもアプリケーション層のプロトコルで、

HTTPS は SSL/TLS で設定され、CA 証明書を使用します. HTTP は TCP 3 ウェイ ハンドシェイクを使用して接続を確立し、HTTPS は TCP の 3 つのパケットと 9 つの SSL ハンドシェイクを送信するため、HTTP の応答速度は HTTPS よりも高速です. パック、合計12パック。

ワークフローは次のようになります。

  1. httpsウェブサイトをリクエストする場合
  2. 公開鍵と秘密鍵はサーバー側で生成されます
  3. 次に、公開鍵をクライアントに返します
  4. クライアント側で正当性を検証し、正当な場合はランダムキーを生成し、正当でない場合はhttps警告に応答する
  5. ランダムに生成されたキーをサーバーに秘密裏に送信する
  6. サーバーは秘密鍵を使用して復号化し、鍵の値を取得し、クライアントから提供された鍵を使用して暗号化されたコンテンツを隠します。
  7. 次に、暗号化されたコンテンツをクライアントに送信します
  8. クライアントは、ランダムに生成されたキーを使用して復号化します

TCP の 3 ウェイ ハンドシェイクと 4 ウェイ ハンドシェイクの理由

TCP プロトコルでは、接続を確立するときに 3 ウェイ ハンドシェイクが必要であり、接続を解放するときに 4 つのハンドシェイクが必要です. これは、TCP プロトコルの設計目標が信頼性を確保し、データの損失やエラーを防ぐことであるためです.

スリーウェイ ハンドシェイクのプロセスでは、最初のハンドシェイクは、クライアントが SYN メッセージをサーバーに送信し、サーバーが SYN+ACK メッセージを返すことです。これにより、サーバーは、クライアントの受信能力と要求する意思を知ることができます。接続; 2 番目のハンドシェイクはサーバーです ACK メッセージをクライアントに送信し、クライアントの要求を確認して、クライアントがサーバーの受信能力と接続を要求する意思を確認します; 3 番目のハンドシェイクは、クライアントが ACK メッセージを送信することです再度サーバーに送信し、スリーウェイ ハンドシェイクを完了します。接続が確立されます。このような設計により、双方がデータを正しく送受信できるようになり、データ伝送の信頼性が確保されます。

4 回手を振る過程で、最初に手を振るのは、クライアントが接続を閉じたいことを示す FIN メッセージを送信するときですが、クライアントにはまだ送信されていないデータがある可能性があるため、サーバーからの ACK 確認を待つ必要があります。 ; 2 番目の波は、サーバーがクライアントのクローズ要求を確認するために ACK メッセージを送信し、CLOSE_WAIT 状態に入ることをクライアントに通知します; 3 番目の波は、サーバーが FIN メッセージを送信し、サーバーがサーバーを閉じる準備をしていることを示します。接続しますが、未送信のデータがある可能性があるため、クライアントの ACK 確認を待つ必要があります。4 番目の波は、クライアントが ACK メッセージを送信して、サーバーのクローズ要求を確認し、両方の当事者が接続を閉じたことを示します。このような設計により、データを完全に送信できると同時に、ネットワークの輻輳やその他の理由によるパケット損失を回避できます。

要約すると、TCP プロトコルは 3 ウェイ ハンドシェイクと 4 ウェイ ハンドシェイクを使用して接続を確立および解放し、データ伝送の信頼性とセキュリティを確保して、データの正確性を確保します。

TCP と UDP の主な機能

UDP の主な機能は、UDP はコネクションレスであり、データを送信する前に接続を確立する必要がないため、データを送信する前のオーバーヘッドと遅延が減少することです。UDP はベストエフォート配信を使用します。つまり、信頼できる配信は保証されないため、ホストは複雑な接続状態テーブルを維持する必要がありません。UDP はパケット指向です。UDP は、アプリケーション層によって配信されたパケットをマージも分割もせず、これらのパケットの境界を保持します。UDP は完全なパケットを一度に 1 つずつ配信します。UDP には輻輳制御がないため、ネットワークの輻輳によって送信元ホストの送信速度が低下することはありません。これは、一部のリアルタイム アプリケーションにとって重要です。マルチメディア通信の要件に非常に適しています。UDP は、1 対 1、1 対多、多対 1、および多対多のインタラクティブ通信をサポートします。UDP のヘッダー オーバーヘッドはわずか 8 バイトと小さく、TCP の 20 バイトのヘッダーよりも短いです。

TCP は、接続指向のトランスポート層プロトコルです。

各 TCP 接続は 2 つのエンドポイント (エンドポイント) のみを持つことができ、各 TCP 接続はポイント ツー ポイント (1 対 1) のみを持つことができます。

TCP は、確実に配信されるサービスを提供します。

TCP は全二重通信を提供します。

ストリーム指向

        1. TCP の「ストリーム」とは、プロセスに出入りする一連のバイトを指します。

        2. 「バイト ストリーム指向」の意味は次のとおりです。アプリケーション プログラムと TCP の間の対話は一度に 1 つのデータ ブロックですが、TCP はアプリケーション プログラムによって渡されるデータを一連の非構造化バイト ストリームと見なします。

なぜ time_wait が必要なのですか?

  1. TCP 接続を確実に終了する
  2. 遅延 TCP パケットを識別して破棄するのに十分な時間を確保する

具体的には:

  1. ネットワークの状況が良くない場合、アクティブ側が TIME_WAIT を待機しない場合、以前の接続を閉じた後、アクティブ側とパッシブ側が新しい TCP 接続を確立します.このとき、パッシブ側の再送信または遅延 fin パケットは、新しい TCP 接続に直接影響します。TCP 接続
  2. 同じネットワーク状況が良くなく、TIME_WAIT 待機がなく、接続が閉じられた後に新しい接続がない. 受動側が fin パケットを再送信または遅延させると、受動側に RST パケットが返され、影響を受ける可能性があります。受動側の他のサービス接続。

Time_wait が多すぎることの危険性

time_wait は 4k のサイズを占め、多すぎると多くのメモリを占有します

同時接続数が多い TCP サーバーでは、サーバーがアクティブな要求の処理を終了して接続を閉じると、多数の接続が time_wait (タイムアウト待ち) 状態になり、サーバーは各接続を維持するためにソケットを必要とします。 , つまり、各接続はファイル記述子を占有し、ファイル記述子の使用には上限があります. 高い同時実行性が続くと、一部の通常の接続が失敗します

解決策は、time_wait 状態でサーバーを迅速にリサイクルおよび再利用できるように構成を変更することです。(具体的な操作はしていません) 設定ファイル: /etc/sysctl.conf;

TCP 接続で TIME-WAIT ソケットの高速リサイクルを有効にする net.ipv4.tcp_tw_recycle = 1 があります。

DNS

ドメインネームシステム(英語:Domain Name System、略称:DNS)とは、インターネットのサービスです。ドメイン名と IP アドレスを相互にマップする分散データベースとして、インターネットへのアクセスを容易にすることができます。DNS は TCP および UDP ポート 53 を使用します。現在、ドメイン名の各レベルの長さ制限は 63 文字であり、ドメイン名の合計の長さが 253 文字を超えることはできません。

DNS 解決プロセス

クライアントはDNSリクエストを送信し、qqであなたのIPは何ですか、同時にローカルドメインネームサーバーにこんにちはと言います(通常、ネットワークサービスはコンピュータールームの近くにあります)

リクエストをローカルで受信した後、サーバーはドメイン名と IP の間のマッピング テーブルを持ちます。存在する場合は、qq にアクセスしたい場合は、XX アドレスにアクセスする必要があることを示します。存在しない場合は、上司 (ルート ドメイン サーバー) に尋ねます

ルート DNS がローカル DNS 要求を受信すると、それが .com であることがわかります。「www.qq.com、これは Brother .com によって管理されています。すぐにそのトップレベル ドメイン アドレスをお知らせします。質問してください。 "

このとき、ローカル DNSがトップレベルドメイン ネーム サーバーに「兄弟、www.qq.com の IP アドレス コードを教えてくれませんか」と尋ねました。 qq.com などのドメイン名

トップレベル ドメイン名は、「覚えておいてください。www.qq.com エリアの権威 DNS サーバーのアドレスをお知らせします」と返信します。

ローカル DNS は権威 DNS サーバーに「ブラザー、www.qq.com の対応する IP を教えてくれませんか?」と尋ねます。

クエリの後、権限のある DNS サーバーはローカル DNS に応答の IP アドレスを通知し、ローカル サーバーはその IP アドレスをクライアントに返し、それによって接続が確立されます。

ステータス コード:

2xx(3種)

200 OK: クライアントからサーバーに送信されたリクエストが正常に処理され、返されたことを示します。

204 No Content: クライアントからクライアントに送信された要求が正常に処理されたが、返された応答メッセージにエンティティの主要部分が含まれていない (リソースを返すことができない) ことを示します。

206 Patial Content: クライアントが範囲要求を行い、サーバーが GET 要求のこの部分を正常に実行し、応答メッセージに Content-Range で指定された範囲のエンティティ コンテンツが含まれていることを示します。

3xx(5種)

301 Moved Permanently: 要求されたリソースに新しい URL が割り当てられ、変更された URL を後で使用する必要があることを示す、永続的なリダイレクト。

302 Found: 要求されたリソースに新しい URL が割り当てられていることを示す一時的なリダイレクト。この訪問では新しい URL が使用されることが期待されます。

301と302の違い:前者は永久移転、後者は一時移転(URLは後日変更される可能性があります)

303 See Other: 要求されたリソースに新しい URL が割り当てられており、GET メソッドを使用して要求されたリソースを取得する必要があることを示します。

302 と 303 の違い: 後者は、クライアントがリソースを取得するために GET を使用する必要があることを明確に示しています。

304 Not Modified: クライアントが追加の条件を送信することを示します (GET メソッドを使用する要求メッセージに、if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since ヘッダーのいずれかが含まれていることを意味します)。 )、サーバーはリソースへのアクセスを許可しますが、リクエストが条件を満たしている場合はステータス コードを返します。

307 一時リダイレクト: 303 と同じ意味を持つ一時的なリダイレクト.

4xx(4種)

400 Bad Request: 要求メッセージに構文エラーがあることを示します。

401 Unauthorized: 権限がありません。HTTP 認証が必要です。

403 Forbidden: サーバーがアクセスを拒否しています (アクセス権に問題があります)

404 Not Found: 要求されたリソースがサーバー上で見つからないことを示します. さらに、サーバーが要求を拒否したが、拒否の理由を伝えたくない場合にも使用できます。

5xx(2種)

500 サーバー間エラー: サーバーがリクエストを実行したときにエラーが発生したことを示します。これは、Web アプリケーションのバグまたは一時的なエラーである可能性もあります。

503 Server Unavailable: サーバーが一時的に過負荷になっているか、メンテナンスのためにシャットダウン中であり、要求を処理できないことを示します。

URL変更手続きに入る

ブラウザに URL を入力した後、通常は次の手順を実行します。

  1. DNS 解決: ブラウザは最初に URL のドメイン名部分を解析し、ドメイン名をサーバーの IP アドレスに変換します。このプロセスでは、ドメイン名解決のために DNS サーバーに要求を送信し、解決された結果をキャッシュして速度を向上させる必要があります。

  2. TCP 接続の確立: ブラウザは HTTP プロトコルを使用してサーバーにリクエストを送信し、TCP 接続を確立します。TCP 接続を確立するときは、接続の信頼性を確保するために 3 ウェイ ハンドシェイクが必要です。

  3. HTTP リクエストの送信: TCP 接続が確立されると、ブラウザは HTTP リクエストをサーバーに送信します. リクエストには、リクエスト メソッド、パス、HTTP バージョン、リクエスト ヘッダー、およびその他の情報が含まれます.

  4. サーバーはリクエストを処理し、HTTP レスポンスを返します: リクエストを受信した後、サーバーはリクエストの内容に従ってそれを処理し、HTTP レスポンスを返します。応答には、ステータス行、応答ヘッダー、応答コンテンツなどの情報が含まれます。

  5. ブラウザーが応答を処理する: ブラウザーは、応答を受信した後、HTML コードの解析、ページのレンダリング、JavaScript スクリプトの実行など、応答を処理します。その中で、HTML コードは DOM ツリーに解析され、CSS コードは CSSOM ツリーに解析されてから、ページ レイアウトと描画のために Render ツリーにマージされます。

  6. TCP 接続の切断: ページが読み込まれた後、ブラウザはサーバーとの TCP 接続を切断してリソースを解放します。

上記は典型的な HTTP リクエスト プロセスであり、HTTP キャッシュ、HTTPS セキュリティ暗号化などの特殊なケースの詳細と処理も含まれています。シナリオによって異なる場合があります。ただし、一般的に、このプロセスは、Web サイトにアクセスするブラウザーの主要なプロセスを表します。

おすすめ

転載: blog.csdn.net/weixin_46601559/article/details/130381899