まず、この質問に対する適切なフォーラムではないことをお詫びします。論文のために OMNeT/INET に 2 つの tcp 輻輳制御アルゴリズムを実装しようとしています。
最初のものは TCP-FIT で、 http://www.tcpengines.com/wp-content/uploads/2013/11/tcp-whitepaper.pdfで疑似コードを見つけました。もう 1 つは TCP-Illinois で、その Linux 実装をhttp://lxr.free-electrons.com/source/net/ipv4/tcp_illinois.cで見つけました。
両方のメカニズムでいくつかの変数とメソッドを実装する方法がわかりません。それらを理解するためにあなたの助けをいただければ幸いです。変数の型についても少し助けていただければ幸いです。
簡単に言うと、TCP-FIT の場合:
- epoch_startとupdate_epoch (エポックが RTT と同義であることは理解しています)
- アルファ(値)
- n - それは何ですか?
- RTT_cnt の計算は正しいですか ( receivedDataAck() の下)?
- tcpFitUpdateN() 関数は正しいですか?
- 疑似コードを正しく実装しましたか?
TCP イリノイの場合:
- snd_cwnd_cnt -- これは、ACKED されたパケットの数の単なるカウンターだと思います。
- snd_cwnd_clamp -- 輻輳ウィンドウの上限です。私は正しいと思います。
- end_seq -- 必要なようですが、関数tcp_illinois_cong_avoid (struct sock *sk, u32 ack、u32 acked) {...}
- tp->snd_nxt -- OMNeT++ の state->snd_nxt と同等ですか?
- sum_rttとmax_rtt -- これらの値を正しく計算できますか?
私の理解では、Linux 実装で提供されている論文を読んだ後、TCP-Illinois は AIMD 部分を除いて TCP-NewReno と同じように機能しています。これは、TCP-SACK 部分と AIMD を除いて、TCP-NewReno のほとんどのコードをそのまま維持できることを意味するに違いありません。
また、実装に関するヒントや、もちろんコードの正確性に関するコメントもいただければ幸いです。私の現在のほぼ完全な実装は、https://github.com/SpyrosMArtel/TCP-Fit-Illinoisの github にあります。
詳細や説明が必要な場合は、お気軽にお問い合わせください。
前もって感謝します。