Linuxのメカニズム

  • 操作機能ソケットの読み取り/書き込みおよびRECV /センドの使用量が1より前のフラグパラメータよりも、実質的に同じです。参照してくださいソケットI / O機能をそれは読み出し動作がデータを待ってブロックしますゾーンを受信バッファソケットデータがない場合、実行されたソケットを、ブロックされている場合、書き込み操作が行われた場合、ソケットの送信バッファにデータが書き込まれるように保存するのに十分なスペースを持っていない場合、それは緩衝地帯を待ってブロックします。リリース。リード/鎖の切断が発生し、キャッシュデータを空にすることができ、バッファへの書き込みデータが成功した後、すぐに戻りますが、書き込みソケットバッファゾーンは、データが正常なTCP RST TCPパケットを受け取るなど、ピアに送信されることを意味するものではありません。ソケットは、受信バッファにデータソケットエラーが直接EWOULDBLOCKが返され、存在しない場合、読み出し動作が行われた場合、非ブロッキングである場合、書き込み動作を実行しながら、ソケット場合、送信バッファ内に十分なスペースが送信されるすべてまたはデータをコピーするには不十分です空間は、N個のコピーの前部は、ソケットEWOULDBLOCK伝送エラーが返されたときに何のバッファ空間データを収容せず、バイトの数が実際にコピーを返すことができます。fcntlの機能は、ソケットをノンブロッキングO_NONBLOCK番号を提供されたファイル記述子を使用することができます。
  • /非ブロック接続をブロックすることは比較的のソケットです。読んで、通常のサーバーのために、ブロックされたスレッドの書き込みを防ぐために非ブロックを使用します。golang読み取り/書き込みがブロックされているが、最下層には、あなたが複数のコルーチンのノンブロッキングを使用することができノンブロッキングされます。

参考

TCP / IPネットワークプログラミングソケットの動作に

  •  Linuxのプロセスのスケジューリング
  • 記述子が読み取りまたは書き込みの準備ができているため、通常はレディ(準備ができていたら、選択()、ポール()、のepoll()などで主にサーバーを多重IOは、複数の記述子を監視することができ、これはファイルディスクリプタであります)書き込み操作の前に、プログラムは、それに応じて読み込みと書き込み操作を通知することができます。しかし、彼らは、本質的に、同期IOです。

参考:

I / Oマルチプレクサ選択し、世論調査、epollを使用との違い

  • ゼロは、カーネルスペースのコピーにユーザ空間の数を減らすために主にコピーします。ゼロコピー技術、一般的に使用されたmmap、sendfileの、のFileChannel、DMAなど。sendfileを使用している場合、ユーザーはファイルを変更することはできませんが、もしmmapを使用してファイルを変更することができます。Linuxのバージョン2.4を起動し、基礎となるオペレーティングシステムは再コピーバッファにせずに、散乱が/プロトコルエンジン、カーネルデータ空間にカーネル空間から直接バッファにこのデータを読み取るためにDMAモードを収集し提供しますカーネル空間にのみ周辺の書き込み動作がフルバッファで遮断される場合には、関連するバッファソケット。

参考:

Linuxでのゼロコピーメカニズムに

  •  TCP
    • TCPのTIME_WAITは、2つの機能があります。
      • 防止後続のTCP接続にTCP接続の前の残差データ(シリアル番号ちょうど状況)
      • TCPを防ぐために破棄され、最後のACKパケットの間に放出される波の場合は、ACKパケットの再送が必要
  • 共有FASE:バイトアライメントの原則
  • Linuxのネットワークキュー:IPスタックのパケットがなqdiscキューに直接提出され、なqdiscは、トラフィックを制御するために、特定の戦略を使用することができます
    • 自動的にデータドライバキューを防止するために、データのドライバキューの長さによって調整BQLは、過剰によって引き起こされるBufferbloat発生する遅延。TSO、GSO、UFOとGROはそうスループット遅延を改善するために、キューの中のドライブデータの増加を引き起こす可能性があり、これらの機能をオフにすることができます。
    • なqdisc(キューイング規則)は、トラフィックの分類、優先順位付けとレート制御を達成するために、IPスタックとドライバのキューの間に配置さなどが挙げられます。あなたは使用することができますTCコマンドの設定を。なqdiscの3つの重要な概念があります。QDiscs、クラスとフィルタが
      • トラフィックキュー用のqdisc。Linuxは、各なqdisc対応するメッセージキューと動作を満たすためにロットのqdiscを実現しています。このインタフェースは、キューマネージャなqdiscは、NICドライバと修正前提なしにIPスタックに実装することができる可能にします。デフォルトでは、各カードが割り当てられているpfifo_fastのqdiscの種類を。
      • 第二は密接なqdiscクラスに関連しています。インディペンデントなqdiscはおそらくトラフィックを処理するために、それらの異なるクラスを実現しています。
      • なqdiscのフィルタまたは分化トラフィッククラスに応じました。

  • TCP RTTとRTO
  • TCP 輻輳回避アルゴリズムは、現在主流のLinuxのデフォルトの輻輳回避アルゴリズムキュービック、あなたはSS -iコマンドを使用することができます。ウィンドウ、輻輳ウィンドウをスライドTCP、受信端末のウィンドウサイズを摺動すると、データを受信することができる(2 ^ tcp_window_scaling)*等しいWINDOW_SIZEで、バッファのサイズがピアに通知するACKパケットを介してデータを受信することができる。介してSS -i輻輳ウィンドウcwndのフィールドが取得され、送信側はデータがCWNDのサイズや受信機の広告ウィンドウを超えることはできません送信します。
