TCP (Transmission Control Protocol)
Vicente González Ruiz
December 15, 2014
Contents
1 TCP (Transmission Control Protocol) [5]
- Designed by Vint Cerf and Bob Kahn in 1981.
- Provides reliable, ordered, error-checked delivery of a stream of octets
between programs running on the same or different hosts.
struct TCP_header {
uint16 Source_Port;
uint16 Destination_Port;
uint32 Sequence_Number; /* Byte offset in the stream. */
uint32 Acknowledgement_Number; /* Next expected byte. */
uint4 Header_Length; /* In 32-bit words. */
bit[3] Reserved = 0;
bit NS; /* ECN-nonce concealment protection. */
bit CWR; /* Congestion Window Reduced. */
bit ECE; /* ECN-Echo. */
bit URG; /* The Urgent_Pointer field is significant. */
bit ACK; /* The Ack..._number field is significant. */
bit PSH; /* Push received data to the application. */
bit RST; /* Reset the connection. */
bit SYN; /* Synchronize sequence numbers. */
bit FIN; /* No more sending data. */
uint16 Receiver_Window_Size; /* Number of expected bytes to receive. */
uint16 Packet_Checksum; /* Inluding the pseudo-header. */
uint16 Urgent_Pointer; /* The last urgent data byte. */
int32* Options;
}
2 Servicios proporcionados
- Protocolo de transporte por excelencia en Internet [8, 1, 3].
- RFC’s 793 (principalmente), 854, 1122, 1323, 2018, 2581 y 2988.
- Transferencia fiable de datos (control de errores y de flujo) basado en un
protocolo ARQ con pipelining (mezcla de GBN y SR).
- Es orientado a conexi’on (antes de transmitir ’esta se establece).
- Las conexiones son siempre unicast (entre dos procesos). No se puede
realizar multicasting.
- Multiplexaci’on: el TCP distingue procesos dentro del mismo host a partir
del puerto en el que escuchan y a qui’en estn escuchando.
- Control agresivo de la congesti’on (por el bien com’un).
- Full-duplex (comunicaci’on en ambos sentidos al mismo tiempo).
- Los procesos ven byte-streams, no datagramas o segmentos.
3 El contexto de trabajo
- Corre encima del IP (capa de red) lo que significa que los paquetes de
datos se pueden perder, desordenar, duplicar y llegar con errores.
- Las latencias son muy variables lo que complica conocer la duraci’on de
los temporizadores utilizados para conocer cundo hay que retransmitir los
segmentos.
- Se implementa s’olo en los sistemas finales. Los routers no distinguen entre
paquetes UDP o TCP (ellos ven datagramas, no conexiones).
- Supone que la red no proporciona informaci’on acerca de la congesti’on, lo
que significa un ahorro considerable en la complejidad de los dispositivos
de nivel 3 (routers) e inferiores.
4 Transmisin de datos
4.1 El segmento TCP
- Aunque las aplicaciones leen y escriben un flujo de bytes, el TCP agrupa
los bytes en segmentos que son transmitidos como los datagramas UDP.
Esto se hace para minimizar el overhead provocado por las cabeceras de
los segmentos (20 bytes como mnimo).
- El tamao de cada segmento o MSS (Maxium Segment Size) depende
de:
- El MTU (Maximum Transfer Unit)
de la red directamente conectada (en la que est el host). Si el tamao
del segmento es ms grande que el MTU, el IP fragmentar los segmentos
y si uno se pierde, el TCP tendra que retransmitir todo el segmento
a nivel de transporte, no el sub-segmento (paquete) perdido a nivel
de IP.
- El instante en que el emisor realiza un push del flujo (enviar ahora).
- Un tiempo mximo de espera.
- El formato del segmento TCP es:

