TCP Header




     Sui Zhao – Sui190(at)gmail.com
TCP Header

TCP es un protocolo de transporte orientado a conexión. Esto hace que los
datos se entreguen sin errores, sin omisión y en secuencia.

Tiene las siguientes características:
· Protocolo orientado a conexión. Es decir, las aplicaciones solicitan la conexión
al destino y luego usan están conexión para entregar los datos, garantizando
que estos serán entregados sin problemas.
· Punto a punto. Una conexión TCP tiene dos extremos, emisor y receptor.
· Confiabilidad. TCP garantiza que los datos transferidos serán entregados sin
ninguna perdida, duplicación o errores de transmisión.
· Full duplex. Los extremos que participan en una conexión TCP pueden
intercambiar datos en ambas direcciones simultáneamente.
· Conexión de inicio confiable. El uso de three-way handshake garantiza una
conexión de inicio confiable y sincronizada entre los dos extremos de la
conexión.
· Conexión de finalización aceptable. TCP garantiza la entrega de todos los
datos antes de la finalización de la conexión.

                                    (Definiciones hecho por: Luis Conde García )
Y por mi parte voy a ofrecerles definiciones y usos de cada campo de la
cabecera del TCP.
Source Port:
Puerto utilizado por emisor para enviar los paquetes.



Destination Port:
Puerto en la que escucha la aplicación del receptor para recibir los paquetes.



Sequence number (numero de secuencia):
Tiene como finalidad de añadir un número (secuenciado) a cada paquete y, al
ser secuenciado el receptor sabrá inmediatamente si falta algún paquete por
medio o no. En caso de que haya perdido X paquete, el receptor pide al emisor
que reenvie los paquetes perdido.

El valor de este campo varía dependiendo del SYN:
SYN flag=1: Tendrá el valor del *^1 initial Sequence Number(ISN, numero de
secuencia incial) + 1 .
SYN flag=0: Tendrá el valor de *^2 Sequence Number(SN,numero de
secuencia) del primer byte del segmento.

*^1 ISN (Initial Sequence Number)
El número de secuencia inicial es generado aleatoriamente.

*^2 SN (Sequence Number)
El número de secuencia es incrementado por cada byte de dato.
En cada fragmento puede tener varios bytes, por eso dice "primer byte del
segmento" [Understand? ;)].



Acknowledgment Number (Número de acuse de recibo):
Indica el Sequence Number del paquete que espera recibir, al mismo tiempo
está indicando que el anterior lo ha recibido correctamente.

El valor de este campo varía dependiendo del ACK:
ACK flag= 1: *^3 Valor del Sequence Number que espera recibir.
ACK flag= 0: No tendrá ningún valor puesto que no está respondiendo.

Ejm:
A: SN=A1, Acknowledgment Number=NULL
/* soy paquete A1, no espero nada*/

B: SN=B1, Acknowledgment Number=A2
/* soy paquete B1, he recibido A1 y estoy esperando A2 */

A: SN=A2, Acknowledgment Number=B2
/* soy paquete A2, he recibido B1 y estoy esperando B2 */
B: SN=B2, Acknowledgment Number=A3
/* soy paquete B2, he recibido A2 y estoy esperando A3 */
(...)



Data Offset o Header Lenght (Logitud de la cabecera):
Es de 4 bit (256 valores): Los valores son representado para indicar el tama?o
de la cabecera en bit.
Valor mínimo= 20 byte (32 bit de cada fila X 5 filas = 160 bit).
Valor máximo= 60 byte ((32 bit de cada fila X 5 filas = 160 bit) + 40 byte de
opciones).



Reserved (reservado):
Campo de 8 bit reservado para futuro uso (No especifica para qué).



TCP Flags (Bit de control):

CWR (Congestion Window Reduced): (En muchos sitios aparece como
reservado).

ECE (ECN-Echo):(En muchos sitios aparece como reservado).

URG (URGent Pointer):
URG=1: Indica que el campo "Urgente" es significativo.
URG=0: Indica que el campo "Urgente" es ignorado.

ACK (ACKnowledgment):
ACK=1: Indica que el campo "Acknowledgment Number" es significativo
ACK=0: Indica que el campo "Acknowledgment Number" es ignorado

PSH (PuSH Function):
PSH=1: Entrega al nivel de aplicación los datos almacenado en el buffer.
PSH=0: Los paquetes llega hasta el buffer del receptor, sin llegar al nivel de
aplicación.

