2016-04-04 29 views
0

TCP再送信はどのように行われますか? 再送信されるパケットの数によって、次の式が決まります。 キュービックTCPのどこかに設定されていることは分かっていますが、どこですか?TCP再送信:再送信されるパケットの数はいくつですか?

Linuxでの動作に興味があります。私はDebian 8を使い、ダンプを探しています。 27000ポートにnetcatを使って接続を設定しました。私は通常、iptablesをポート27000上のすべてのパケットをドロップしてパケットを送信するサーバー上で行います(パッケージが何回再送信されたか見てください)。

+0

これは、*非常に*幅広い質問(私の答えを参照)です。 **あなたはより具体的になりたいかもしれません。**あなたの質問は、「あまりにも広すぎる」、または話題にならない(直接関連するプログラミングではないため)とフラグを立てて保留にすることがあります。 – jbm

答えて

0

これは非常に広い質問です。

いいえ、これは基本的にも必ずしもCUBICではありません。

再送は、TCP "basic" RFC 793(1981)、セクション3.7データ通信、段落 "再送タイムアウト"で最初に指定されます。

それ以来、多くの(実際には多くの [*])拡張がありました。非常に目立つのは、RFC 5681で最後に指定された「スロースタート」ですが、ルーツは1997 RFC 2001、「TCPスロースタート、輻輳回避、高速再送、および高速回復アルゴリズム」に戻ります。

このドメインには「1つのサイズがすべて適合」はありません。常にトレードオフがあります。プラスの「スマート」アルゴリズムは、アプリケーションに応じて使用される場合と使用されない場合と使用可能な場合があります(組み込み機器と考える)ために、より多くのフットプリント(ソフトウェア+ CPU使用)を持ちます。そして、これらのものは実装のです(つまり、ホスト間の交換データには見られません)。たとえば、セグメントにTCPウィンドウのサイズとスケールが表示されますが、どのアルゴリズムによって管理されているかは分かりません。

Linuxの場合、PRRにはがデフォルトで、3.2以降となっています。それ以前はCUBIC、それ以前のBICでした。

デフォルトでは、利用可能な唯一のものではありません。

[email protected]:~$ cat /proc/sys/net/ipv4/tcp_allowed_congestion_control 
cubic reno 

...とで利用できるダースがあります:

[email protected]:~$ cat /proc/sys/net/ipv4/tcp_congestion_control 
cubic 

もののリノがあまりにも利用可能である:私のdebian株式4.4.0カーネルでは、それはCUBICだ「TCPは:高度な輻輳制御」セクションカーネル構成の

*: https://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm

+0

私はDebianも使います(ちょうど私はnetcatとlookダンプを使います)。本当に難しい質問ですが、今はrtoと見なされていることを理解していますが、rto(または総再送信パケット)の合計が見つかりませんでした。私はなぜオプション/ proc/sys/net/ipv4/tcp_retries2を理解していない。私はRFCを見続けるつもりです。 –

+0

もちろん、https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txtと(122ページの長さの)RFC 1122を読んだことがあります。これは_Huge_トピックそのものです.Linuxネットワーキングの実装は、膨大な量のコードです。 2つのアドバイス:1 /ネットワーキングでは、Linuxは「単独で」ではないことを覚えておいてください。私は組み込みLinuxを中心に15年間、ミドルウェアのネットワーキングに取り組んできました。 、Windows CEからプロプライエタリなアビオニクスのスタックまで、何のものもありません。だから、Linuxだけで学んだことは、「現実の世界」には変換されません。 – jbm

+0

(...と2番目のアドバイス)2/eCos、RTEMS、FreeRTOSなどを調べるために、TCP/IP輻輳処理の実装が簡単になるかもしれませんが、CUBICに集中したい場合は、 Linuxの実装でOKかもしれません。 '/ proc/sys/net/ipv4/tcp_retries2'がCUBICに何らかの形で関連しているのであれば、私は自分自身については知りません(まだ知る必要はありません)。例:テストのためだけに、私はRenoに切り替えました。それは同じ '15'の値でまだそこにあります。 – jbm

関連する問題