Passa al contenuto principale

A partire da OpenVOS 17.1, STCP supporta la marcatura temporale, il riconoscimento selettivo e le opzioni TCP di window scaling. Questo permetterà un flusso di dati più efficiente quando i segmenti TCP vengono lasciati cadere o quando si inviano dati su una connessione ad alto ritardo di banda (una connessione su un link in cui la minima larghezza di banda * latenza globale * minima > 65536). L'effetto di questi cambiamenti è trasparente per le applicazioni, ma ci sono alcune cose di cui si dovrebbe essere consapevoli quando si usa packet_monitor.

In primo luogo, quando STCP invia una richiesta di connessione il segmento TCP (SYN) conterrà ora altri 16 byte.

17:41:26.533 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   3c, ID a789, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  f2f6, Src a4984dd9, Dst a4984d32
TCP from 164.152.77.217.55423 to 164.152.77.50.7777
    seq  3825990103, ack     n.a., window  8192, 20 data bytes, flags Syn.
    X/Off 0a, Flags 02, Cksum b717,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a 32 2d bc 85  0  <<<4<<<< <<<2-<>
     10     0  0  0  0
2 4 5 b4 opzione 2 (dimensione minima del segmento), lunghezza totale dell'opzione 4 byte, valore 05 b4 (1460 decimale) (questi byte non sono nuovi)
3 3 6 opzione 3 (scala a finestra), lunghezza totale dell'opzione 3 byte, valore 6
4 2 opzione 4 (riconoscimento selettivo supportato), lunghezza totale 2 byte
8 a 32 2d bc 85 0 0 0 0 0 0 opzione 8 (timbro temporale), lunghezza totale 10 byte, tempo di invio 32 2d bc 85, tempo di ritorno 0 0 0 0 0 0
0 opzione 0 (fine delle opzioni)

In secondo luogo, le opzioni inviate in un segmento di risposta alla connessione (SYN/ACK) dipenderanno da ciò che contiene il segmento SYN dell'host remoto. STCP includerà l'opzione di riconoscimento selettivo supportata nella sua risposta solo se la richiesta di connessione la include. La risposta includerà le opzioni di scala della finestra e di marcatura temporale solo se la richiesta di connessione include anche entrambe le opzioni.

14:31:32.145 Rcvd Ether Dst 00:00:a8:42:34:56  Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   3c, ID  44c, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  95e6, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.65007 to 164.152.77.217.7777
    seq  3289184624, ack     n.a., window  8192, 20 data bytes, flags Syn.
    X/Off 0a, Flags 02, Cksum 91e8,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a 30 b8 95 1a  0  <<<4<<<< <<<08><
     10     0  0  0  0                                       <<<<

14:31:32.146 Xmit Ether Dst 00:00:a8:42:52:22  Src 00:00:a8:42:34:56 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   3c, ID    0, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  9a32, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.65007
    seq  3172667591, ack 3289184625, window  8192, 20 data bytes, flags Syn Ack.
    X/Off 0a, Flags 12, Cksum 6b81,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a  1 35 72 23 30  <<<4<<<< <<<<5r#0
     10    b8 95 1a  0                                       8><<

Per default gli host Windows includono solo la dimensione massima dei segmenti, scala della finestra e riconoscimento selettivo supportato opzioni. Senza l'opzione della marcatura oraria nella risposta alla richiesta di connessione, la risposta di STCP non include le opzioni della marcatura oraria o della scala della finestra. Si noti che gli 1 inclusi nelle opzioni della finestra sono le opzioni NO-OP e sono utilizzati per rendere il numero di byte di opzione un multiplo intero di 4. Il multiplo fine delle opzioni (0) alla fine delle opzioni nella risposta di STCP sono per lo stesso motivo.

14:54:02.635 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:23:54:52:18:6e Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   34, ID  a4f, Flg/Frg 4000, TTL 80,  Prtl  6
          Cksum  0c39, Src a4984d32, Dst a4984dd9
TCP from 164.152.77.50.13478 to 164.152.77.217.7777
    seq  3499417963, ack     n.a., window  8192, 12 data bytes, flags Syn.
    X/Off 08, Flags 02, Cksum 65c8,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b8  1  3  3  8   1  1  4  2              <<<8<<<< <<<<

14:54:02.636 Xmit Ether Dst 00:23:54:52:18:6e  Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   30, ID b3d5, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  e6b6, Src a4984dd9, Dst a4984d32
TCP from 164.152.77.217.7777 to 164.152.77.50.13478
    seq  3986949958, ack 3499417964, window  8192, 8 data bytes, flags Syn Ack.
    X/Off 07, Flags 12, Cksum 85e0,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  4  2  0  0                           <<<4<<

La parte confusa arriva dopo che il collegamento è stato stabilito. Il seguente pacchetto contiene solo 1 byte di dati anche se il pacchetto byte di dati Il campo dice 13. I primi 12 byte sono due opzioni NO-OP seguite da un'opzione di marcatura temporale. Il sito byte di dati è lo 0x alla fine.

