Risolvere i problemi di ridimensionamento delle finestre con Linux TCP


8

Sto cercando di migliorare il throughput di uno dei miei server all'estero e dopo aver monitorato un trasferimento tra il server e il mio computer di casa con WireShark sono abbastanza sicuro di avere un problema con le dimensioni della finestra.

Per un trasferimento ftp ottengo una dimensione della finestra di ricezione di 14720.

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

La mia finestra di invio assomiglia a ciò che ho impostato su:

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

Quindi, come posso risolvere la finestra? Ho esaminato le impostazioni di tcp di Linux sul mio server e tutto sembra normale. I timestamp sono attivi, i syncookie sono disattivati, il ridimensionamento è attivo, i sacchi sono attivi, cubico è il metodo di controllo della congestione, la dimensione massima della finestra di ricezione e invio è 3mb. Ho provato a cambiare i valori predefiniti di tcp_wmem e tcp_rmem ma non fa nulla.

MODIFICARE:

Quando disattivo l'autotuning e / o il ridimensionamento delle finestre sul server, la finestra si riduce a 14600, che è sostanzialmente 10 volte l'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

Stai vedendo la finestra ridursi a zero durante i trasferimenti? Stai effettivamente vedendo ritardi di pacchetti mentre una parte è in attesa della disponibilità della finestra? Sarebbe utile se potessi pubblicare i pcaps (con timestamp) che pensi confermino in modo che possano essere analizzati dalla community.
polinomio

la finestra non si restringe, non credo che ci siano ritardi nei pacchetti solo una dimensione della finestra che non aumenta.
incognito2

Risposte:


4

A partire dal kernel 2.6.17 (o lì), il fattore di scala predefinito è stato aumentato. L'aspetto negativo di questo è che sembrano esserci router / firewall / ecc. che non gestiscono correttamente il ridimensionamento delle finestre TCP (l'RFC ha solo ~ 16 anni). Se devi attraversare uno di questi dispositivi, devi disattivare il ridimensionamento della finestra, altrimenti le cose diventano molto lente.

Su un sistema simile a Redhat / Redhat la "correzione" è:

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

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

  /sbin/sysctl -p

Ho controllato WireShark e il server sta pubblicizzando una finestra di 14720, quindi non credo sia a causa di un router. Mi sembra di avere questo problema con TUTTE le connessioni TCPC.
incognito2,

0

hmmm. Potresti darci qualche informazione in più? Ad esempio ...

TCP rilascia {Reno, Vegas, ecc} Trasferimento direzione {desktop -> server, server-> desktop, qualcos'altro} che cosa stai usando per la misurazione? iperf? arpione?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.