SrcPort | Puerto del proceso emisor. |
DstPort | Puerto del proceso receptor. |
Seq | Indice del primer byte de datos del segmento |
| dentro del flujo de datos. |
Ack | Siguiente byte esperado. |
Window | Tamao de la ventana de recepcin del emisor del segmento |
| (nm. de bytes que puede recibir sin enviar un nuevo ACK). |
HdrLen | Longitud de la cabecera en palabras de 32 bits. |
Flags | 6 bits que pueden representar: |
| SYN Sincronizacin de nm. de secuencia. |
| FIN Fin de la transmisin. |
| RESET Fin anmalo de la transmisin. |
| PUSH Segmento enviado mediante un push. |
| URG Datos urgentes (no ignorar en receptor). |
| ACK Segmento contiene Ack. |
Checksum | De la cabecera, pseudo-cabecera y datos. Obligatorio. |
UgrPtr | Punto donde se finalizan los datos urgentes. |
Options | MSS, marca temporal y factor de escala. |
Data | Datos transmitidos. |
- La pseudo-cabecera en TCP es idntica a la del UDP, excepto en que el
campo PROTO.
4.2 EL proceso de desmultiplexacin
4.3 Establecimiento de la conexin
Se utiliza el Algoritmo Three-Way Handshake:
- e
,
los nmeros de secuencia inciales, suelen ser un nmeros aleatorios. Motivos:
- Para minimizar la probabilidad de que un segmento de una conexin
anterior ya terminada y que se encuentra viajando por la red sea
tomado errneamente por un segmento vlido de una conexin posterior
entre los mismos puntos extremos [3].
- Para evitar el ataque del “nmero de secuencia” [6] que consiste en que
un cliente “ilegal” puede suplantar a un cliente “legal” averiguando
los nmeros de secuencia de los segmentos ,
usando su IP y su puerto de salida. Tras la suplantacin el cliente
“legal” podra acceder a datos restringidos o cerrar la conexin con el
servidor.
- Los dos primeros segmentos son de control, ninguno puede transportar
datos. El tercero s puede transportar datos [4]. A partir del tiempo en
lnea azul, los procesos pueden emitir y recibir segmentos normales con
datos.
4.4 Transmisin de datos urgentes
- Existen situaciones donde los datos deben entregarse a la aplicacin
receptora lo antes posible. TCP indica esto en sus segmentos activando el
flag URG.
- El tratamiento de los segmentos urgentes se produce slo entre las capas
de transporte del emisor y del receptor. El IP es ajeno y trata por igual a
todos los segmentos, independientemente de si el flag URG est activado o
no.
- Cuando dicho flag est activado, UrgPtr indica hasta qu parte de los datos
a partir del comienzo de los datos son de carcter urgente.
- Cuando llega un segmento con el flag UGR activado hasta el receptor, la
parte urgente de ste es entregado al proceso receptor lo antes posible.
4.5 Cierre de la conexin
- Generalmente es el cliente el que cierra la conexin. Esto se hace con el
Algoritmo Four-Way Handshake:
- El cliente, tras la emisin del segundo ACK espera tpicamente 2 MSL
(
segundos en la mayora de las implementaciones [7, 2]) que es intervalo de
tiempo en el cual podra recibirse otro ACK+FIN del servidor si el ACK
del ciente se perdiera y no llegara al servidor.
Si esto ltimo ocurriera, el servidor reenviara el ACK+FIN y si este se
retrasara lo suficiente, otra aplicacin en el host cliente podra establecer
una nueva conexin con la aplicacin servidora, usando el mismo puerto
de salida. Si a continuacin llegara el ACK+FIN retrasado, dicha conexin
se cerrara puesto que el cliente considera que el servidor desea cerrar la
conexin [7].
4.6 El diagrama de estados
- Frecuentemente se representa mediante una mquina de estados finita
donde los nodos son estados y las transiciones se etiquetan mediante
evento/accin.
- Los eventos pueden estar provocados por la llegada de nuevos segmentos
con informacin de control (SYN, FIN, etc.) o porque la aplicacin local
realiza una llamada al TCP (Apertura Pasiva, Cierre, etc.).
- No siempre que se produzca un evento necesariamente se genera una salida.
En este caso slo cambiamos de estado.
- En rojo aparecen las transisiones normalmente seguidas por el cliente y
en verde las seguidas por el servidor.
5 Control de flujo y de errores
- El TCP utiliza 2 colas circulares (ventanas deslizantes organizadas en
bytes) en cada host, una para transmitir y otra para recibir.
- La estructura de la cola de emisin es la siguiente:
- La estructura de la cola de recepcin es:
- El control de flujo lo realiza el receptor controlando el tamao de la ventana
emisora del emisor (campo Window).
- Cuando la ventana emisora del emisor se hace 0, el proceso emisor se
bloquea, lo que significa que el receptor no va a recibir ms datos, al menos
temporalmente.
Como el emisor no recibe un segmento de control del receptor si ste no le enva un segmento
con Window ,
el emisor peridicamente trata de enviarle 1 byte de datos al receptor.
Mientras el receptor no puede recibir ms datos, un segmento con Window
es enviado. Sin embargo, cuando el receptor puede recibir datos, este campo es
y la ventana del emisor es ampliada.
5.1 El tamao de las ventanas
- El tamao inicial de la ventana se determina durante el establecimiento de
la conexin.
- Cuando el factor de escala
del campo Options es igual a 1, el tamao mximo de la ventana del emisor es de
KB.
Este lmite es demasiado bajo para la mayora de los enlaces de media y larga distancia
(RTT
ms) [7]:
Enlace | Capacidad | ms Capacidad |
|
|
|
T1 | Mbps | KB |
Ethernet | Mbps | KB |
T3 | Mbps | KB |
Fast Ethernet | Mbps | MB |
STS-3 | Mbps | MB |
STS-12 | Mbps | MB |
STS-24 | Gbps | MB |
- El receptor puede utilizar el factor de escala para aumentar hasta
bytes el tamao de la ventana del emisor.
5.2 El tamao de los nmeros de secuencia
- TCP utiliza nmeros de secuencia de 32 bits y el tamao mximo de las
ventanas del emisor y del receptor es de
bytes. El primer factor
est determinado por el campo Window (de 16 bits) y el segundo por un
factor de escala presente en el campo Options (de 8 bits, aunque slo puede
llegar a valer 16). Ntese que estando TCP basado en el protocolo ARQ con
pipelining, excepto en el caso extremo se cumple siempre que la longitud de
la secuencia de conteo es siempre superior al tamao mximo de la ventana
emisora.
- Por desgracia esta condicin no es suficiente, pudindose dar el caso de que
si la red retrasa suficientemente un segmento, ste puede “suplantar” a otro
en un momento posterior de dicha u otra transmisin. Adems, este factor
aumenta proporcionalmente con la tasa de transmisin de la red [3]. En
otras palabras, teniendo en cuenta que el MSL
segundos, 32 bits son suficientes para la mayora de las situaciones, pero
no para todas [7]:
Enlace | Capacidad | Tiempo hasta wrap-around |
|
|
|
T1 | Mbps | horas |
Ethernet | Mbps | minutos |
T3 | Mbps | minutos |
Fast Ethernet | Mbps | minutos |
STS-3 | Mbps | minutos |
STS-12 | Mbps | segundos |
STS-24 | Gbps | segundos |
Wrap-around = Situacin que se produce cuando el nmero de secuencia sobrepasa el
lmite
y comienza de nuevo por el principio.
- Para solucionar el problema, en el campo Options de los segmentos TCP se
coloca una marca de tiempo. De esta forma el receptor puede saber cul de
los dos segmentos que tienen el mismo nmero de secuencia es el ms
viejo.
5.3 Retransmisin rpida
- El TCP no usa NAK’s. Sin embargo, cuando se pierde un segmento el
emisor puede percatarse de ello antes de que expire su temporizador
si recibe uno o ms ACK’s duplicados, es decir, cuando recibe un
reconocimiento para un segmento que ya haba sido reconocido.
- En la prctica, cuando se reciben 3 ACK’s del mismo segmento no se
espera a que expire el temporizador y se realiza una retransmisin rpida
del segmento [3]. Los diseadores del TCP estimaron que esperar slo a una
duplicacin del ACK podra fallar a la hora de estimar una prdida cuando
en realidad lo que ha ocurrido es que un segmento ha adelantado a otro.
Ejercicio 1: Imagine un caso en el que el TCP se comporte como
un protocolo ARQ con retroceso a N y otro caso en el que el TCP
se comporta como un protocolo ARQ con repeticin selectiva. Disee
ambos ejemplos bajo las siguientes premisas: (1) slo se pierde un
segmento con datos y (2) los segmentos con Ack’s nunca se pierden,
aunque pueden retrasarse tanto como sea necesario.
El TCP en general se va a comportar como un SR (Selective
Repeat) si los Ack’s no se pierden o retrasan:
Ejemplo GBN Ejemplo SR
----------- ----------
Emisor Receptor Emisor Receptor
| | | |
|----A0--->| |----A0--->|
|<--Ack0---| |<--Ack0---|
| | | |
|----B1--X | |----B1--X |
| | | |
|----C2--->| |----C2--->|
|<--Ack0---| |<--Ack0---|
| | | |
|----D3--->| |----D3--->|
Triple Ack |<--Ack0---| Triple Ack |<--Ack0---|
Reenvo B1 |----B1--->| Reenvo B1 |----B1--->|
| Ack3---| Envo Ack3 |<--Ack3---| Envo Ack3
Reenvo C2 |----C2--->|
| Ack3---| Envo Ack3
Reenvo D3 |----D3--->|
| Ack3---| Envo Ack3
Llega 1er Ack3 |<--Ack3 |
5.4 El sndrome de la ventana tonta
- Se genera con frecuencia cuando conectamos un emisor rpido a un receptor
lento.
- El receptor consume los datos byte a byte, y con cada uno de ellos enva
un segmento de confirmacin al emisor. El resultado es que los segmentos
enviados slo contienen un byte de datos lo que consume muchos recursos de
la red.
- La misma situacin aparece si el emisor es demasiado ansioso y no espera
a tener suficientes datos antes de enviarlos.
- Para prevenirlo:
- El receptor tratar de evitar el anunciar ventanas pequeas. En la prctica
espera a recibir
donde Window es el tamao actual de la ventana del receptor. Esto
implica que los ACK’s pueden retrasarse indefinidamente lo que
supone un problema para el emisor (para el clculo del time-out) y
para la red (por las retransmisiones innecesarias debidos a dichos
retrasos). En la prctica el TCP limita el retraso mximo de un ACK a
ms.
- El emisor tratar de evitar el usar segmentos pequeos (tinygrams), es decir,
acumular datos hasta generar segmentos iguales al MSS mientras no reciba
un ACK. As, si la aplicacin emisora es el cuello de botella y la aplicacin
receptora no est ansiosa (no enva ACK’s constantemente), el tamao de los
segmentos ser grande. A este procedimiento se le conoce como Algoritmo
de Nagle.
6 Control de la congestin
- Si el TCP percibe que la red se est congestionando disminuye la tasa de
transmisin y viceversa.
- Un emisor generalmente no conoce dnde ni por qu se est produciendo la
congestin. Simplemente experimenta un incremento en los RTT’s y tal vez
reciba algn paquete ICMP para informar de esta situacin. Ante ello, el
TCP debe reducir la tasa de transmisin [3].
- Si la congestin se hace ms severa los routers comienzan a descartar
paquetes. El TCP debe percatarse de este problema y no retransmitirlos
hasta que la congestin cese.
- Por este motivo, el tamao de la ventana emisora no slo depende de lo que
indica el receptor (control del flujo), sino que tambin va a tener en cuenta
el nivel de congestin.
- En la prctica, el tamao de la ventana emisora
va a ser igual al menor del tamao indicado por el receptor Window y un valor
impuesto por el nivel de congestin de la red, es decir,
El valor
se calcula siguiendo las siguientes reglas:
- Modo de arranque (relativamente) lento en el que se duplica
con cada ACK recibido. Este modo se utiliza desde que desaparece la
situacin de congestin hasta que se alcanza la mitad del anterior valor
de
(que en la grfica se llama Threshold).
- Modo de prevencin de la congestin en el que
crece en un MSS por cada ACK recibido. Este modo perdura hasta
que se pierde un segmento[1].
- Cuando se detecta la prdida de un segmento por triple ACK recibido,
entonces
(este hecho no se muestra en la grfica).
- Cuando se detecta la prdida de un segmento porque expira su temporizador,
entonces
(este hecho se muestra en la grfica).