RST (ReSeT the connection):
RST=1: Indica que ha recibido un "error". Ejm: un puerto inválido.
RST=0: Todo correcto.

SYN (SYNchronize sequence numbers):
SYN=1: Tendrá el valor del *^1 initial Sequence Number(ISN, numero de
secuencia incial) + 1.
SYN=0: Tendrá el valor de *^2 Sequence Number(SN,numero de secuencia)
del primer byte del segmento.

FIN (FINal No more data from sender):
FIN=1: Indica que es el último fragmento, indica al receptor cierre del
conexión.
FIN=0: Indica que no es el último fragmento.



Window size (Ventana):
En este campo de 16 bit, guarda el tamaño (hasta 65536 byte) que el receptor
espera recibir. El emisor no podrá enviar más datos cuando haya llegado a su
máximo, y tendrá que esperar el ACK del receptor(indicando que todos los
datos haya llegado, y que siga enviando).

Ejm:
Receptor: SN=R1 ACK=E1 Window size=15 Byte
Emisor: SN=E1 ACK=NULL #fragmento de 5 byte#
Emisor: SN=E2 ACK=NULL #fragmento de 5 byte#
Emisor: SN=E3 ACK=R2 #fragmento de 5 byte#
Receptor: SN=R2 ACK=E4 Window size=15 Byte



Checksum (Suma de verificación):
Mediante una serie de algoritmos, asegura que la cabecera y los datos no
llegen corruptos, a diferencia de IP que éste sólo comprueba la cabecera y no
los datos.



Urgent (Urgente):
Indica que desde el pricipio hasta el numero de byte del dato del fragmento
será de alto prioridad.
Un fragmento puede estar formado por parte urgente y parte normal, sólo que
al llegar al receptor éste procesará en primer lugar la parte de alta prioridad, y
los otros restante se quedará en la cola del buffer hasta que llegue otro PSH
URG flag=1: Este campo es significativo.
URG flag=0: Este campo será ignorado.



Referencias:
http://en.wikipedia.org/wiki/Transmission_Control_Protocol
http://mike.passwall.com/networking/tcppacket.html
http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentSequenceNum
berSynchroniz.htm
http://www.freesoft.org/CIE/Course/Section4/8.htm
http://www.ncsa.illinois.edu/~vwelch/net_perf/tcp_windows.html