ウィンドウをスライディング、本質的に記述データは、そのデータは、このデータに基づいて、どのくらいの計算までを送信するためにTCPデータ送信元の受信者のバッファサイズ。送信側はウィンドウサイズがTCPパケット0の受信者である受信した場合、送信者は受信者がデータグラム0の到着のためのウィンドウサイズを送信しなくなるまでのデータと待機の送信を停止します。
スライディングウィンドウについて、すなわち、3つの用語があります。

ウィンドウが閉じ:右に左の窓から接近すると、データが送信され、承認されたときに、この現象が発生します。  
ウィンドウのオープン:時に沿って右にウィンドウが移動するの右側に、この現象は、データを受信した後、プロセスの終了時に発生します。  
ウィンドウ収縮:ウィンドウの右側に沿って左に移動するとき、現象はほとんど発生しません。  

次のアルゴリズムルックタホ、リノ図輻輳アルゴリズム(高速再送と高速リカバリ)とキュービックアルゴリズム、3つの相のアルゴリズムは、輻輳回避フェーズに切り替えるかどうか、タイムアウトか確認するために、重複確認応答に基づいて、スロースタートと同じです。輻輳回避フェーズの異なる点。アルゴリズムはtahos(TCP-IPからのコメント - 第1巻)に記載されています。

1 )所与の接続については、65535バイトの1つのセグメント、SSTHRESHにCWNDを初期化します。
2 )出力TCP出力ルーチンは、CWNDのサイズや受信機の広告ウィンドウを超えることはできません。広告ウィンドウは、受信パーティのフロー制御である一方、輻輳回避は、送信者によって課せられたフロー制御です。後者は、受信者との接続に使用可能なバッファサイズに関連している前者は、ネットワークの輻輳送信者の感触の推定値です。
3 輻輳が(発生した場合)、タイムアウトまたは重複確認応答の受信)、SSTHRESH半現在のウィンドウサイズ(最小のCWndと受信機の広告ウィンドウサイズが、二つのセグメントの最小値)に設定されています。輻輳がタイムアウトによって引き起こされている場合に加えて、その後、CWND(これはスロースタートである)一つのセグメントに設定されています4新しいデータがお互いを確認すると)、私たちはCWNDを増やし、その増加は、我々は継続的なスロースタートや輻輳回避に近づくかどうかに依存します。CWND未満又はSSTHRESH、進行中のスロースタート、そうでなければ継続的な輻輳回避に等しい場合。スロースタートは、輻輳が発生したとき、我々は唯一の停止の場所に戻ってハーフタイム(私たちは私たちのウィンドウサイズのステップ2でトラブルを与えるために半分を記録するので)まで続き、その後、輻輳回避の実装に。スロースタートアルゴリズム初期設定CWNDは、一つのセグメントに、各確認がインクリメントされる受け取ります。これは、指数関数的にウィンドウを増加させる:セグメント、2つ、その後4つ⋯⋯送信します。輻輳回避アルゴリズムは、ときに確認、各受信のcwndは1 / cwndを増加しますが必要です。プラス成長(添加増加)でスロースタートと比較指数の増加。我々は(にRTTで受け取ったどのように多くのACKに関係なく)、ラウンドトリップ時間にセグメントにまで増加CWNDことを願っていますが、スロースタートにcwndは確認を受け、ラウンドトリップ時間の数に応じて増加します。

図はから来るCSDN輻輳がCWND大幅に伝送効率を低下させる、1に設定されているであろう場合タホアルゴリズムを見ることができ、

 リノの使用、高速再送信および高速リカバリアルゴリズムは、タホを向上させます。

