インターンシップ面接における202の一般的な知識ポイント1-02-25

インターンシップ面接の常識を整理する

実は、インターンの段階で、たくさんの質問といくつかの質問を整理して、自分で答えを書きました(まだ埋められていないピットの大部分があります)、そして秋の募集ステージは実は不変だと感じています。質問してください問題が少なかったので、記録はありませんでした。これは、記憶に基づいていくつかの主な方向に書かれた最も一般的な質問のいくつかです。

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

URLを入力してからブラウザの表示に至るまでのプロセスを簡単に説明してください

ブラウザにURLを入力するとき、最初にURLを解析してドメイン名取得し、DNSプロトコルを介して変更されたドメイン名のIPアドレスを取得し、そのIPアドレスを使用してサーバーとのリンクを確立します。 TCPスリーウェイハンドシェイクを介して、HTTPを変換するHTTPリクエストを作成します。転送作業はオペレーティングシステムのプロトコルスタックに渡されます。リクエストが正常に送信されると、ブラウザはHTMLファイルとリソースファイルを取得します。サーバーから、次にページレンダリングを実行し、最後にそれが表示されます。
このプロセスで重要な知識ポイントは、DNS解決、HTTP要求、TCP / IPプロトコルスタック、ページレンダリングなどです。1つまたは2つを選択して紹介に集中し、他はスキップしてください。もちろん、拡張を続けることができます。HTTPとHTTPSの違いと接続、対称暗号化と非対称暗号化について話すこともできます。ネットワークセキュリティについて話すこともできます。主な目的は、インタビュープロセス全体をフォローすることです。インタビューを受ける代わりにあなたのテクノロジースタック。役員はあなたが知らない場所にそれを持っていきます。
DNS解決:
ブラウザはURLを取得した後、最初にURLを解決し、ドメイン名を実際のファイルパスから分離してから、DNSプロトコルを介してドメイン名のIPアドレスを取得します。
まず、ブラウザはブラウザキャッシュにクエリを実行して、このドメイン名のIPアドレスがあるかどうかを確認します。IPアドレスがない場合は、さらにローカルキャッシュにアクセスします。ローカルキャッシュが存在しない場合は、DNSを開始します。リクエスト。
DNSサーバーはツリー構造であり、ドメイン名は逆方向に解決されます。ルートノードはルートDNSサーバーであり、そのサブノードは.comや.cnなどのトップレベルドメインネームサーバーであり、さらに下位に解決されます。
例としてbaidu.comを取り上げます。コンピュータは最初にルートDNSサーバーへの要求を開始します。ルートサーバーのIPアドレスは通常、すべてのコンピュータで使用できます。通常、8.8.8.8または114.114.114.114に設定します。ルートDNSサーバーにアクセスした後。.comドメインサーバーのIPアドレス。次に、.comドメインサーバーにアクセスして、baidu.comのIPアドレスを取得します。
HTTPリクエスト
がURLを解析しているときに、ドメイン名、ウェブサイトのリソースパス、ポート番号、パラメータを取得できます。DNSリクエストを通じてドメイン名のIPアドレスを取得した後、ブラウザはHTTPまたはHTTPSリクエストを作成して送信できます。HTTPS TLSプロトコルはデータを暗号化します
。HTTPリクエストにはさまざまな種類がありますが、リソースの操作は、POST、DELETE、GET、およびPUTに対応する追加、削除、および変更から分離できません。最も一般的に使用されるのはGETとPOSTです。違いは、GETリクエストのパラメータがURLにあり、POSTリクエストのパラメータが本文にあることです。DELETEとPUTはめったに使用されません。これらのリクエストは意味的に異なるだけなので、アプリケーションは明確に通信できます。HTTP自体に違いはなく、同じ機能を実行できます。
GETを例にとると、ブラウザがHTTPリクエストを送信する場合、直接送信されることもありません。まず、強力なキャッシュとネゴシエーションキャッシュに分割されているブラウザキャッシュを確認します。ブラウザがHTTPリクエストを開始すると、最初に決定されます。 HTTPヘッダー情報に基づいて強力かどうか。キャッシュ、強力なキャッシュがヒットして有効期限が切れていない場合、リクエストはサーバーに送信されません。強力なキャッシュが失敗した場合、ブラウザはHTTPリクエストを送信します。このリクエストには、ブラウザが最後にリソースをリクエストした時刻とリソースチェックコード(リソースの変更時刻、リソースサイズ、その他の情報を使用して生成されます)が含まれます。リクエストを受信すると、サーバーはネゴシエーションキャッシュの有効期限が切れているかどうかを判断します。 、新しいリソースを返します。有効期限が切れていない場合は、304ステータスコードを返します。これは、リソースビットが更新され、引き続き使用できることを示します。
TCP->ネットワーク接続レイヤー
HTTPがリクエストを送信した後、データパケットは処理のために下位層のプロトコルスタックに渡されます。TCPヘッダーとIPヘッダーはそれぞれトランスポート層とトランスポート層に追加され、送信されます。道路沿いのゲートウェイはデータパケットを受信して​​識別します。サーバーがデータパケットを受信するまで転送し、同じプロセスに従ってデータパケットを返します。
HTTPS
HTTPはプレーンテキストで送信されるため、盗聴、改ざん、なりすましの可能性があります。したがって、HTTPSはHTTPにSSLレイヤーを追加して、暗号化によるデータセキュリティを確保します。
SSLは、暗号化を使用して盗聴を防止し、署名を使用して改ざんを防止し、証明書を使用してなりすましを防止します。
クライアントとサーバー間の通信の前に、HTTPSプロトコルがキーネゴシエーションを実行します。非対称暗号化のラウンドを通じて、通常、RSA暗号化を使用して、後続の通信のために対称暗号化キーを転送します。非対称暗号化は遅すぎるため、後続の通信対称暗号化を使用します。キーネゴシエーションプロセス中に、サーバーは証明書をクライアントに送信し、クライアントは証明書のダイジェストの有効性をCAに検証することで、man-in-the-middle攻撃を防ぎます。
中間者攻撃:SSLハイジャック攻撃、SSLストリッピング攻撃、SSLアルゴリズムに対する攻撃、
SSLハイジャック攻撃はSSL証明書のなりすまし攻撃です。HTTPSで送信されるプレーンテキストデータを取得するには、攻撃者は自分自身を接続する必要があります。クライアントとターゲットWebサイト。;送信プロセス中にサーバーの証明書を偽造し、サーバーの公開鍵を独自の公開鍵に置き換えて、仲介者がクライアントとサーバー間のデータ送信コンテンツを復号化できるようにします。Webサイトのフロントエンドに証明書の検証を追加することで、SSLハイジャック攻撃を防ぐことができます。
SSLストリッピング攻撃、つまり、HTTPS接続をHTTP接続にダウングレードします。クライアントがHTTPSURLに直接アクセスする場合、攻撃者は直接ダウングレードできません。攻撃方法は主に、ユーザーがWebサイトにアクセスするたびにブラウザにhttpsを直接入力しないようにするか、一部のWebサイトがネットワーク全体でHTTPSではないことです。クライアントとサーバー間のHTTPセッションを乗っ取ると、man-in-the-middle攻撃者は、HTTPページのすべてのhttps://ハイパーリンクをhttp://に置き換えます。ユーザーが対応するリンクをクリックすると、HTTPプロトコルアクセスに使用されます。WebサイトのフロントエンドでURLが改ざんされていないかどうかを確認することで、SSLストリッピング攻撃を防ぐことができます。
SSLアルゴリズムに対する攻撃:SSLプロトコルの低バージョンには脆弱性があります。これらの脆弱性は一般に悪用される可能性があります。サーバーのSSL構成を時間内にアップグレードすると、SSLアルゴリズムに対する攻撃を防ぐことができます。

