C ++インタビューの質問の概要 - (CPPネットワークプログラミングに基づきます)

1.主な機能は、後になるかを実行すると実装の前に実行されますか?

[A]主機能が実行される前に、主に初期のシステム・リソースを初期化する機能と関連

  1. スタックポインタを設定します
  2. 静的およびグローバル初期化静的なグローバル変数、データ・セグメントの内容、すなわち
  3. グローバル変数は、例えば、割り当てを初期化されません:、ブール値偽ポインタ0として数値short int型の長さであるnullである、など、すなわち、BSSセクション
  4. C ++コンストラクタでグローバルコンストラクタ、機能を実行します
  5. パラメータの主な機能、のargc、主な機能、などに渡されるargvが、実際に実行することができます

主機能が実行された後、それは、グローバル・オブジェクトデストラクタが実行される
メイン後に実行される関数を登録することができ_oneexit

あなたがメインの終了後に実行されるいくつかのコードを追加する必要がある場合は、atexitを()関数で、登録機能を使用することができます。


2.ネットワークパッケージ粘着性の問題

参考:https://blog.csdn.net/zhangxinrun/article/details/6721495

ロングとショートの接続コネクタ2.1

[A]

  1. ロング接続
    クライアントとサーバーの接続を確立するために常にオープンし、その後、メッセージは、メッセージの送受信
  2. 短い接続
    トランザクションが多地点通信に完了した後、パケット通信の接続のためのすべてのクライアントおよびサーバは、複数のクライアントとサーバーのように、すぐに抜い確立されている行為

2.2とき、私は粘着性の袋の問題を検討する必要がありますか?

  1. あなたは、TCPを使用している場合は、それぞれの時間は、あなたがお互いに接続を確立するためにデータを送信した後、双方が送信するデータの一部を終えた後、それは接続を閉じ、そう何の問題こだわりのパックが存在しない
    httpプロトコルに似た唯一のパッケージ構造があるので、メイン接続は1.1が閉じています両サイドには密接な関係を送りたいです。
  2. 送信者は、単に送信するように、ファイル転送などの一切の伝送データ構造は、受信機にだけOKストレージを受け入れない場合は、スティック包装を考慮していません
  3. 両方の丁~~確立は、異なるデータ構造の接続後の時間の期間内に送信される必要がある場合、受け入れを保証するために、ヘッダ内のデータパケットの長さなどを追加することが必要です。

2.3理由は、スティックのパッケージを表示されます。

それはメッセージの境界(参照ウィンドウネットワークプログラミングを)持っているので、ストリーミングでは、UDPは、パッケージがくっつきません


  1. バッファを待つ送信者の必要性が出て送信する前にいっぱいある、スティックパッケージが発生します
  2. 受信者は受け入れ複数のパッケージで、その結果、タイムリーなパケットバッファを受信しません

2.4ソリューション

  1. 送信者によって引き起こさスティックパッケージ現象のため、ユーザーはクラスを回避するようにプログラムすることができ、TCPはすぐに送信されたプッシュ力指令データを提供し、それは、バッファが送らいっぱいになるまで待つ必要はありません
  2. 粘着性にパッケージを受け入れるためのパーティーのために、それはこのような問題を回避、データを受け入れるように時間にそれを作るために、受信プロセスの優先順位やその他の措置を増やし、受信処理負荷を合理化、プログラムの設計を最適化することができ、パッケージをスティック、
  3. これにより、複数のヒトコントロール受信機で受信者、パケット構造フィールドのデータによって制御され、その後スティックパッケージを回避するために結合

上記の3つのアクションは、その欠点を持っています。
ネットワークの伝送効率を低下させること差出人スティックパッケージのために避け最初のセットをプログラミングする方法、それをオフ最適化アルゴリズムは、アプリケーションのパフォーマンスに影響を与えている間はお勧めしません。

第二の方法は、スティックパッケージの可能性を低減することができるが、ネットワークまたは期間は、データパケットのバーストを引き起こす可能性があるため、完全に、スティックパッケージ、高周波伝送を回避しない高速受信機、受信機に到着まだスティックパッケージで、その結果、手遅れレセプションがあるかもしれません。

第三の方法は、スティック包装を避けますが、リアルタイムアプリケーションが適切ではないあまり効率的なアプリケーションが。

2.5ネットワークを説明します

