Las direcciones IP permiten el enrutamiento de los paquetes entre

Anuncio
TCP
Las direcciones IP permiten el enrutamiento de los paquetes entre las redes. Sin embargo, IP no garantiza la entrega. La capa de transporte
es responsable del transporte confiable y de la regulación del flujo de datos desde el origen hacia el destino. Esto se logra utilizando ventanas
deslizantes y números de secuencia junto con un proceso de sincronización que garantiza que cada host se encuentra listo y desea
comunicarse. La capa de transporte, la Capa 4 del modelo OSI, provee estos servicios a la capa 5 por medio de TCP.
Sincronización:
TCP es un protocolo orientado a conexión. Antes de transmitir datos, los dos clientes que desean comunicarse deben llevar a cabo unproceso
de sincronización para establecer una conexión virtual para cada sesión entre ellos. Este proceso de sincronización asegura que ambas
partesestán listas para la transmisión y permite que los dispositivos determinen los númeors de la secuencia inicial de dicha sesión. Este
proceso se llama saludo de tres vías, es un proceso de tres pasospara establecer una conexión virtual entre dos dispositivos. Es muy
importante sbaer que este proceso lo inicia un cliente. Para establecer la sesión TCP, el cliente usa un puerto conocido del servicio que desea
contactar.
En el paso uno, el cliente inicia la sincronización enviando un paquete SYN para iniciar la conexión. Esto incdica que el paquete tiene un
Número secuancial Válido. El bit de SYN se encuentra en el campo de códigodel encabezado del segmento.
En el paso dos, el otro host recive el paquete, graba el Número Secuancial x del cliente, y responde con un Acuse de Recibo (ACK). El bit de
control del ACK indica que el campo de Acuse de Recibo contiene un número válido. el ACK es un bit en el campop de código del encabezado
del segmento TCP, y el número ACK es un campo de 32 bits en el mismo encabezado. Una vez hecha la conexión, la bandera de ACK se fija
para todos los segmentos durante la sesión. El campo de Número de ACK contiene el siguiente Número Secuencial que se espera recibir (x +
1). El número ACK x + 1 significa que el host ya recibió todos los bytes incluyendo x, y espera recibir el byte x + 1. El host también inicia un
regreso de sesión, esto incluye un segmento TCP con su propio Número Secuencial y bandera de sincronización.
En el paso tres, el host que inició la conversación responde con un Númeor de ACK de y + 1, el cual es el Número Secuencial del valor del Host
B + 1. Esto indica que recibió el ACK anterior y finaliza el proceso de conexión para esta sesión.
Es importante entender que los números secuenciales inciales se usan sólo para comenzar la comunicaión entre dos dispositivos. Actúan como
referencia entre los dos dispositivos. Dichos números le dan a cada host la posibilidad de mandar acuses de recibo.
Ataques de denegación de servicio
Estos ataques están diseñados para denegar servicios a host legítimos que tratan de establecer conexiones. Los ataques DoS son muy comunes
entre hackers para anular las respuestas delos sistemas. Un tipo de DoS es el inundamiento de SYN o SYN flooding. SYN flooding explota el
saludo de tres vías y causa que los dispositivos manden un ACK a direcciones origen que no completarán el saludo.
El saludo de tres vías empieza al mandar un paquete SYN, el cual incluye las IP origen y destino. Ambas direcciones se utilizan para mandar
ACK.
En un ataque DoS, el hacker inicia un SYN pero falsifica la IP, es decir hace un Spoofing. Spoofing es un término usado cuando el cliente
destino responde a una dirección origen que no existe, o no se puede alcanzar y entonces se va a estado de espera hasta que recibe un ACk
del origen. La solicitud de espera se coloca en una cola en la conexión o en un área de memoria de espera. Este estado de espera requiere el
uso de recursos del sistema que se está atacando, tal como memoria, hasta que el temporizador de la conexión expira. Los hackers inundaran
el host con falsos SYN para usar sus recursos en la conexión y no dejarlo contestar para poder legitimizar los requisitos de la conexión.
Para defenderse de estos ataques, los administradores del sistema pueden reducir el período de espera de desconexión y aumentar el tamaño
de la cola de conexión. También existe software que puede detectar estos tipos de ataques e iniciar medidas de defensa.
Uso de ventanas y tamaño de las ventanas
Puede que la cantidad de datos que se necesita transmitir es demasiado grande como para ser enviada en un solo segmento de datos. En este
caso, los datos deben dividirse en porciones de menor tamaño para permitir su correcta transmisión. TCP tiene la responsabilidad de dividir
los datos en segmentos. Además, es posible que las máquinas receptoras no sean capaces de recibir datos con la rapidez que el origen los
envía, tal vez, porque el dispositivo receptor está ocupado con otras tareas o porque el transmisor simplemente es un dispositivo más
robusto.
Una vez segmentados los datos, deben transmitirse hacia el dispositivo destino. Uno de los servicios que provee TCP es el control de flujo que
regula la cantidad de datos enviada durante un período de transmisión dado. Este proceso de control de flujo se conoce como uso de
ventanas.
El tamaño de la ventana determina la cantidad de datos que se pueden transmitir simultáneamente antes que el destino responda con un
Acuse de recibo (ACK). Después que un host transmita el tamañode ventana en bytes, el host debe recibir un ACK indicando que la
información se recibió antes de poder enviar más información. Por ejemplo, si la ventana es de 1, se debe generar un ACK por cada byte
antes de enviar el siguiente .
TCP usa las ventanas para determinar de forma dinámica el tamaño de la transmisión. Los dispositivos negocian el tamaño de la ventana a un
número específico de bytes para transmitir antes del ACK .
Este proceso de variación dinámica del tamaño de la ventana incrementa la confiabilidad. El tamaño de la ventana se puede basar en los ACKs
Números de secuencia
TCP divide los datos en segmentos. Los segmentos de datos viajan desde el transmisor hacia el receptor después del proceso de sincronización
y la negociación del tamaño de ventana que dicta el número de bytes que es posible transmitir por vez. Los segmentos de datos que se
transmiten deben reensamblarse una vez recibidos. No hay garantía alguna de que los datos llegarán en el orden en que se transmitieron. TCP
aplica los números de secuencia a los segmentos de datos que transmite de modo que el receptor pueda reensamblar adecuadamente los
bytes en su orden original. Si los segmentos TCP llegan desordenados, los segmentos se pueden reensamblar de forma incorrecta. Los números
de secuencia le indican al dispositivo destino cómo ordenar correctamente los bytes a medida que arriban.
Estos números de secuencia también actúan como números de referencia de modo que el receptor sabe si ha recibido todos los datos.
También identifican las porciones de datos perdidos y así el transmisor puede retransmitir los datos faltantes. Esto ofrece una mayor
eficiencia ya que el transmisor sólo necesita retransmitir los segmentos faltantes en lugar de todo el grupo de datos.
Cada segmento TCP se numera antes de su transmisión. Tenga en cuenta que después del puerto destino en el formato del segmento se
encuentra la porción del número de secuencia. En la estación receptora, TCP usa los números de secuencia para reensamblar los segmentos
hasta formar un mensaje completo. Si falta algún número de secuencia en la serie, ese segmento se vuelve a transmitir.
El formato de los campos en un segmento
TCP
Acuse de Recibo
El acuse de recibo es un paso frecuente del proceso de sincronización que incluye ventanas deslizantes y secuenciación de datos. En un
segmento TCP, el campo número de secuencia está seguido por el campo número de acuse de recibo, también conocido como el campo
código.
Uno de los problemas con el protocolo IP no confiable es que no cuenta con un método de verificación para determinar que los segmentos de
datos realmente llegan a destino. Por lo tanto, los segmentos de datos pueden enviarse de forma constante sin saber si realmente se
recibieron o no. TCP utiliza acuse de recibo positivo y retransmisión para controlar el flujo de datos y confirmar la entrega de los datos.
El acuse de recibo positivo y retransmisión (PAR) es una técnica frecuente que muchos protocolos utilizan para proporcionar confiabilidad.
Con PAR, el origen envía un paquete, inicia un temporizador y espera un acuse de recibo antes de enviar el siguiente paquete. Si el
temporizador expira antes de que el origen reciba un acuse de recibo, el origen retransmite el paquete y reinicia el temporizador. TCP utiliza
acuses de recibo de expectativa, lo que significa que el número de acuse de recibo se refiere al siguiente octeto esperado.
El uso de ventanas es un mecanismo de control de flujo que requiere que el dispositivo origen reciba un acuse de recibo desde el destino
después de transmitir una cantidad determinada de datos. Con un tamaño de ventana de tres, el dispositivo origen puede enviar tres octetos
al destino. Entonces debe esperar un acuse de recibo. Si el destino recibe los tres octetos, envía un acuse de recibo al dispositivo origen, que
ahora puede transmitir otros tres octetos. Si, por algún motivo, el destino no recibe los tres octetos, posiblemente debido a búferes cuya
capacidad se ha excedido, no envía un acuse de recibo. Debido a que el origen no recibe un acuse de recibo, sabe que los octetos se deben
retransmitir, y que la velocidad de transmisión debe reducirse.
UDP
La pila del protocolo TCP/IP contiene muchos protocolos diferentes, cada uno diseñado para realizar una tarea determinada. IP provee
transporte de Capa 3 no orientado a conexión a través de una inter-red. TCP permite la transmisión confiable, orientada a conexión de los
paquetes en la Capa 4 del modelo OSI. UDP proporciona la transmisión de paquetes no orientado a conexión y no confiable de los paquetes en
la Capa 4 del modelo OSI.
Tanto TCP como UDP utilizan IP como protocolo de transporte de Capa 3. Además, distintos protocolos de capa de aplicación utilizan TCP y
UDP. TCP provee servicios para aplicaciones tales como FTP, HTTP, SMTP y DNS. UDP es el protocolo de capa de transporte utilizado por DNS,
TFTP, SNMP y DHCP.
TCP debe utilizarse cuando las aplicaciones requieren la garantía de que un paquete llegue intacto, en secuencia y sin duplicar. El
encabezado que se asocia con garantizar la entrega del paquete, a veces, se convierte en un problema al utilizar TCP. No todas las
aplicaciones necesitan garantizar la entrega del paquete de datos, por lo tanto, utilizan un mecanismo de entrega no orientado a conexión,
más rápido, que aporta el UDP. El estándar del protocolo UDP, que se describe en RFC 768, es un protocolo simple que intercambia
segmentos sin acuses de recibo ni entrega garantizada.
UDP no hace uso de ventanas ni acuses de recibo de modo que los protocolos de capa de aplicación deben brindar la detección de errores. El
campo Puerto de origen es un campo optativo que sólo se utiliza si la información debe regresar al host transmisor. Cuando un router destino
recibe una actualización de enrutamiento, el router origen no solicita nada, de modo que nada debe regresar a la fuente. No existe
intercambio de información o datos alguno. El campo Puerto destino especifica la aplicación a la que UDP necesita pasar el protocolo. Una
petición DNS proveniente de un host hacia un servidor DNS suele tener un campo Puerto destino de 53, el número de puerto de UDP para DNS.
El campo Longitud identifica el número de octetos de un segmento UDP. El checksum de UDP es optativo pero debería utilizarse para
garantizar que no se han dañado los datos durante la transmisión. Para el transporte a través de la red, UDP se encapsula en el paquete IP.
Una vez que el segmento UDP llega a la dirección IP destino, debe haber un mecanismo que permita que el host receptor determine la exacta
aplicación en destino. Para este fin se utilizan los puertos destino. Si un host provee servicios de TFTP y DNS, debe ser capaz de determinar
cuál es el servicio que necesitan los segmentos UDP que llegan. El campo del Puerto destino del encabezado UDP determina la aplicación
hacia la que se enviará el segmento UDP.
Formato del segmento UDP
Múltiples conversaciones entre hosts
Miles de paquetes que proveen cientos de servicios distintos atraviesan una red moderna. En muchos casos, los servidores proveen una gran
cantidad de servicios lo que causa problemas singulares para el direccionamiento de los paquetes. Si un servidor ofrece servicios SMTP y
HTTP, utiliza el campo puerto destino para determinar cuál es el servicio que solicita el origen. El origen no puede construir un paquete
destinado sólo a la dirección IP del servidor porque el destino no sabría cuál es el servicio que se solicita. Un número de puerto debe
asociarse a la conversación entre hosts para garantizar que el paquete alcance el servicio adecuado en el servidor. Sin una forma de distinguir
entre las distintas conversaciones, el cliente sería incapaz de enviar un mensaje electrónico y navegar una página web utilizando un servidor
al mismo tiempo. Debe utilizarse un método para separar las conversaciones de la capa de transporte.
Los hosts que corren TCP/IP asocian los puertos de la capa de transporte con determinadas aplicaciones. Los números de puerto se usan para
realizar el seguimiento de las distintas conversaciones que atraviesan la red al mismo tiempo. Los números de puerto son necesarios cuando
un host se comunica con un servidor que provee múltiples servicios. Tanto TCP como UDP utilizan números de puerto o socket para enviar
información a las capas superiores.
Los fabricantes de software de aplicación han acordado utilizar los números de puerto bien conocidos que se definen en la RFC1700. Toda
conversación dirigida a la aplicación FTP utiliza el número de puerto estándar 21. Las conversaciones que no involucran aplicaciones con
números de puerto bien conocidos reciben números de puerto elegidos de forma aleatoria de un rango específico. Estos números de puerto se
usan como direcciones origen y destino en el segmento TCP.
Los puertos bien conocidos son aquellos desde 0 a 1.023.
Los puertos registrados son aquellos desde 1.024 a 49.151.
Los puertos dinámicos y/o privados son aquellos desde el 49.152 al 65.535.
Los sistemas que inician solicitudes de comunicación usan números de puerto para seleccionar las aplicaciones adecuadas. El host que origina
la transferencia asigna dinámicamente los números del puerto de origen para estas solicitudes y, en general, son números mayores a 1023.
Los números de puerto en el rango de 0 a 1023 se consideran números de puerto públicos y son controlados por la Autoridad de Asignación de
Números de Internet (IANA, por sus siglas en inglés).Los números de las casillas de correo postal son una buena analogía de los números de
puerto. De igual forma, la dirección IP lleva al paquete hacia el servidor correcto, pero el número de puerto TCP o UDP garantiza que el
paquete pase a la aplicación correspondiente.
Puertos para los clientes
Cada vez que un cliente se conecta a un servicio de un servidor, es necesario especificar el puerto de origen y destino. Los segmentos de TCP
y UDP contienen campos para los puertos de origen y destino. Los puertos destino o los puertos para servicios, generalmente, se definen
utilizando los puertos conocidos. Los puertos de origen configurados por el cliente se determinan de forma dinámica.
En general, un cliente determina el puerto de origen asignando un número mayor a 1023 de forma aleatoria. Por ejemplo, un cliente que
intenta comunicarse con un servidor web utiliza TCP y asigna el puerto destino con el número 80 y el puerto origen con 1045. Cuando el
paquete llega al servidor, pasa hacia la capa de transporte superior y eventualmente al servicio HTTP que opera en el puerto 80. El servidor
HTTP responde a las peticiones del cliente con un segmento que utiliza el puerto 80 como origen y 1045 como destino. De esta manera, los
clientes y servidores utilizan los puertos para diferenciar el proceso al que se asocia el segmento.
Numeración de los puertos y números de puerto conocidos
Los números de puerto se representan con 2 bytes en el encabezado del segmento TCP o UDP. Este valor de 16 bits puede hacer que los
números de puerto varíen de 0 a 65535. Estos números de puerto se dividen en tres categorías diferentes: puertos bien conocidos, puertos
registrados y puertos dinámicos o privados. Los primeros 1023 puertos son puertos bien conocidos. Como su nombre indica, estos puertos se
utilizan para los servicios de red bien conocidos, por ejemplo; FTP, Telnet, o DNS. Los puertos registrados varían de 1024 a 49151. Los
puertos entre 49152 y 65535 se conocen como puertos dinámicos o privados.
Ejemplo de múltiples sesiones entre hosts
Se usan números de puerto para rastrear múltiples sesiones que pueden ocurrir entre hosts. Los números de puerto de origen y destino se
combinan con la dirección de red para formar un socket. Un par de sockets, uno en cada host, forman una única conexión. Por ejemplo, un
host puede tener una conexión telnet, puerto 23 mientras que, al mismo tiempo, puede navegar la red, puerto 80. Las direcciones IP y MAC
son las mismas porque los paquetes provienen del mismo host. Por lo tanto, cada conversación en el extremo origen necesita su propio
número de puerto y cada servicio solicitado necesita de su propio número de puerto.
Direcciones MAC, direcciones IP y números de puerto
Estos tres métodos de direccionamiento resultan a menudo confusos, pero es posible evitar la confusión si se explican las direcciones
haciendo referencia al modelo OSI. Los números de puerto se encuentran en la capa de transporte y la capa de red les brinda servicio. La
capa de red asigna una dirección lógica (dirección IP) y recibe servicios de la capa de enlace de datos quien le asigna una dirección física
(dirección MAC).
Descargar