Tcp Header

  • 1.
    TCP Header Sui Zhao – Sui190(at)gmail.com
  • 2.
    TCP Header TCP esun protocolo de transporte orientado a conexión. Esto hace que los datos se entreguen sin errores, sin omisión y en secuencia. Tiene las siguientes características: · Protocolo orientado a conexión. Es decir, las aplicaciones solicitan la conexión al destino y luego usan están conexión para entregar los datos, garantizando que estos serán entregados sin problemas. · Punto a punto. Una conexión TCP tiene dos extremos, emisor y receptor. · Confiabilidad. TCP garantiza que los datos transferidos serán entregados sin ninguna perdida, duplicación o errores de transmisión. · Full duplex. Los extremos que participan en una conexión TCP pueden intercambiar datos en ambas direcciones simultáneamente. · Conexión de inicio confiable. El uso de three-way handshake garantiza una conexión de inicio confiable y sincronizada entre los dos extremos de la conexión. · Conexión de finalización aceptable. TCP garantiza la entrega de todos los datos antes de la finalización de la conexión. (Definiciones hecho por: Luis Conde García ) Y por mi parte voy a ofrecerles definiciones y usos de cada campo de la cabecera del TCP.
  • 3.
    Source Port: Puerto utilizadopor emisor para enviar los paquetes. Destination Port: Puerto en la que escucha la aplicación del receptor para recibir los paquetes. Sequence number (numero de secuencia): Tiene como finalidad de añadir un número (secuenciado) a cada paquete y, al ser secuenciado el receptor sabrá inmediatamente si falta algún paquete por medio o no. En caso de que haya perdido X paquete, el receptor pide al emisor que reenvie los paquetes perdido. El valor de este campo varía dependiendo del SYN: SYN flag=1: Tendrá el valor del *^1 initial Sequence Number(ISN, numero de secuencia incial) + 1 . SYN flag=0: Tendrá el valor de *^2 Sequence Number(SN,numero de secuencia) del primer byte del segmento. *^1 ISN (Initial Sequence Number) El número de secuencia inicial es generado aleatoriamente. *^2 SN (Sequence Number) El número de secuencia es incrementado por cada byte de dato. En cada fragmento puede tener varios bytes, por eso dice "primer byte del segmento" [Understand? ;)]. Acknowledgment Number (Número de acuse de recibo): Indica el Sequence Number del paquete que espera recibir, al mismo tiempo está indicando que el anterior lo ha recibido correctamente. El valor de este campo varía dependiendo del ACK: ACK flag= 1: *^3 Valor del Sequence Number que espera recibir. ACK flag= 0: No tendrá ningún valor puesto que no está respondiendo. Ejm: A: SN=A1, Acknowledgment Number=NULL /* soy paquete A1, no espero nada*/ B: SN=B1, Acknowledgment Number=A2 /* soy paquete B1, he recibido A1 y estoy esperando A2 */ A: SN=A2, Acknowledgment Number=B2 /* soy paquete A2, he recibido B1 y estoy esperando B2 */
  • 4.
    B: SN=B2, AcknowledgmentNumber=A3 /* soy paquete B2, he recibido A2 y estoy esperando A3 */ (...) Data Offset o Header Lenght (Logitud de la cabecera): Es de 4 bit (256 valores): Los valores son representado para indicar el tama?o de la cabecera en bit. Valor mínimo= 20 byte (32 bit de cada fila X 5 filas = 160 bit). Valor máximo= 60 byte ((32 bit de cada fila X 5 filas = 160 bit) + 40 byte de opciones). Reserved (reservado): Campo de 8 bit reservado para futuro uso (No especifica para qué). TCP Flags (Bit de control): CWR (Congestion Window Reduced): (En muchos sitios aparece como reservado). ECE (ECN-Echo):(En muchos sitios aparece como reservado). URG (URGent Pointer): URG=1: Indica que el campo "Urgente" es significativo. URG=0: Indica que el campo "Urgente" es ignorado. ACK (ACKnowledgment): ACK=1: Indica que el campo "Acknowledgment Number" es significativo ACK=0: Indica que el campo "Acknowledgment Number" es ignorado PSH (PuSH Function): PSH=1: Entrega al nivel de aplicación los datos almacenado en el buffer. PSH=0: Los paquetes llega hasta el buffer del receptor, sin llegar al nivel de aplicación. RST (ReSeT the connection): RST=1: Indica que ha recibido un "error". Ejm: un puerto inválido. RST=0: Todo correcto. SYN (SYNchronize sequence numbers): SYN=1: Tendrá el valor del *^1 initial Sequence Number(ISN, numero de secuencia incial) + 1. SYN=0: Tendrá el valor de *^2 Sequence Number(SN,numero de secuencia)
  • 5.
    del primer bytedel segmento. FIN (FINal No more data from sender): FIN=1: Indica que es el último fragmento, indica al receptor cierre del conexión. FIN=0: Indica que no es el último fragmento. Window size (Ventana): En este campo de 16 bit, guarda el tamaño (hasta 65536 byte) que el receptor espera recibir. El emisor no podrá enviar más datos cuando haya llegado a su máximo, y tendrá que esperar el ACK del receptor(indicando que todos los datos haya llegado, y que siga enviando). Ejm: Receptor: SN=R1 ACK=E1 Window size=15 Byte Emisor: SN=E1 ACK=NULL #fragmento de 5 byte# Emisor: SN=E2 ACK=NULL #fragmento de 5 byte# Emisor: SN=E3 ACK=R2 #fragmento de 5 byte# Receptor: SN=R2 ACK=E4 Window size=15 Byte Checksum (Suma de verificación): Mediante una serie de algoritmos, asegura que la cabecera y los datos no llegen corruptos, a diferencia de IP que éste sólo comprueba la cabecera y no los datos. Urgent (Urgente): Indica que desde el pricipio hasta el numero de byte del dato del fragmento será de alto prioridad. Un fragmento puede estar formado por parte urgente y parte normal, sólo que al llegar al receptor éste procesará en primer lugar la parte de alta prioridad, y los otros restante se quedará en la cola del buffer hasta que llegue otro PSH URG flag=1: Este campo es significativo. URG flag=0: Este campo será ignorado. Referencias: http://en.wikipedia.org/wiki/Transmission_Control_Protocol http://mike.passwall.com/networking/tcppacket.html http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentSequenceNum berSynchroniz.htm http://www.freesoft.org/CIE/Course/Section4/8.htm http://www.ncsa.illinois.edu/~vwelch/net_perf/tcp_windows.html