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).