A.最初DATA1、DATA2を受信し、受信した。
B.は、第1の部分データDATA1を受信し、DATA1は、次いで、残りの部分の全てを受信し、DATA2。
C.は、DATA1とDATA2の全データのデータの最初の部分を受信し、次いで残りの受信されたデータDATA2。
D.使い捨てはDATA1とDATA2の全体のデータを受け取りました。

なぜそこにはBCD。ケースである
「スティックパック」は、送信側で起こり得るが、また受信側で発生し得ます。

1. Nagleアルゴリズムの送信者スティックパッケージによって引き起こさ:Nagleアルゴリズムは、我々はTCPにいくつかのデータを提出する場合、TCPは一度このセクションでデータを送信するが、待機していない、簡単に言えばネットワークの伝送効率を向上させるためのアルゴリズムです。この時間は、それは二つのデータを送信する場合は、送信するデータがあるかどうかを見るために待っている間の短い時間は、。これは簡単に説明Nagleアルゴリズム、書籍の詳細な外観です。Cと同様にケースD Nagleアルゴリズムを生じやすいです。

注:自動的に小さいメッセージバッファの数を接続するためのNagleアルゴリズム、プロセス(以下Nagling)が送信されるソフトウェア・パッケージの数を減らすことにより、ネットワークの効率を向上させます。

2. 受信側は受信側がタイムリースティックパッケージではありません受信受信したTCPデータは、独自のバッファを持つことになりますし、何らかの理由でTCPのアプリケーション層は、タイムリーなデータをフェッチすることができないときに撮影したアプリケーション層のデータを通知します。アウト、それはいくつかの段落に保存されているTCPバッファのデータが発生します。

2.6 UDPパケットは、粘着性の問題でしょうか?

[A]

  1. UDPのため、合併は、最適化アルゴリズムの使用をブロックしません、実際には、今では、により多くのサポートUDPモードに、skbuff(ソケットバッファ)の受信端は、各鎖構造を記録するために用いられるように、受信側では、プロセスを区別することが容易となるようにそれぞれに到達するUDPパケットは、UDPパケット(情報源アドレスおよびポート)メッセージヘッダを有します。だから、UDPは、パッケージの問題がくっつきません

2.7保護メッセージ境界と流れ

参考:https://blog.csdn.net/tiandijun/article/details/41961785


罫線とメッセージフローを保護

だから、国境やニュースの流れにそれを守るために何ですか?

保護メッセージの境界は、受信機が唯一の別のメッセージを受信することができ、インターネットを介して送信別個のメッセージのようなデータ転送プロトコルを指します。保護境界メッセージが存在することを、受信側は、コンソールから送信されたデータパケットを受信することができます。送信側が連続的にデータを送信する場合、受信側は受信動作可能である、それは、2つの以上のパケットを受信し、保護されていない保護されたメッセージの境界のためのストリームを指します。

たとえば、私たちは三つの連続データパケットサイズを送信2K、4K、8K、これらの3つのデータパケットで、受信側は受信するに関係なく、我々は受信バッファを使用する方法、UDPプロトコルを使用していない場合は、ネットワークスタックを持っているに達していますTCPプロトコルを使用しながら、データパケットのすべてを完了することができるようにするデータ、我々は3回処置を受けている必要がありますが、受け取った、私たちは14K以上に入れて、我々は一度、すべてのパケットが受信バッファサイズの設定を下受けすることができ、唯一のアクションを受信する必要があります。

注意:

各メッセージは独立しているように、これは、UDPプロトコルメッセージ境界の保護のためです。そして、まだストリーミングデータのデータフローの文字列として、彼はデータがメッセージであるとは思いませんでした。これほど多くの人々は、TCPがベースのトランスポート・ストリーム、データの連続送信をクリアしていない、通信のためのTCPプロトコルを使用することであり、彼らはしばしば、TCPパケット損失を知っているだろう。彼らは十分な大きさのバッファを使用するときため、実際には、彼らはかつて二つ以上のパケットを受信した可能性があり、そして多くの人々はそれを無視する傾向があり、ちょうど最初のパケットを解析確認し、受信された他のパケットは無視されています。あなたが時間を作りたい場合は、私たちは親切ネットワークプログラミングの、我々はこれに注意を払う必要があります。


3.メモリプールの設計

STLメモリプールの導入など参考STLソースの解像度、

4.ネットワークプログラミングの暗号化アルゴリズム

4.1どのようにデータ伝送のセキュリティ問題を解決するには?

4.2暗号化アルゴリズム

おすすめ

転載: blog.csdn.net/shaoye_csdn1/article/details/90634806