2016-07-02 41 views
0

最近我不得不使用優秀的google的packetdrill工具編寫測試。 (https://github.com/google/packetdrillpacketdrill測試是否可移植?

總而言之,它是一種可以測試我們的計算機的TCP(或IP或UDP)堆棧的工具,只需編寫一些結合C命令,預期出站和入站數據包的測試用例即可。

但是,我不明白這些測試是多麼便攜。例如,如果我在github目錄上運行測試,幾乎所有這些失敗。

讓我們這樣一個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功能),我們如何確保在我的計算機上運行的packetdrill測試可以在其他計算機上運行?

預先感謝您

回答

1

的解決方案是非常簡單的,但我會繼續這個話題對於那些誰是在同樣的情況。

事實上,我只是通過sysctl禁用TCP窗口縮放。

我這裏使用的配置文件:http://cnp3book.info.ucl.ac.be/2nd/html/_downloads/sysctl-cnp3.conf

我改變的變量與sysctl -w variable,但我不知道,這些變化是重新啓動計算機之後是持續的。

所以,不要犯同樣的錯誤:使用sysctl時要小心,它可能會損壞整個計算機(如果您在測試後忘記重置這些設置)。

重置爲默認值後,它現在可以正常工作。因此,packetdrill測試的可移植性似乎沒問題(如果沒有新的主要TCP功能)。