TCPスリーウェイハンドシェイク

ここに画像の説明を挿入
最初は、クライアントとサーバーの両方が閉じられており、クライアントはアクティブに開いています。
1. TCPサーバーは最初に伝送制御ブロックTCPを作成し、いつでもクライアントの接続要求を受け入れる準備ができています。この時点で、サーバーはリッスン状態になります。
2. TCPクライアントプロセスは、最初に伝送制御ブロックTCPを作成し、次に要求メッセージをサーバーに送信します。メッセージヘッダーの同期ビットSYN = 1で、初期シーケンスseq = xが選択されます。このとき、クライアントはSYN-SENT(同期)ステータスに入ります。TCPは、SYN = 1であり、メッセージセグメントはデータを伝送できないと規定していますが、シーケンス番号を消費します。
3.要求メッセージを受信した後、TCPサーバーは接続に同意した場合に確認メッセージを送信します。確認メッセージのヘッダーにあるシーケンス番号フラグACK = 1、同期ビットSYN = 1、確認番号ack = x + 1を確認し、同時に初期シーケンスseq = yを選択します。このとき、サーバーSYN-RCVD状態になります(同期受信)。
4. TCPクライアントプロセスは確認メッセージを受信した後、確認メッセージもサーバーに送信します。確認メッセージのヘッダーには、確認シーケンス番号フラグACK = 1、確認番号ack = y + 1、および独自のシーケンス番号seq = x + 1があります。このとき、TCPは接続を確立し、クライアントは次のように入力します。 ESTABLISHED状態。TCPは、ACKセグメントがデータを伝送できることを規定しており、データを伝送しない場合、シーケンス番号は消費されません。
5.サーバーがメッセージを受信すると、サーバーはESTABLISHED状態になります。その後、両者は通信できます。

なぜ2、4回ではなく3回握手する必要があるのですか?

スリーウェイハンドシェイクは、無効な接続要求がサーバーによって受け入れられるのを防ぎます。2つのハンドシェイクがあるとします。ネットワーク上の理由により、クライアントが接続要求を送信します。サーバーが遅れて到着していません。クライアントは確認メッセージを受信して​​いません。サーバーが受信しなかったと考えてから、接続要求を送信し、接続を確立します。サーバーを使用して送信します。終了したら、サーバーから切断します。以前に取り残された要求メッセージが再びサーバーに到着すると、サーバーはクライアントとの接続を再び確立できるようになります。これは、サーバーがクライアントからのデータ送信を待機しているため、リソースが浪費されているためです。スリーウェイハンドシェイクの場合、以前に取り残された要求メッセージがサーバーに到着しても、サーバーは無効なメッセージを受け入れて確認メッセージをクライアントに送信しますが、サーバーが確認メッセージを再度送信することはできません。確認メッセージを受信すると、接続は再度確立されません。
双方向ハンドシェイクにより、一方向リンクがインテリジェントに通信できるようになります。理論的には、双方向リンク通信には4回必要ですが、確認メッセージの受信と同期メッセージの送信を行うサーバーを組み合わせてハンドシェイクを行うことができるため、サーバーはSYNデータパケットとACKデータパケットは一緒に結合されるため、実際には3つのハンドシェイクのみが必要です。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Justdoforever/article/details/114088510