高速再送 
高速再送アルゴリズムは最初に必要とするときに、各受信者がすぐに重複確認応答の問題の後にセグメントの障害を受けた(できるだけ早くセグメントとして知っている送信者を有効にするために、反対側に到達していない)と、彼らはデータを送信するまで待てませんこれは、ピギーバックを実施しました。
受信機が受信した後、M1及びM2は、それぞれの確認応答を送信しています。今、受信機はM3を受けるが、その後M4を受けていないことを前提としています。明らかに、受信者は、セグメントが受信したためM4が故障している、M4を確認することはできません。信頼性の高い伝送原理によると、受信者は何もできない、あなたはまた、適切な時にM2の確認を送信することができます。しかし、高速な再送アルゴリズムに従って、受信当事者は速やかに送信重複確認応答M2の、これは、送信者が早期セグメントM3が受信者に到達していない知らせることができなければなりません。送信者は、その後、M5とM6を送信します。受信した後、両方のパケットを受信し、また再びM2の重複確認を発行しました。したがって、送信者は、すべての3つの重複確認応答の後に、4つのM2受信側の肯定応答を受信しました。高速再送アルゴリズムは、限り、送信者が3つの連続で重複確認応答を受け取ると、すぐに再送信セグメントM3は、まだ期限切れにM3の設定したタイマの再送信を待ち続けすることなく、反対側を受信していないはずです、それを提供します。初期の送信者は、このように全体のネットワークを使用して、未確認のセグメントを再送信するため、特定の高速再送後約20により増加させることができる高速リカバリ 
プロセスを使用したと高速再送と高速回復アルゴリズムもが次の2点があります:
送信者が3つの連続で重複確認応答を受信すると、アルゴリズム「ダウン乗算」を実行し、スロースタートしきい値SSTHRESH半分。これは、ネットワークの混雑を防ぐためです。ご注意:スロースタートアルゴリズムは、次に実行されていません。
送信者は、今、ネットワークが輻輳が発生しないので、開始時以外は遅いが今スロースタートアルゴリズムであること(すなわち、輻輳ウィンドウCWNDは現在1に設定されていない)が実行されず、CWNDの値はスロースタート閾値SSTHRESH保存するように設定されているのでその後、半後の値、および、輻輳ウィンドウが直線的に緩やかに増加され、その結果、輻輳回避アルゴリズム(「添加剤増加」)を開始します。


リノは、輻輳回避アルゴリズムの場合に見られる伝送効率、高速再送および高速輻輳を検出することが助長高速回復メカニズムを改善する、1にcwndをしないであろう。

 立方ながらリノ輻輳回避アルゴリズムは、まだ線形位相増加しているBICアルゴリズム、輻輳回避フェーズ二分法の輻輳ウィンドウが増加した速度と比較し最高の直線的な増加を発見します。図は、から来ている

以下は、2図最初リノアルゴリズムで回避の混雑に、立方体、立方輻輳ウィンドウで回避混雑への第2のアルゴリズムは、より高速な近似見ることができ、

  • 同じホストのTCP通信において、使用することができるジャンボパケットを、MSSは、平均1460バイトよりもはるかに大きいです。MTUの道この場合の要件を満たして大量のパケットの作成と送信に導くためには、LinuxはTSO、USOとGSOを達成するために、下記参照説明
送信パス上の大量のパケットに関連するオーバーヘッドを回避するためには、Linuxカーネルの実装いくつかの最適化:TCPセグメンテーションオフロード(TSO)、
UDPフラグメンテーションオフロード(UFO)と、一般的なセグメンテーションオフロード(GSO)。これらの最適化のすべては、IPスタックが出NICのMTUより大きいパケットを作成することができます。
IPv4の場合、パケットとして大きなとしてのIPv4の最大65536のバイトを作成することができ、運転者のキューにキューイング。ケース TSOとUFOの、NICハードウェアが責任取るための物理的に送信されるパケットに十分に小さなを単一の大きなパケットを破壊しインタフェースハードウェアをサポートしていないNICの場合、
GSOは、同じ操作を実行のドライバのキューにキューイングする前にすぐにソフトウェアを。
  • Linuxの名前空間:
    • マウント名前空間は:によって名前空間をマウント分離の/ proc / [PID] /マウントは 、の/ proc / [PID] / mountinfo、 コマンドをマウントしての/ proc / [PID] / mountstats文書のみコンテナがマウントされていることを表示します情報
    • PID名前空間:/ procをコマンドは、コンテナ内のps -efコマンドの使用は、内部コンテナの過程を見ることができます実装することにより
    • cgroup内の名前空間:プロセスがコンテナに/ proc / $ PID / cgroup内、およびそれまでの対応するディレクトリのcgroupを通して見ることができるのcgroupコンテナ
    • ネットワークの名前空間:異なる名前空間に属する2つのプロセス、自分の/ proc / $ PID /ネット同じ情報であれば、情報2つのプロセスが同じ名前空間に属している場合は、その/ procの/ $ PID /ネット同じ。/ procの/ $ PID / netディレクトリに加えて、ネットワークの名前空間も分離 / SYS /クラス/ネットを、/ procの/ SYS /ネット、ソケットなどに。

おすすめ

転載: www.cnblogs.com/charlieroro/p/11436331.html