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.