Ejercicio 2: Considere la siguiente grfica que muestra el tamao de una
ventana de congestin del TCP a lo largo del tiempo:
Responda a las siguientes cuestiones (explicando dedidamente el por qu
de su respuesta):
- Identifique los intervalos de tiempo en los que el modo de
arranque lento del TCP est funcionando.
- Identifique los intervalos de tiempo en los que el modo de prevencin
de congestin del TCP est operando.
- Tras la ronda de transmisin
,
¿la prdida del segmento se detecta por un triple ACK o por un
time-out?
Tras el RTT 16 se detecta
un triple ACK. Si hubiera sido un time-out hubisemos
hecho CongestionWindowSize ¡- 1, como ocurre en el
instante de tiempo 23.
- Tras la ronda de transmisin
,
¿la prdida del segmento se detecta por un triple ACK o por un
time-out?
- ¿Cul fue el valor inicial de la variable Threshold en la primera ronda
de transmisin? Se recuerda que esta variable contiene el valor
mitad de la ventana de emisin que produjo la anterior de
congestin.
- ¿Cul es el valor de Threshold en la ronda de transmisin
?
El Threshold se calcula como la mita
de CongestionWindowSize cuando se detecta la prdida
de un paquete. Cuando dicha prdida se detecta en el
instante 16, CongestionWindowSize = 42. Por tanto,
Threshold = 21 en el instante 17.
- ¿Cul es el valor de Threshold en la ronda de transmisin
?
En el instante 24 Threshold ¡- 13 porque se detecta la
prdida de un paquete mediante un time-out.
- ¿Durante qu ronda de transmisin se enva el segmento nmero
70?
Transmission Round Segment #
-----------------------------
1.......................1 (1)
2.....................2-3 (2)
3.....................4-7 (4)
4....................8-15 (8)
5...................16-31 (16)
6...................32-63 (32)
7...................64-97 (33) -> en la ronda 7
- Asumiendo que se detecta una prdida de paquete tras la ronda
por la recepci’n de un triple ACK, ¿cul ser el valor del tamao de la
venta de congestin y el valor de Threshold?
El tamao de la ventana de emisin durante la donda
26 es de 8. El Threshold se calcula como la mitad
de este tamao cuando se produce la congestin. Por
tanto, Threshold ¡- 8/2 = 4. CongestionWindowSize,
por tanto, es igual a 4.
6.1 El tamao de los time-outs
- Cada vez que se enva un segmento, el TCP arranca un temporizador
y espera el correspondiente ACK. Si se termina el tiempo antes de
que se confirme positivamente el segmento (recurdese que no se utilizan
confirmaciones negativas), el TCP asume que dicho segmento se perdi o
corrompi, y lo retransmite.
- El problema radica en que las redes IP poseen latencias muy variables
debido a su tamao, heterogeneidad, variacin de la carga, nivel de congestin,
etc. Por este motivo el TCP utiliza un algoritmo adaptativo para calcular
los time-outs.
6.1.1 El algoritmo original
Estima el RTT como
donde:
-
-
es la estimacin del RTT,
-
-
es la medida del ltimo RTT (medido como la diferencia en tiempo entre
el instante en que se enva el segmento hasta que se recibe su confirmacin)
y
-
-
es un nmero entre
y
de tal forma que si
entonces tiene mayor peso la ltima medida del RTT, y si
entonces
es menos dependiente de .
La especificacin original del TCP recomienda que .
Finalmente, la estimacin para el time-out es
6.1.2 El Algoritmo de Karn/Partridge
El algoritmo original no funciona correctamente cuando ocurre una
retransmisin. En esta situacin, el emisor no puede saber si el ACK recibido se
corresponde con la primera o la segunda transmisin (problema de la
ambigüedad del ACK). Si supone que es con la primera y no ocurre as, el
medido sera demasiado largo. Si supone que es con la segunda y esto no es cierto, el
clculo es demasiado corto. Grficamente:
Ambos errores son perjudiciales para el clculo del
:
- Si el
(y por lo tanto el )
es ms grande de lo que debiera ser, las retransmisiones ocurrirn con un
periodo superior. As, el siguiente
tras una retransmisin tender a crecer, y as sucesivamente. En consecuencia,
un
excesivamente grande provoca a la larga una infrautilizacin de
los enlaces.
- Si el
(y por lo tanto el )
es errneamente pequeo, el emisor retransmitir innecesariamente antes de
recibir el correspondiente ACK. Esto provocar de nuevo que el
sea errneamente pequeo y as sucesivamente hasta llegar a una situacin
de equilibrio donde en promedio cada segmento se retransmite 1 vez. Por
tanto, un
excesivamente pequeo incrementar la congestin de los enlaces.
La solucin:
Ignorar los RTT’s de los segmentos retransmitidos para computar el
time-out.
Estimar el RTT slo para los segmentos que no son retransmitidos acarrea un
nuevo problema. Supongamos que debido a un aumento en la carga de la red o de la
congestin, el RTT aumenta por encima del time-out, lo que provoca una
retransmisin. Como el TCP va a ignorar el RTT de los segmentos retransmitidos,
nunca va a actualizar la estimacin para el RTT mientras las latencias sigan siendo
altas y el ciclo continuar. Por este motivo, adems:
Cada vez que se retransmite se dobla el time-out, hasta alcanzar
MSL
[1].
El motivo de este aumento exponencial del time-out obedece a que normalmente un
aumento en las latencias se debe a problemas de congestin y ante esta situacin lo
mejor es disminuir rpidamente la frecuencia de las retransmisiones.
6.1.3 El Algoritmo de Jacobson/Karels
- El algoritmo bsico no funciona cuando los niveles de congestin son altos,
ya que las latencias son muy variables.
- La mejora propuesta por Jacobson y Karels consiste en tener en cuenta
adems la desviaci’on estad’istica de los RTT’s, no slo su media. Intuitivamente,
si la desviaci’on es baja, entonces el ’ultimo
es una medida fiable. Por otra parte, una desviaci’on alta significa que el
’ultimo
no deber’ia ser considerado con tanto peso a la hora de calcular .
- De esta forma, el clculo actual del time-out en el TCP en la inmensa mayor’ia
de los sistemas operativos es
donde:
-
es un factor que mide lo que
afecta al nuevo clculo del RTT y
-
es otro factor que hace lo mismo con la desviacin estadstica del RTT.
Ejercicio 3: Un host A desea enviar a un host B
bytes de datos y el host B al host A
bytes de datos, utilizando el TCP. Por simplicidad, supngase que las
transmisiones slo se producen al comienzo de unos tics de reloj de
periodo constante y que ningn segmento tarda ms de un tic en llegar
al otro extremo. Supngase adems que el
bytes para ambas estaciones, que el tamao de las ventanas receptoras
queda determinado durante el establecimiento de la conexin (
bytes para A y
bytes para B), que los segmentos enviados entre el cuarto y noveno
tic de reloj son corrompidos por el ruido, y que nunca se retrasan los
ACK’s ms de un tic. Dibujar el time-line asociado suponiendo que el
nmero de secuencia inicial utilizado por A es
y por B es .
Finalmente supngase un TimeOut de
tics.
References
[1] Douglas E. Comer. Internetworking with TCP/IP. Principles, Protocols,
and Architectures (4th Edition), volume 1. Prentice Hall, 2000.
[2] Defense Advanced Research Projects Agency
(DARPA), http://www.rfc-editor.org/rfc/rfc793.txt. RFC 793. The
Transmission Control Protocol (TCP), 1981.
[3] James F. Kurose and Keith W. Ross. Computer Networking: A
Top-Down Approach Featuring the Internet (2nd Edition). Addison Wesley,
2003.
[4] James F. Kurose and Keith W. Ross. Computer
Networking: A Top-Down Approach Featuring the
Internet (3rd Edition). Addison Wesley, 2005.
http://www.cp.eng.chula.ac.th/~fyta/663/Curose-Ross%20-%20Computer_Networking_-_A_Top-down_Approach_Featuring_the_Internet__Third_Edition.pdf.
[5] James F. Kurose and Keith W. Ross. Computer Networking: A
Top-Down Approach Featuring the Interne, 6th Edition. Addison Wesley,
2013.
[6] Network Working
Group, AT&T Research, http://www.rfc-editor.org/rfc/rfc793.txt.
Defending Against Sequence Number Attacks, 1996.
[7] Larry L. Petterson and Bruce S. Davie. Computer Networks: A System
Approach (2nd Edition). Morgan Kaufmann, 2000.
[8] Gary R. Wright and W. Richard Stevens. TCP/IP Illustrated.
Addison-Wesley, 1995.