miércoles, 30 de septiembre de 2009

[Tutorial] TCP Header

[Tutorial] TCP Header

Como decía otro día, intentaré explicar los diferentes métodos de ataques DDOS, pero antes de eso, para poder entenderlo necesitamos conocer cómo funciona TCP/IP.
La cabecera del protocolo IP ya lo había explicado hace unos tiempos atrás, esta vez explicaré la cabecera del protocolo TCP. Y para recordarle que de estamos en el nivel de transporte.

Vale para empezar, [como soy muy candul voy a hacer una COPY&PASTE de Luis Conde García]
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 )


De Linux


Y aquí empieza la parte interesante, XD.[Go! Follow me!]:

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 sitio aparece como reservado)

ECE (ECN-Echo):(en muchos sitio 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_TCPConnectionEstablishmentSequenceNumberSynchroniz.htm
http://www.freesoft.org/CIE/Course/Section4/8.htm
http://www.ncsa.illinois.edu/~vwelch/net_perf/tcp_windows.html

En PDF:
Tcp Header
View more documents from sui90.



Saludos, Good Luck!!

3 comentarios:

Monzi dijo...

Se entendió :-) Muy bueno.

Sui dijo...

T_T, XD. Se agradece tu apoyo ,XD. .
se te surge algo con esos?
hay uno muy llamativo que es el URG, XD. Piensa, piensa, XD.
good luck

luisc dijo...

Muy buen aporte y gracias por mencionarme :-)

Publicar un comentario

 
Powered by Blogger