Manejo de Protocolo TCP Con Wireshark
Manejo de Protocolo TCP Con Wireshark
Manejo de Protocolo TCP Con Wireshark
org/wiki/manejo-de-protocolo-tcp-con-wireshark
Fiabilidad
TCP asigna un número de secuencia a cada byte transmitido, y espera un reconocimiento afirmativo (ACK) del TCP receptor. Si el ACK no se recibe dentro de
un intervalo de timeout, los datos se retransmiten. Como los datos se transmiten en bloques (segmentos de TCP), al host de destino sólo se le envía el
número de secuencia del byte de cada segmento.
El TCP receptor utiliza los números de secuencia para organizar los segmentos cuando llegan fuera de orden, así como para eliminar segmentos duplicados.
Control de flujo
El TCP receptor, al enviar un ACK al emisor, indica también el número de bytes que puede recibir aún, sin que se produzca sobrecarga y desbordamiento de
sus buffers internos. Este valor se envía en el ACK en la forma del número de secuencia más elevado que se puede recibir sin problemas. Este mecanismo se
conoce también como mecanismo de ventanas y se estudiará posteriormente en este capítulo.
Multiplexación
Se consigue usando puertos, al igual que en UDP.
Conexiones lógicas
La fiabilidad y el control de flujo descritos más arriba requieren que TCP inicialice y mantenga cierta información de estado para cada canal. La combinación
de este estado, incluyendo zócalos, números de secuencia y tamaños de ventanas, se denomina conexión lógica. Cada conexión se identifica unívocamente
por el par de zócalos del emisor y el receptor.
Full Duplex
TCP garantiza la concurrencia de los flujos de datos en ambos sentidos en la conexión.
Puerto de origen (16 bits): Puerto relacionado con la aplicación en curso en la máquina origen
Puerto de destino (16 bits): Puerto relacionado con la aplicación en curso en la máquina destino
Número de secuencia (32 bits): Cuando el indicador SYN está fijado en 0, el número de secuencia es el de la primera palabra del segmento actual. Cuando
SYN está fijado en 1, el número de secuencia es igual al número de secuencia inicial utilizado para sincronizar los números de secuencia (ISN).
Número de acuse de recibo (32 bits): (PIGGY BACK) El número de acuse de recibo, también llamado número de descargo se relaciona con el número
(secuencia) del último segmento esperado y no el número del último segmento recibido.
Margen de datos (4 bits): (LOG C) Esto permite ubicar el inicio de los datos en el paquete. Aquí, el margen es fundamental porque el campo opción es de
tamaño variable.
Reservado (6 bits): Un campo que actualmente no está en uso pero se proporciona para el uso futuro.
1 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
Funciones de TCP
En la pila de protocolos TCP/IP, TCP es la capa intermedia entre el protocolo de Internet (IP) y la aplicación. Habitualmente, las aplicaciones necesitan que la
comunicación sea fiable y, dado que la capa IP aporta un servicio de datagramas no fiable, TCP añade las funciones necesarias para prestar un servicio que
permita que la comunicación entre dos sistemas se efectúe: libre de errores, sin pérdidas y con seguridad.
Con el uso del protocolo TCP, las aplicaciones pueden comunicarse en forma segura (gracias al sistema de acuse de recibo del protocolo TCP)
independientemente de las capas inferiores. Esto significa que los routers (que funcionan en la capa de Internet) sólo tienen que enviar los datos en forma de
datagramas, sin preocuparse con el monitoreo de datos porque esta función la cumple la capa de transporte (o más específicamente el protocolo TCP).
Durante una comunicación usando el protocolo TCP, las dos máquinas deben establecer una conexión. La máquina emisora (la que solicita la conexión) se
llama cliente, y la máquina receptora se llama servidor. Por eso es que decimos que estamos en un entorno Cliente-Servidor.
Las máquinas de dicho entorno se comunican en modo en línea, es decir, que la comunicación se realiza en ambas direcciones.
Para posibilitar la comunicación y que funcionen bien todos los controles que la acompañan, los datos se agrupan; es decir, que se agrega un encabezado a
los paquetes de datos que permitirán sincronizar las transmisiones y garantizar su recepción.
Otra función del TCP es la capacidad de controlar la velocidad de los datos usando su capacidad para emitir mensajes de tamaño variable. Estos mensajes se
llaman segmentos.
CONFIABILIDAD TCP
El protocolo TCP permite garantizar la transferencia de datos confiable, a pesar de que usa el protocolo IP, que no incluye ningún monitoreo de la entrega de
datagramas.
De hecho, el protocolo TCP tiene un sistema de acuse de recibo que permite al cliente y al servidor garantizar la recepción mutua de datos.
Cuando se emite un segmento, se lo vincula a un número de secuencia. Con la recepción de un segmento de datos, la máquina receptora devolverá un
segmento de datos donde el indicador ACK esté fijado en 1 (para poder indicar que es un acuse de recibo) acompañado por un número de acuse de recibo
que equivale al número de secuencia anterior.
Además, usando un temporizador que comienza con la recepción del segmento en el nivel de la máquina originadora, el segmento se reenvía cuando ha
transcurrido el tiempo permitido, ya que en este caso la máquina originadora considera que el segmento está perdido.
Sin embargo, si el segmento no está perdido y llega a destino, la máquina receptora lo sabrá, gracias al número de secuencia, que es un duplicado, y sólo
retendrá el último segmento que llegó a destino.
CONEXIÓN TCP
Considerando que este proceso de comunicación, que se produce con la transmisión y el acuse de recibo de datos, se basa en un número de secuencia, las
máquinas originadora y receptora (cliente y servidor) deben conocer el número de secuencia inicial de la otra máquina.
La conexión establecida entre las dos aplicaciones a menudo se realiza siguiendo el siguiente esquema:
• Los puertos TCP deben estar abiertos.
• La aplicación en el servidor es pasiva, es decir, que la aplicación escucha y espera una conexión.
• La aplicación del cliente realiza un pedido de conexión al servidor en el lugar donde la aplicación es abierta pasiva. La aplicación del cliente se considera
"abierta activa".
Las dos máquinas deben sincronizar sus secuencias usando un mecanismo comúnmente llamado negociación en tres pasos que también se encuentra durante
el cierre de la sesión.
Este diálogo posibilita el inicio de la comunicación porque se realiza en tres etapas, como su nombre lo indica:
• En la primera etapa, la máquina originadora (el cliente) transmite un segmento donde el indicador SYN está fijado en 1 (para indicar que es un segmento de
sincronización), con número de secuencia N llamado número de secuencia inicial del cliente.
• En la segunda etapa, la máquina receptora (el servidor) recibe el segmento inicial que viene del cliente y luego le envía un acuse de recibo, que es un
segmento en el que el indicador ACK está fijado en 1 y el indicador SYN está fijado en 1 (porque es nuevamente una sincronización). Este segmento incluye el
número de secuencia de esta máquina (el servidor), que es el número de secuencia inicial para el cliente. El campo más importante en este segmento es el de
acuse de recibo que contiene el número de secuencia inicial del cliente incrementado en 1.
2 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
acuse de recibo que contiene el número de secuencia inicial del cliente incrementado en 1.
• Por último, el cliente transmite un acuse de recibo, que es un segmento en el que el indicador ACK está fijado en 1 y el indicador SYN está fijado en 0 (ya no
es un segmento de sincronización). Su número de secuencia está incrementado y el acuse de recibo representa el número de secuencia inicial del servidor
incrementado en 1.
Después de esta secuencia con tres intercambios, las dos máquinas están sincronizadas y la comunicación puede comenzar.
Existe una técnica de piratería llamada falsificación de IP, que permite corromper este enlace de aprobación con fines maliciosos.
• una sincronización). Este segmento incluye el número de secuencia de esta máquina (el servidor), que es el número de secuencia inicial para el cliente. El
campo más importante en este segmento es el de acuse de recibo que contiene el número de secuencia inicial del cliente incrementado en 1.
• Por último, el cliente transmite un acuse de recibo, que es un segmento en el que el indicador ACK está fijado en 1 y el indicador SYN está fijado en 0 (ya no
es un segmento de sincronización). Su número de secuencia está incrementado y el acuse de recibo representa el número de secuencia inicial del servidor
incrementado en 1.
TERMINAR CONEXIÓN
El cliente puede pedir que se termine una conexión del mismo modo que el servidor.
Para terminar una conexión se procede de la siguiente manera:
Una de las máquinas envía un segmento con el indicador FIN fijado en 1, y la aplicación se auto coloca en estado de espera, es decir que deja de recibir el
segmento actual e ignora los siguientes.
Después de recibir este segmento, la otra máquina envía un acuse de recibo con el indicador FIN fijado en 1 y sigue enviando los segmentos en curso.
Después de esto, la máquina informa a la aplicación que se ha recibido un segmento FIN y luego envía un segmento FIN a la otra máquina, que cierra la
conexión.
ETHEREAL (WireShark)
Es una herramienta gráfica utilizada por los profesionales y/o administradores de la red para identificar y analizar el tipo tráfico en un momento determinado, a
estos se los denominan analizadores de protocolos de red, analizadores de paquetes y packet sniffer o sniffer. Ethereal y permite analizar los paquetes de
datos en una red activa como también desde un archivo de lectura previamente generado, un caso particular es generar un archivo con TCPDUMP y luego
analizarlo con Ethereal.
Ethereal ahora es conocido como WireShark y hoy en día está categorizado como uno de los TOP 10 como sniffer junto a Nessus y Snort ocupando el
segundo lugar entre estos por lo tanto este documento trataremos o aremos referencia la sniffer WIRESHARK y no ETHEREAL.
INTERFAZ DE USUARIO
Existen dos maneras de iniciar la aplicación una es desde la línea de comando (shell) y otra desde el entorno gráfico. Cuando se inicia desde la línea de
comando se tiene la posibilidad de especificar opciones adicionales que depende de las funciones que se quieran aprovechar.
Desde comandos:
cortes:~# wireshark
El Menú principal es utilizado para iniciar las acciones y/o funciones de la aplicación
File: similar a otras aplicaciones GUI este contiene los ítems para manipular archivos y para cerrar la aplicación Wireshark.
Edit: este menú contiene ítems aplicar funciones a los paquetes, por ejemplo, buscar unos paquetes específicos, aplicar una marca al paquete y configurar la
interfaz de usuario.
View: permite configurar el despliegue de la data capturada.
Go: contiene ítems que permiten el desplazamiento entre los paquetes.
Capture: para iniciar y detener la captura de paquetes.
Analyze: contiene ítems que permite manipular los filtros, habilitar o deshabilitar protocolos, flujos de paquetes, etc.
Statistics: contiene ítems que permiten definir u obtener las estadísticas de la data capturada.
Help: menú de ayuda.
Barra de herramientas principal, permite el acceso rápido a las funciones más utilizadas.
3 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
Barra de herramientas para filtros, aquí se especifica el filtro que se desea aplicar a los paquetes que están siendo capturados.
Panel de paquetes capturados, en este panel se despliega la lista de paquetes capturados. Al hacer clic sobre algunos de estos se despliega cierta
información en los otros paneles.
Panel para detalles del paquete, aquí se despliega información detallada del paquete seleccionado en el panel de paquetes.
Panel de paquetes capturados en bytes, despliega en bytes la información contenida en el campo seleccionado desde el panel de detalles del paquete
seleccionado en el panel de paquetes.
La barra de estado, muestra información acerca del estado actual del programa y de la data capturada.
La interfaz de usuario puede ser cambiada desde el menú principal en la opción de Preferences en el menú Edit, según sea las necesidades.
PANEL DE PAQUETES CAPTURADOS
Cada línea corresponde a un paquete capturado al seleccionar una de estas, ciertos detalles son desplegados en el resto de los paneles (Detalles y bytes). Y
las columnas muestran datos del paquete capturado, Wireshark dispone de una gran cantidad de detalles que pueden agregarse en estas columnas desde el
menú Edit->Preferences, por defecto se tienen:
2. Otra opción es seleccionar con el Mouse el icono (Show the capture options) Mostrar opciones de la captura, en la barra de herramientas, se despliega la
siguiente ventana donde se muestra opciones de configuración para la interfaz.
4 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
3. Si es el caso donde se ha predefinido las opciones de la interfaz, haciendo clic en (Start a new live capture) Iniciar una nueva captura, se inicia la captura de
paquetes inmediatamente e inmediatamente procede a capturar nuevos paquetes.
4. Otra manera de iniciar la captura de paquetes es desde la línea de comandos ejecutando lo siguiente:
Wireshark –i eth0 -k
Donde eth0 corresponde a la interfaz por la cual se desea iniciar la captura de paquetes.
Ejemplo:
cortes:~# wireshark -i eth0 -k
FILTRADO DE PAQUETES
Wireshark ofrece numerosas posibilidades de filtrado de información, que básicamente consisten en la selección de protocolos, la definición de un filtro de
captura y la definición de un filtro de presentación de la información. La utilización de cada una de estas opciones se detalla en los siguientes apartados.
Wireshark contempla dos tipos de Filtros. Filtros de captura y Filtros de visualización. Para los filtros de captura podemos hacer uso de los filtros TCPDump /
Windump, ya que usa la misma librería pcap.
Los filtros de captura (Capture Filter) son los que se establecen para mostrar solo los paquetes de cumplan los requisitos indicados en el filtro.
Los filtros de visualización (Display Filer) establecen un criterio de filtro sobre los paquetes capturados y que estamos visualizando en la pantalla principal de
Wireshark. Estos filtros son más flexibles y potentes.
Filtros de Captura (Capture Filter)Estos filtros están basados en las librerías pcap. Los filtros de captura son los que se establecen para mostrar solo
los paquetes de cumplan los requisitos indicados en el filtro. Si no establecemos ninguno, Wireshark capturará todo el tráfico y lo presentará en la
pantalla principal. Aún así podremos establecer
Filtros de visualización (display filter) para que nos muestre solo el tráfico deseado
.
Se aplican en Capture > Options:
5 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
Igual a: eq ó ==
No igual: ne ó !=
Mayor que:gt ó >
Menor que: lt ó <
Mayor o igual: ge ó >=
Menor o igual: le ó <=
Combinando Filtros.
Negación: ! ó not
Unión o Concatenación: && ó and
Alternancia:|| ó or
Otro operadores.
6 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
Si queremos aplicar otro filtro pulsamos el botón Clear, introducimos el filtro y pulsamos Apply
Protocolos y WireShark
Como primer nivel de filtrado, podemos escoger los protocolos con los que deseamos trabajar. La lista completa de protocolos que maneja Wireshark puede
verse en un cuadro de diálogo al que podremos acceder mediante la opción de menú Analyze->Enabled Protocols.... En dicho cuadro de diálogo, que se
presenta a continuación, podemos activar o desactivar la utilización de los protocolos que deseemos.
A la hora de activar o desactivar protocolos, debemos tener en cuenta la advertencia que aparece en este cuadro de diálogo, y que indica que, si
desactivamos un protocolo, no aparecerán los protocolos de los niveles superiores que dependan de él. Por ejemplo, si desactivamos el protocolo de nivel de
transporte TCP, no aparecerán tampoco todos los protocolos de nivel de aplicación que dependan de él, como HTTP, SMTP, FTP y muchos otros.
Captura
El siguiente nivel de filtrado que ofrece Wireshark se aplica al proceso de captura de los paquetes de red. Podemos definir un filtro que capture únicamente los
paquetes de un determinado protocolo o destinados a un determinado ordenador o puerto. La utilización de un filtro se realiza en el cuadro de diálogo de
opciones de captura, introduciendo la expresión del filtro en el cuadro de texto situado al lado del botón Capture Filter.
Ejemplo
tcp port 23 and host 192.168.2.11
o por ejemplo tcp reiniciamos
7 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
Frame En este campo se muestra información completa de la trama capturada. Tamaño total, etc toda la informacion mostrada en la zona C.
Ethernet II En este muestra la cabecera Ethernet II que a su vez pertenece a la capa de enlace de datos:
8 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
La descarga de un programa, imagen, archivo a través de Internet utiliza el protocolo TCP/IP para realizar toda la transacción. Básicamente, el cliente solicita
a un servidor HTTP un archivo determinado y el servidor responde enviando dicho archivo. La descarga completa se establecerá mediante la suma de varios
paquetes de datos denominados segmentos. Con cada segmento a descargar el servidor y el cliente establecerán una comunicación donde se informará de la
transmisión y se procederá a la descarga correspondiente, hasta que el programa se haya completado del todo. El inicio de toda comunicación TCP comienza
con la negociación en tres pasos (TCP Three Way Handshake).
Análisis gráfico
Para comenzar con el análisis de nuestra captura, deberemos echar un vistazo al gráfico de entrada/salida. El acceso a dicho gráfico se consigue a través del
menú Statistics/IO Graphs. Como podemos observar, las opciones de representación de los datos son muy variadas, ya que se nos permite el filtrado de los
mismos de diferentes maneras. Para empezar, es una buena idea que los datos queden representados por Bytes/Tick en el Eje Y, pues nos interesa analizar
el estado de una descarga de datos.
En una descarga de datos normal, los picos deberían mantenerse más o menos unifores a lo largo del tiempo en un canal formado por dos líneas paralelas.
9 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
En una descarga de datos normal, los picos deberían mantenerse más o menos unifores a lo largo del tiempo en un canal formado por dos líneas paralelas.
Dependiendo de la velocidad del servidor, el tráfico de datos (representado en el Eje Y) variará, tendiendo a cero en conexiones más lentas, mientras que el
tiempo de descarga (representado en el Eje X) aumentará o disminuirá dependiendo del tamaño de la descarga y de la propia velocidad de transferencia. Si la
descarga de datos no es uniforme durante todo el proceso, estaremos ante un problema de transferencia que se podrá analizar con la lectura detallada de los
paquetes capturados.
Ahora se centrara la atencion en la pantalla principal. Dicha pantalla nos ofrece todos los paquetes capturados con información de cada uno de ellos. Por
ejemplo, lo primero que veremos en nuestro trazo de captura será una petición al servidor DNS que resolverá la dirección del servidor desde donde
realizaremos la descarga. Seguidamente podremos observar el trazo de la negociación TCP tal y como se muestra en la imagen siguiente:
Lo que sigue a continuación son las transferencias de segmentos y, posiblemente, otras capturas que nada tienen que ver con la descarga de nuestro archivo.
Como el volumen de datos presentado puede llegar a ser interminable, Wireshark pone a nuestra disposición una herramienta llamada Expert Info, a la cual
accedemos mediante el menú Analyze/Expert Info.
Mediante esta herramienta podemos tener una visión más clara de todo el proceso de trazado y de los posibles problemas que pueden haber surgido durante
la transferencia. El cuadro desplegable de la parte superior derecha nos permite filtrar la salida de información (por defecto, se presentarán los errores, los
avisos, las notificaciones y las negociaciones de protocolo), la cual es presentada en pantalla resaltada por diferentes colores. En principio y para valorar
posibles problemas, sólo sería necesario filtrar por errores, avisos y notificaciones.
La captura nos presenta una notificación de ACK duplicado por la consecuente pérdida de segmento. Cada vez que se produce la pérdida de un paquete de
segmento durante una transacción, el cliente enviará al servidor un requerimiento para volver a recibir dicho segmento y lo seguirá enviando tantas veces como
sea necesario hasta recibir el segmento requerido. Si la conexión no es demasiado buena, el número de requerimientos irá aumentando a medida que avance
la transacción, con la consecuente pérdida de velocidad. Cuando esto llega a producirse, podemos observar salidas de información de este tipo:
10 de 11 22/04/2010 13:56
Manejo de protocolo tcp con wireshark http://www.esdebian.org/wiki/manejo-de-protocolo-tcp-con-wireshark
Cuando la descarga allá finalizado con éxito damos STOP en wireshark con lo cual finalizamos la captura.
Luego hacemos clic en el menú STATISTICS y en IO GRAPHS.
En el cual debemos encontrar un gráfico como el siguiente.
En este podemos observar que fue una descarga aproximada de 25 segundos en la cual los picos se mantuvieron estables. por lo que fue una descarga
exitosa.
11 de 11 22/04/2010 13:56