Memperbaiki masalah penskalaan jendela dengan Linux TCP

8

Saya mencoba untuk meningkatkan throughput salah satu server saya di luar negeri dan setelah memantau transfer antara server dan komputer di rumah saya dengan wireshark, saya cukup yakin saya memiliki masalah dengan ukuran jendela.

Untuk transfer ftp saya mendapatkan ukuran jendela terima dari 14720.

Window size value: 115
Calculated window size: 14720
Window size scaling factor: 128

Jendela kirim saya terlihat seperti apa yang saya atur:

Window size value: 65335
Calculated window size: 261340
Window size scaling factor: 4

Jadi bagaimana cara memperbaiki rwindow? Saya telah melalui pengaturan tcp linux di server saya dan semuanya tampak normal. Stempel waktu aktif, sinkronisasi tidak aktif, penskalaan aktif, karung aktif, kubik adalah metode kontrol kemacetan, maks menerima dan mengirim ukuran jendela 3mb. Saya sudah mencoba mengubah nilai tcp_wmem dan tcp_rmem default tetapi tidak melakukan apa-apa.

EDIT:

Ketika saya mematikan autotuning dan / atau skala jendela pada server, jendela menyusut menjadi 14600, yang pada dasarnya 10x MSS.

5337    4.268584    2.2.2.2 1.1.1.1 FTP 106 Response: 227 Entering Passive Mode (2,2,2,2,240,15).
5338    4.268640    1.1.1.1 2.2.2.2 TCP 74  59855 > 61455 [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=431721460 TSecr=0 WS=128
5364    4.300368    1.1.1.1 2.2.2.2 TCP 54  57609 > ftp [ACK] Seq=217 Ack=648 Win=15744 Len=0
5480    4.346856    2.2.2.2 1.1.1.1 TCP 66  61455 > 59855 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=128
5481    4.346867    1.1.1.1 2.2.2.2 TCP 54  59855 > 61455 [ACK] Seq=1 Ack=1 Win=14720 Len=0
5482    4.346893    1.1.1.1 2.2.2.2 FTP 70  Request: STOR 100mb.bin
5570    4.428061    2.2.2.2 1.1.1.1 FTP 109 Response: 150 Opening BINARY mode data connection for 100mb.bin
5571    4.428078    1.1.1.1 2.2.2.2 TCP 54  57609 > ftp [ACK] Seq=233 Ack=703 Win=15744 Len=0
5572    4.428155    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5573    4.428166    1.1.1.1 2.2.2.2 FTP-DATA    1514    FTP Data: 1460 bytes
5662    4.505384    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=1461 Win=8832 Len=0
5663    4.505392    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5664    4.505421    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=2921 Win=11776 Len=0
5665    4.505429    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5666    4.505535    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=4381 Win=14720 Len=0
5667    4.505543    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5734    4.583769    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=5841 Win=17536 Len=0
5735    4.583778    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
5736    4.583781    2.2.2.2 1.1.1.1 TCP 60  61455 > 59855 [ACK] Seq=1 Ack=7301 Win=20480 Len=0
5737    4.583787    1.1.1.1 2.2.2.2 FTP-DATA    2974    FTP Data: 2920 bytes
penyamaran2
sumber
Apakah Anda melihat jendela menyusut ke nol selama transfer? Apakah Anda benar-benar melihat penundaan paket sementara satu sisi menunggu ketersediaan jendela? Akan sangat membantu jika Anda dapat memposting pcaps (dengan cap waktu) yang menurut Anda mengonfirmasi ini sehingga dapat dianalisis oleh komunitas.
polinomial
jendela tidak menyusut, saya tidak berpikir ada penundaan paket hanya ukuran jendela yang tidak akan meningkat.
incognito2

Jawaban:

4

Dimulai dengan kernel linux 2.6.17 (atau ada kira-kira), faktor skala default ditingkatkan. Kelemahan dari ini adalah bahwa tampaknya ada router / firewall / dll. yang tidak benar menangani TCP Window Scaling (rfc hanya ~ 16 tahun). Jika Anda harus melintasi salah satu perangkat ini maka Anda harus mematikan penskalaan jendela atau hal lain menjadi sangat lambat.

Pada sistem Redhat / Redhat like, "fix" adalah untuk:

  /bin/cat <<'EOT'>>/etc/sysctl.conf

  # Turn off the tcp_window_scaling
  net.ipv4.tcp_window_scaling = 0
  EOT

  /sbin/sysctl -p
gsiems
sumber
Saya memeriksa wireshark dan server mengiklankan jendela 14720 jadi saya tidak berpikir itu karena router. Saya sepertinya memiliki masalah dengan SEMUA koneksi tcp.
incognito2
0

hmmm. Bisakah Anda memberi kami informasi lebih lanjut? Seperti ...

TCP melepaskan {Reno, Vegas, dll} Arah trasfer {desktop -> server, server-> desktop, sesuatu yang lain} apa yang Anda gunakan untuk pengukuran? iperf? tombak?

Nikolaidis Fotis
sumber