この記事では、コンピューター ネットワークに関する ByteDance のフロントエンド面接でよくある質問のいくつかを紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
注: 各質問の前に表示される (xx) 数字は、この質問の頻度を表します。このコンピュータ ネットワーク基盤は、30 のフロントに基づいています。 -end インタビューからまとめられた質問とその回答、参考リンクなど。記事の内容はオファーを受けた本人がまとめたものです。
#400 リクエスト エラー
500 サーバー側エラー
503 サーバー ビジー
()Q: コンピュータ ネットワークについてどのように理解していますか
アプリケーション層、プレゼンテーション層、セッション層、トランスポート層、ネットワーク層、データリンク層、物理層
ブラウザは client_random と暗号化方式のリストを送信し、サーバーはそれを受信すると、server_random、暗号化方式のリスト、デジタル証明書 (公開鍵を含む) をブラウザに渡し、ブラウザは法的な認証を実行します。デジタル証明書の検証。検証に合格すると、pre_random が生成され、公開鍵で暗号化されてサーバーに送信されます。サーバーは client_random、server_random、pre_random を使用して、公開鍵を使用して秘密を暗号化します。は、この秘密を秘密鍵として使用し、その後の送信でデータを暗号化および復号化します。
最初は、双方が CLOSED 状態にあり、サーバーは特定のポートのリッスンを開始し、LISTEN 状態に入ります。
その後、クライアントは積極的に接続を開始し、SYN を送信します。その後、SYN-SENT、seq = x
になります。サーバーがそれを受信すると、SYN seq = y および ACK ack = x 1 ( SYN-REVD
になった後、クライアントは再度 ACK seq = x 1、ack = y 1 をサーバーに送信し、EASTABLISHED になります。サーバーが ACK を受信すると、ESTABLISHED にも入ります。
SYN はピア確認を必要とするため、ACK のシリアル化を 1 つ増やす必要があります。ピア確認が必要なものはすべて、 TCP メッセージのシリアル化を 1 ポイント消費
なぜ 2 回消費しないのでしょうか?
#クライアントの受信能力を確認できません。クライアントが最初に SYN メッセージを送信したが、それがネットワーク内に残った場合、TCP はパケットが失われたと判断して再送信し、2 回のハンドシェイクで接続が確立されます。 クライアントが接続を閉じるまで待ちます。ただし、後でパケットがサーバーに到着すると、サーバーはそれを受信し、対応するデータ テーブルを送信してリンクが確立されますが、この時点ではクライアントが接続を閉じているため、リンク リソースが無駄に消費されます。
なぜ 4 回ではないのでしょうか? ##4 回以上でも問題ありませんが、3 回でも十分です
4 回手を振ります
# #サーバーは受信後、CLOSED 状態に入ります
クライアントはこの時点でもまだ 2 つの MSL を待つ必要があります。サーバーから再送信リクエストを受信しない場合、クライアントは MSL を 2 つ待つ必要があります。 ACK が正常に到着したことを意味します。ウェーブが終了し、クライアントは CLOSED 状態に変わります。それ以外の場合、ACK は再送信されます。
なぜなら、待機しないと、サーバーにクライアントに送信するデータ パケットがまだ多くあり、クライアント ポートが新しいアプリケーションによって占有されている場合、無駄なデータ パケットが受信されてしまうからです。したがって、最も安全な方法は、サーバーから送信されたすべてのデータ パケットがなくなるまで待ってから、新しいアプリケーションを開始することです。
1 MSL は、4 つのウェーブにおけるアクティブな終了側からの最後の ACK メッセージが最終的にピアに到達できることを保証します。
1 MSL は、次の場合にピアに到達できることを保証します。 end が ACK を受信しない場合、再送信された FIN メッセージは
**3 回の場合、サーバーの ACK と FIN は 1 つの波に結合されます。このような長い遅延により、TCP FIN がサーバーに到達できなくなり、クライアントはFIN
##参考文献https://zhuanlan.zhihu.com/p/86426969
Q: インタラクション中にデータ送信が完了し、それでも切断したくない場合はどうすればよいですか? どのように維持すればよいですか?
TCP スライディング ウィンドウは、送信ウィンドウと 受信ウィンドウの 2 つのタイプに分類されます。
参考文献
https://juejin.im/post/5e527c58e51d4526c654bf41#Heading-38
Ajax は非同期の JavaScript と XML であり、インタラクティブな Web アプリケーションを作成するための Web 開発テクノロジです。
websocket は、Real-Socket を実装する HTML5 の新しいプロトコルです。ブラウザとサーバー間の通信時間さまざまなライフサイクル:
Websocket は接続が長く、セッションは常に維持されます
ajax は送受信後に切断されます
アプリケーションの範囲:
イニシエーター:
たとえば、電子商取引のシナリオでは、商品の在庫が変更される可能性があるため、それをユーザーに適時に反映する必要があるため、クライアントはリクエストを送信し続け、サーバーはチェックし続けることになります。変更の場合は、変更に関係なく、すべてが返されます。これはショートポーリングです。
ロングポーリングのパフォーマンスは、変更がない場合は返されず、変更またはタイムアウト (通常は 10 秒以上) を待ってから返されます。リクエストを送信し続ける必要がないため、双方のプレッシャーが軽減されます。
#参考リンクhttps://www.jianshu.com/p/3fc3646fad80
#tcp_keepalive_intvl = 15
#実際、HTTP には長いリンクと短いリンクがありません。TCP だけが持っています。TCP の長い接続では、TCP リンクを再利用して複数の HTTP リクエストを開始できます。これにより、次のようなリソースの消費を削減できます。一度に HTML をリクエストすると、後続の JS/CSS/画像などもリクエストする必要がある場合があります。
https://ブログ .csdn.net/weixin_37672169/article/details/80283935
参考リソース
https://github.com/camsong/blog/ issues/2
##質問: TCP はどのようにして効果的な送信と輻輳制御の原則を保証しますか。
主に 3 つの方法を使用します。
スロー スタートしきい値の輻輳回避#
##高速再送信 クイック返信#
スロースタートしきい値 (ssthresh)
送信側で輻輳ウィンドウを使用して、送信ウィンドウのサイズを制御します。その後、比較的保守的なスロー スタート アルゴリズムを使用して、ネットワークにゆっくりと適応します。最初の送信期間中、送信者と受信者はまず 3 ウェイ ハンドシェイクを通じて接続を確立し、それぞれのサイズを決定します。次に、両方のパーティの輻輳ウィンドウを初期化し、スロー スタートしきい値に達するまで、RTT (受信遅延と送信遅延) の各ラウンド後に輻輳ウィンドウのサイズを 2 倍にします。
次に、輻輳回避を開始します。輻輳回避の具体的な方法は、RTT の前の各ラウンドで輻輳ウィンドウを 2 倍にし、各ラウンドで 1 つずつ追加することです。
高速再送信
TCP 送信プロセス中にパケット損失が発生すると、受信側は 5 パケットなどの繰り返し ACK を送信します。このとき、送信側は 3 回の ACK を繰り返し受信します。 、RTO (タイムアウト再送信時間) を待たずにすぐに再送信されます。
選択的再送信: オプションでメッセージ ヘッダーに SACK 属性を追加し、左端と右端から到着したパケットにマークを付けてから再送信します。未配信パケット
迅速な回復
送信者が 3 つの重複 ACK を受信し、パケット損失を発見した場合、ネットワーク状態が異常事態に入ったように感じます。輻輳状態にある場合、急速回復フェーズに入ります。
輻輳しきい値が輻輳ウィンドウの半分に減ります
その後、輻輳が解消されます。ウィンドウ サイズが輻輳しきい値になります
その後、ネットワーク状況に適応するために輻輳ウィンドウが直線的に増加します
プローブ リクエストを送信して、特定のターゲット アドレスに対するリクエストにどのような制約が必要かを判断し、その制約に従って実際のリクエストを送信することを目的としています。
たとえば、クロスドメイン リソースの事前チェックは、HTTP OPTIONS メソッドを使用して最初に送信されます。クロスドメインリクエストの処理に使用されます
#欠点:
クリア テキスト送信は安全ではありません
OSI 7 層モデル
#アプリケーション層
プレゼンテーション層#アプリケーション層: アプリケーション層、プレゼンテーション層、セッション層: HTTPトランスポート層: トランスポート層: TCP/UDP
ネットワーク層: ネットワーク層: IP
データリンク層: データリンク層、物理層
参考資料