15:02:36.545 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:00:a8:42:52:22 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   35, ID  447, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  95f2, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.60312 to 164.152.77.217.7777
    seq  2814493687, ack 4102208833, window   128, 13 data bytes, flags Push Ack
+.
    X/Off 08, Flags 18, Cksum c9d0,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     1  1  8  a 2a 28 5d 8f  38 9f e0  a  0           <<<<*(]> 8>`<

Come posso riconoscere la differenza tra opzioni e dati? Il sito X/Off è il numero di parole a 32 bit nell'intestazione TCP. Se non ci sono opzioni, questo valore è 5, quindi un valore di 8 indica un'aggiunta di tre parole a 32 bit o 12 byte in più.

Questo pacchetto successivo è solo un riconoscimento, non contiene dati. Si noti che l'offset è di nuovo 8, quindi ci sono 12 byte di opzione e la lunghezza dei dati è solo 12.

15:02:39.758 Xmit Ether Dst 00:00:a8:42:52:22  Src 00:00:a8:41:34:56 Type 0800
+(IP)
IP   Ver/HL 45, ToS  0, Len   34, ID  48a, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  95b0, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.60312
    seq  4102208833, ack 2814493688, window   128, 12 data bytes, flags Ack.
    X/Off 08, Flags 10, Cksum a751,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     1  1  8  a 38 a0  2 91  2a 28 5d 8f              <<<<8 <> *(]>

Il seguente pacchetto è un esempio di un segmento contenente un riconoscimento selettivo con 3 blocchi di numeri di riconoscimento. Si noti il X/Off valore di 0f che indica un ulteriore 40 byte ((15 - 5) * 4) nell'intestazione TCP che packet_monitor riporta come byte di dati.

9:52:39.491 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP   Ver/HL 45, ToS 60, Len   50, ID   59, Flg/Frg    0, TTL 35,  Prtl  6
          Cksum  4355, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
    seq  1652086450, ack 3779437719, window  4096, 40 data bytes, flags Ack.
    X/Off 0f, Flags 10, Cksum c834,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     1  1  8  a  2 9e 86 bd  3c 4b dd 57  1  1  5 1a  <<<<<<<< >K<W<<<<
     10    e1 45 f6 77 e1 45 f8 83  e1 45 f2 5f e1 45 f4 6b  <E<w<E<< <E<_<E<k
     20    e1 45 c9 6f e1 45 cb 7b                           <E<o<E<{

Il numero di riconoscimento nell'intestazione TCP è il più a destra edge dei byte ricevuti continuamente. I blocchi di dati nell'opzione di riconoscimento selettivo indicano blocchi di dati che sono stati ricevuti. Gli spazi vuoti tra i blocchi rappresentano i byte che non sono stati ricevuti.

Tutto questo sarebbe molto più semplice se packet_monitor riportasse correttamente le opzioni invece di riportarle come dati. Il bug stcp-2963 è stato aggiunto per far sì che packet_monitor faccia proprio questo. Il bug è programmato per essere risolto in una futura release, fino ad allora bisogna fare attenzione al valore X/Off.

L'opzione della scala a finestra ha il potenziale per essere la più confusa. Il seguente pacchetto mostra un ricevere finestra di soli 4096 byte.

9:52:38.975 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP   Ver/HL 45, ToS 60, Len   34, ID    8, Flg/Frg    0, TTL 35,  Prtl  6
          Cksum  43c2, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
    seq  1652086450, ack 3779392131, window  4096, 12 data bytes, flags Ack.
    X/Off 08, Flags 10, Cksum a3cf,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     1  1  8  a  2 9e 86 39  3c 4b dc e3              <<<<<>><K<<<

Si tratta di una finestra estremamente piccola, ma le dimensioni sono fuorvianti perché la scala della finestra è in vigore. Come si fa a capirlo? L'unico modo per capirlo è di aver osservato la connessione iniziale impostata. Nel seguente caso si può vedere che sia il segmento SYN che il segmento SYN-ACK includono la scalatura della finestra e in entrambi i casi il valore di scala è 6, quindi la dimensione della finestra di 4096 (2^12) nel segmento di cui sopra è spostata di 6 bit per dare la finestra effettiva di 262144 (2^18 o 256K) byte.

9:52:38.818 Rcvd Ether Dst 00:00:a8:41:34:56  Src 00:04:96:52:21:6f Type 0800
+ (IP)
IP   Ver/HL 45, ToS 60, Len   3c, ID    5, Flg/Frg    0, TTL 35,  Prtl  6
          Cksum  43bd, Src 866fc8b9, Dst a4984dd9
TCP from 134.111.200.185.ftp-data to 164.152.77.217.53828
    seq  1652086449, ack     n.a., window  8192, 20 data bytes, flags Syn.
    X/Off 0a, Flags 02, Cksum 29fd,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  2 18  3  3  6  4   2  8  a  2 9e 86 11  0  <<<<<<<< <<<<>><
     10     0  0  0  0

9:52:38.819 Xmit Ether Dst 00:13:d4:59:7a:da  Src 00:00:a8:41:34:56 Type 0800
+ (IP)
IP   Ver/HL 45, ToS  0, Len   3c, ID    a, Flg/Frg    0, TTL 3c,  Prtl  6
          Cksum  3d18, Src a4984dd9, Dst 866fc8b9
TCP from 164.152.77.217.53828 to 134.111.200.185.ftp-data
    seq  3779391082, ack 1652086450, window  8192, 20 data bytes, flags Syn Ack
+.
    X/Off 0a, Flags 12, Cksum 3b87,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a 3c 4b dc cf  2  <<<<<<<< <<<<<K<
     10    9e 86 11  0                                       >><

Queste opzioni sono sotto il controllo dei parametri STCP.

come: list_stcp_params    

Parametri STCP:

. . . .
IP più basso dimensione massima del segmento [500-1480] (min_mss) 576
. . . .
dimensione massima finestra di invio [4096-1073725440] (max_send_ws) 1073725440
massimo finestre enormi [>=0] (max_huge_windows) 0
attuale enorme finestra 0
massimo 256k finestre [>=0] (max_256k_finestre) 25
finestre attuali 256k 0
. . . . .
TCP RFC-1323 Policy [disable/allow/request] (tcp_rfc_1323_policy) richiesta
TCP richiesta scala finestra [0-14] (tcp_finestra_scala) 6
Politica TCP SACK [disattivare/ammettere/richiedere] (tcp_SACK_policy) richiesta

come:

Il sito tcp_rfc_1323_politica indica se verranno utilizzati i timbri temporali. I valori dei parametri sono disabilitato/consentito/richiesta. L'impostazione predefinita della richiesta indica che l'opzione fa parte di un segmento di richiesta di connessione e, se richiesto in una richiesta di connessione ricevuta, farà parte del segmento di risposta. Un valore di allow indica che l'opzione non farà parte di un segmento di richiesta di connessione, ma può far parte di una risposta, se la richiesta di connessione ricevuta la include. Il valore di disabilitazione indica che l'opzione non farà parte di nessuno dei due tipi di segmento. L'impostazione del valore di disabilitazione indica anche che l'opzione della scala della finestra non farà parte del segmento.

Il sito tcp_finestra_scala l'opzione controlla il parametro di scalatura. Un valore di zero indica all'host remoto che la scalatura della finestra è supportata ma non per scalare la finestra di STCP.

15:48:43.409 Rcvd IP   Ver/HL 45, ToS  0, Len   3c, ID  450, Flg/Frg    0, TTL 3
+c,  Prtl  6
          Cksum  95e2, Src a4984d80, Dst a4984dd9
TCP from 164.152.77.128.65410 to 164.152.77.217.7777
    seq  1987362195, ack     n.a., window  8192, 20 data bytes, flags Syn.
    X/Off 0a, Flags 02, Cksum b8b3,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  6  4   2  8  a 30 ca ac 69  0  <<<4<<<< <<<0J,i
     10     0  0  0  0                                                       

15:48:48.575 Xmit IP   Ver/HL 45, ToS  0, Len   3c, ID    2, Flg/Frg    0, TTL 3
+c,  Prtl  6
          Cksum  9a30, Src a4984dd9, Dst a4984d80
TCP from 164.152.77.217.7777 to 164.152.77.128.65410
    seq  3853608469, ack 1987362196, window  8192, 20 data bytes, flags Syn Ack.
    X/Off 0a, Flags 12, Cksum c550,  Urg-> 0000
     offset 0  .  .  .  4  .  .  .   8  .  .  .  C  .  .  .  0...4... 8...C...
      0     2  4  5 b4  3  3  0  4   2  8  a  1 47 89 66 30  <<<4<< < <<<<G>f0
     10    ca ac 69  0                                       J,i

Il sito tcp_sack_policy controlla l'opzione di riconoscimento selettivo. I valori possono essere disabilitati, consentiti e richiesti e hanno esattamente lo stesso significato che hanno per l'opzione tcp_rfc_1323_policy.

Infine, con il supporto del window scaling è possibile avere finestre più grandi del precedente massimo di 64K , così sono stati creati due nuovi pool di dimensioni di finestra. Queste si riflettono nei pool max_256k_windows e max_huge_windows. È possibile regolare il numero massimo di socket che possono pubblicizzare una finestra di 256K o una finestra ancora più grande impostando i valori max_256k_windows o max_huge_windows.

Il parametro max_send_ws riflette il fatto che la massima finestra di ricezione dell'host remoto possibile è ora 2^30 (1073725440 è in realtà 2^30 - 2^14). Per un dato socket la dimensione massima effettiva della finestra di invio con il minimo del parametro max_send_ws e gli host remoti pubblicizzati ricevono la dimensione della finestra di ricezione.

© 2024 Stratus Technologies.