2016-07-02 26 views
0

最近、優れたGoogleのパケットドリルツールを使用してテストを書く必要がありました。 (https://github.com/google/packetdrillパケットドリルテストは移植可能ですか?

要約すると、これは、Cコマンド、期待される送信および受信パケットを組み合わせたテストケースを書くだけで、私たちのコンピュータのTCP(またはIPまたはUDP)スタックをテストできるツールです。

しかし、私はこれらのテストがどのように移植可能かを理解できません。たとえば、githubディレクトリでテストを実行すると、それらのほとんどすべてが失敗します。

のはこの1つfr-4pkt-sack-linux.pktを見てみましょう:

// Test fast retransmit with 4 packets outstanding, receiver sending SACKs. 
// In this variant the receiver supports SACK. 

// Establish a connection. 
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3 
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 

+0 bind(3, ..., ...) = 0 
+0 listen(3, 1) = 0 

+0 < S 0:0(0) win 32792 <mss 1460,sackOK,nop,nop,nop,wscale 10> 
+0 > S. 0:0(0) ack 1 <mss 1460> 

+.1 < . 1:1(0) ack 1 win 257 
+0 accept(3, ..., ...) = 4 

// Send 1 data segment and get an ACK, so cwnd is now 4. 
+0 write(4, ..., 1000) = 1000 
+0 > P. 1:1001(1000) ack 1 

私は次のエラーを取得:

fr-4pkt-sack-linux.pkt:19: error handling packet: live packet field ipv4_total_length: expected: 1040 (0x410) vs actual: 297 (0x129) 
script packet: 0.100283 P. 1:1001(1000) ack 1 
actual packet: 0.100277 P. 1:258(257) ack 1 win 29200 

を(64-ビットUbuntuのGNOME 16.04である)私のコンピュータだけで257バイトを送ることを示していると思われます最初のパケットは1000の代わりに使用されます(ウィンドウスケーリング引数は単に無視されます)。

sack-shift-sacked-1-2-3-fack.pktのような他のテストを実行すると、wscale引数がコンピュータで無視されるようです。

だから、私の質問は以下のとおりです。

  • が通常wscale引数を無視するということですか?私のコンピュータは奇妙な動作をしていますか?
  • 通常の場合(特定のLinux TCP機能のような)、私のコンピュータ上で実行されるパケットドリルテストが他のコンピュータ上で実行されるようにするにはどうすればよいですか?

ソリューションは非常に簡単だったが、私は同じような状況にある人のために、このトピックをしておこう事前

答えて

1

でいただきありがとうございます。

実際、sysctl経由でTCPウィンドウのスケーリングを無効にしました。

私はここで設定ファイルを使用:http://cnp3book.info.ucl.ac.be/2nd/html/_downloads/sysctl-cnp3.conf

を私はsysctl -w variableで変数を変更しますが、私はそれらの変更は、コンピュータを再起動した後、持続的であったことを認識していませんでした。 sysctlを使用しているときは、(テスト後にこれらの設定をリセットするのを忘れた場合)コンピュータ全体が壊れる可能性がありますので、注意してください。

デフォルトにリセットした後、完全に機能するようになりました。したがって、パケットドリルテストの移植性は(新しい主要なTCP機能がない場合は)大丈夫と思われます。

関連する問題