# Opció d'escala de finestra TCP

L'opció d'escala de la finestra TCP és una opció per augmentar la mida de la finestra de recepció permesa al Protocol de control de transmissió per sobre del seu valor màxim anterior de 65.535 bytes. Aquesta opció TCP, juntament amb diverses altres, es defineix a que tracta de xarxes llargues de greix (LFN).

## Finestres TCP

El rendiment d'una comunicació TCP està limitat per dues finestres: la finestra de congestió i la finestra de recepció. La finestra de congestió intenta no superar la capacitat de la xarxa ( congestion control); la finestra de recepció intenta no superar la capacitat del receptor per processar dades ( control de flux ). El receptor pot estar aclaparat per les dades si, per exemple, està molt ocupat (com un servidor web). Cada segment TCP conté el valor actual de la finestra de recepció. Si, per exemple, un remitent rep un ACK que reconeix el byte 4000 i especifica una finestra de recepció de 10000 (bytes), el remitent no enviarà paquets després del byte 14000, encara que la finestra de congestió ho permeti.

## Teoria

L'opció d'escala de finestra TCP és necessària per a una transferència eficient de dades quan el producte de retard d'ample de banda (BDP) és superior a 64 KB [1]. Per exemple, si una línia de transmissió T1 d'1,5Mbit/s es va utilitzar a través d'un enllaç per satèl·lit amb un temps de 513 d'anada i tornada en mil·lisegons (RTT), el producte de retard d'ample de banda és $\scriptstyle 1,500,000\times 0.513=769,500$ bits o uns 96.187 bytes. Utilitzant una mida màxima de memòria intermèdia de 64 KB només permet omplir la memòria intermèdia fins a (65.535 / 96.187) = 68% de la velocitat màxima teòrica d'1,5 Mbit/s, o 1,02 Mbit/s.
Mitjançant l'opció d'escala de finestra, la mida de la finestra de recepció es pot augmentar fins a un valor màxim de $1,073,725,440\ \scriptstyle \left(=(2^{16}-1)\times (2^{14})=65,535\times 16,384)\right)$ bytes, o aproximadament 1 GiB. Això es fa especificant un recompte de desplaçaments de dos bytes al camp d'opcions de la capçalera. La mida real de la finestra de recepció es deixa desplaçada pel valor del recompte de torns. Es pot utilitzar un valor màxim de 14 per al valor del recompte de torns. Això permetria que una única connexió TCP transferís dades a través de l'enllaç per satèl·lit d'exemple a 1.5 Mbit/s utilitzant tot l'ample de banda disponible.
Essencialment, no es pot transferir més d'una finestra de transmissió completa en un període d'anada i tornada. L'opció d'escala de finestres permet una única connexió TCP per utilitzar completament un LFN amb un BDP de fins a 1 GB, per exemple, un enllaç 10 Gbit/s amb temps d'anada i tornada de 800 ms.

## Possibles efectes secundaris

Com que alguns tallafocs no implementen correctament l'escalat de finestres TCP, pot provocar que la connexió a Internet d'un usuari no funcioni de manera intermitent durant uns minuts i després sembla que torni a funcionar sense cap motiu. També hi ha un problema si un tallafoc no admet les extensions TCP.

## Configuració de sistemes operatius
### Windows

TCP Window Scaling s'implementa a Windows des de Windows 2000. Està habilitat per defecte a Windows Vista / Server 2008 i posteriors, però es pot desactivar manualment si cal. Windows Vista i Windows 7 tenen un buffer de recepció TCP predeterminat fix de 64 kB, escalant fins a 16 MB mitjançant "autotuning", limitant l'ajustament manual de TCP a xarxes llargues i grans.

### Linux

Els nuclis de Linux (a partir de 2.6.8, agost de 2004) han habilitat per defecte l'escalat de finestres TCP. Els paràmetres de configuració es troben al sistema de fitxers /proc, vegeu pseudo-fitxer/proc/sys/net/ipv4/tcp_window_scaling i els seus acompanyants/proc/sys/net/ipv4/tcp_rmem i/proc/sys/net/ipv4/tcp_wmem (més informació: man tcp, secció sysctl).

## Referències

* ↑ «Network connectivity may fail when you try to use Windows Vista behind a firewall device» (en anglès). Support.microsoft.com. [Consulta: 11 juliol 2019].
* ↑ «Description of Windows 2000 and Windows Server 2003 TCP Features» (en anglès). Support.microsoft.com. [Consulta: 11 juliol 2019].
* ↑ «TCP Receive Window Size and Window Scaling» (en anglès). Arxivat de l'original el January 1, 2008.
* ↑ «Network connectivity fails when you try to use Windows Vista behind a firewall device» (en anglès). Microsoft, 08-07-2009.
* ↑ «MS Windows» (en anglès). Fasterdata.es.net. [Consulta: 11 juliol 2019].
* ↑ «/proc/sys/net/ipv4/* Variables» (en anglès).