PROTOCOLOS+DE+TRANSPORTE

=Protocolos de Transporte=

media type="youtube" key="4pmDWncitW0" width="425" height="350" align="center"

Su objetivo primordial reside en garantizar la comunicación fiable y a la vez eficiente. Proporciona un servicio "extremo a extremo". Tipos de servicio : > Servicio sin conexión : UDP. > Servicio orientado a conexión : TCP Entre otras funciones a destacar : > Extiende el esquema de direccionamiento de IP. > Se encarga también de la segmentación de los mensajes y de su posterior reensamblado. Asi mismo también supervisa la llegada en orden de los mismos. > Control de errorres y control de flujo basado en creditos ( El receptor informa al emisor del espacio de almacenamiento disponible. El emisor no debe enviar mas información de la que se le ha permitido.) > La estructura de los mensajes de control de los protocolos de este nivel se compone de : > Un identificador de host por medio de su dirección IP. > Un identificador de proceso por medio de la asignación de un puerto. > Un identificador del protocolo que se está utilizando : TCP o UDP. > UDP (User Datagram Protocol) : Es un protocolo de transporte no orientado a conexión que proporciona un servicio de "datagramas de usuario", que se caracteriza por no incluir mecanismos que eviten la perdida de mensajes, es decir , no ofrece fiabilidad. Lo cual implica que las aplicaciones que lo utilicen deben responsabilizarse de este tipo de problema.

Las direcciones de transporte UDP, añaden un número de puerto a la dirección IP. Los números de puerto identifican a los procesos emisor y receptor.

UDP se utiliza a veces como sustituto de TCP, cuando no hay que utilizar los servicios de este. UDP sirve como interfaz de aplixcación simple para IP. Como multiplexor / demultiplexor del envío y recepción del tráfico de IP.

**Formato del datagrama UDP :** media type="youtube" key="oOBi0uz06yw" width="425" height="350" align="center"

El campo longitud mensaje incluye a la cabecera y a los datos del mismo. El campo checksum es opcional, cuando no se emplea se pone a cero.
 * [[image:http://www.cicei.com/ocon/gsi/tut_tcpip/3376f48.gif width="474" height="145" align="right"]] ||

>> Puerto origen : Identifica al puerto del proceso de aplicación remitente. Es opcional, si no se utiliza se pone a cero. >> Puerto destino : Identifica el proceso de recepción en el ordenador de destino. >> Longitud mensaje: Indica la longitud del datagrama de usuario, incluyendo la cabecera y los datos. La longitud mínima es de 8 octetos. >> Checksum : Contiene el valor del complemento a 1 en 16 bits del complemento a 1 de la suma de la pseudocabecera de IP, la cabecera de UDP y los datos. >> >> Una relación de puertos UDP reservados por algunos servicios : >> || ** Numero **
 * Clave || Descripción ||
 * 11 || Users || Usuarios activos ||
 * 13 || Daytime || Fecha y hora del sistema ||
 * 53 || Domain || Servidor de nombres de dominio ||
 * 67 || Bootps || Servidor protocolo "bootstrap" ||
 * 68 || Bootpc || Cliente protocolo "bootstrap" ||
 * 69 || Tftp || Trivial File Transfer Protocol ||

>> **TCP (PROTOCOLO DE CONTROL DE TRANSPORTE) :** >> Ciertas aplicaciones de usuario requieren asegurarse de que todos los datagramas han llegado correctamente a su destino. Los mecanismos para realizar estos servicios residen en TCP. TCP debe ser capaz de establecer y gestionar sesiones (conexiones lógicas) entre los usuarios locales y los remotos. TCP, por tanto debe tener conocimiento de las actividades de los usuarios para dar soporte a la transferencia de susu datos por la interred. >> TCP reside en el nivel de transporte del modelo de niveles convencional. Esta situado entre IP y los niveles superiores. Está diseñado para residir en los ordenadores o en las maquinas que se ocupan de conservar la integridad de la transferencia de datos entre extremos. Lo más común es que TCP resida en los ordenadores de usuario. >> TCP es quién se tiene que encargar de las tareas de fiabilidad, control de flujo, secuenciamiento, aperturas y cierres. Puede soportar otros protocolos, como los de aplicación FTP (Protocolo de transferencia de archivos) y SMTP (Protocolo de transferencia de correo simple. >> Caracteristicas de TCP : >> TCP es un protocolo orientado a conexión . Esto quiere decir que TCP mantiene información del estado de cada cadena de datos de usuario que circula por él. Es responsable de la transferencia de datos entre extremos por la red o redes hasta la aplicación de usuario receptora. Es responsable de la transferencia fiable de cada uno de los caracteres que recibe del nivel superior correspondiente. >> Cada octeto transmitido lleva asignado un número de secuencia. El módulo TCP receptor utiliza una rutina de checksum para comprobar la posible existencia de daños en los datos producidos en el proceso de transmisión. Si son aceptables , se envia una aceptación positiva (ACK) al módulo TCP remitente. En cambio , si los datos han resultado dañados , el receptor los descarta y utiliza un número de secuencia para informar al remitente del problema. También, TCP emplea temporizadores para garantizar que no transcurre un lapso de tiempo demasiado grande antes de la transmisión de aceptaciones desde el nodo receptor y/o de la transmisión de datos desde el nodo transmisor. >> TCP recibe datos de un protocolo de nivel superior de forma orientada a cadenas, es decir , se envian caracteres separados y no bloques, tramas,datagramas , etc. Los datos son enviados byte a byte, y cuando llegan al nivel TCP , los bytes son agrupados para formar segmentos. Dichos segmentos se transfieren a IP para su transmisión. >> TCP, también comprueba la duplicidad de los datos. Descarta los datos redundantes que puedan aparecer en la interred. Además soporta el concepto de función push. Esta función se utiliza cuando una aplicación desea asegurarse de que todos los datos que han pasado al nivel inferior se han transmitido. >> TCP emplea un esquema de aceptación inclusiva. El número de aceptación acepta todos los octetos hasta e incluyendo el del número de aceptación menos uno. El módulo TCP receptor se ocupa también de controlar el flujo de los datos del transmisor, lo que es muy útil para evitar el desbordamiento de los dispositivos de almacenamiento y la saturación de la máquina receptora. La idea que utiliza TCP se basa en enviar al dispositivo transmisor un valor de "ventana". Se permite que el transmisor envie un número máximo de bytes igual al valor de su ventana. Cuando se ha llegado a ese valor, la ventana se cierra y el transmisor debe interrumpir el envío de datos. >> TCP proporciona transmisión en modo duplex integral entre las entidades que se comunican, así la transmisión se puede efectuar en ambos sentidos sin necesidad de esperar la señal de indicación de cambio de sentido. Aparte de todo esto, también permite especificar niveles de seguridad y prioridades de las conexiones. >> Una conexión TCP está identificada por los dos extremos que conecta : >> Ej : (158.42.53.1, 1151) y (158.42.53.5 , 1375) (Dirección IP, Puerto) >> Hay que tener en cuenta que un mismo número de puerto puede estar siendo utilizado en distintas conexiones. >> El segmento TCP >> El segmento se divide en dos partes, la parte de cabecera y la parte de datos, que sigue a la parte de cabecera. Los primeros dos campos del segmento se denominan puerto de fuente y puerto de destino. Son campos de 16 bits e identifican a los programas de aplicación de nivel superior que utilizan la conexión TCP. El siguiente campo es el número de secuencia, que contiene el número de secuencia del primer octeto del campo de datos de usuario. Su valor especifica la posición de la cadena de bits del módulo transmisor. Dentro del segmento especifica el primer octeto de datos de usuario. Este número se utiliza también durante la operación de gestión de la conexión. >> Estructura del Segmento TCP : >> |||| PUERTO TCP FUENTE (16)
 * PUERTO TCP DESTINO (16) ||
 * NUMERO DE SECUENCIA (32) ||
 * NUMERO DE ACEPTACION (32) ||
 * DESPLAZAMIENTO |||| RESERVADO (6) || FLAGS || VENTANA (16) ||
 * CHECKSUM (16) || PUNTERO DE DATOS URGENTES (16) ||
 * OPCIONES (variable) || RELLENO ||
 * DATOS (variable) ||

El valor del campo de número de aceptación permite aceptar los datos previamente recibidos. Este campo contiene el valor del número de secuencia del siguiente octeto que se espera recibir del transmisor. Así, permite la aceptación de todos los octetos hasta e incluyendo el valor de este número menos uno. Los reconocimientos o numeros de aceptación siempre indican el número de secuencia del siguiente octeto que se espera recibir. Las retransmisiones emplean un temporizador, pero su duración es crítica : >>> Los tiempos que emplean los paquetes en sus recorridos por la red son muy variables, incluso entre paquetes consecutivos. >>> Si el plazo es muy corto pueden darse demasiadas retransmisiones innecesarias >>> Si el plazo es muy largo el proces de recuperación de errores será lento. >>> Para la retransmisión se emplea un algoritmo de retransmisión adaptativa. TCP controla los retardos sobre cada conexión y ajusta los timeouts de acuerdo con ellos

>>> Cada vez que se obtiene un nuevo round trip se ajusta el estimado para la conexión (RTT= Round Trip Time). >>> RTT = ( a*anterior_RTT) + ((1-a)* round_trip_medido) >>> Donde 0<=a<1 (Recomendado a=0.9) >>> Timeout = B*RTT (B<1, se recomienda B=2) >>> El campo desplazamiento de datos especifica el número de palabras alineadas de 32 bits de que consta la cabecera de TCP. Este campo se utiliza para determinar donde comienza el campo de datos. Los seis bits siguientes al campo reservado (para uso futuro), son los flags , bits de control que se utilizan para especificar ciertos servicios o utilidades que se pueden emplear durante la sesión.

**Son los siguientes :** URG : Indica que el campo de puntero de urgencia es significativo. ACK : Indica si el campo de aceptación es significativo. PSH : Indica que el módulo va utilizar la función push. RST : Indica que la conexión se va a inicializar. SYN : Indica que se van a sincronizar los números de secuencia. FIN : Indica que el remitente no tiene más datos para enviar.

TCP es libre de dividir el flujo de datos en los segmentos que estime oportuno. Esto puede interferir con algunas aplicaciones que esperan una entrega inmediata, como es el caso de una sesión interactiva con terminal remoto después de teclear una orden. La operación PUSH fuerza a TCP a enviar un segmento y que este sea entregado de inmediato a la aplicación en el otro extremo. El campo siguiente denominado ventana, se pone a un valor que indica cuántos octetos desea aceptar el receptor. Este valor se establece teniendo en cuenta el valor del campo de aceptación. La ventana se establece sumando los valores del campo de ventana y del campo de número de aceptación. TCP utiliza ventana deslizante para el control de flujo y error.

El campo checksum contiene el complemento a uno de 16 bits del complemento a uno de la suma de todas las palabras de 16 bits del segmento, incluyendo la cabecera y el texto. Esto se realiza para determinar si el segmento procedente del transmisor ha llegado libre de errores.

El campo puntero urgente, se utiliza solo si el indicador URG está a 1. Su función es identificar el octeto de datos al que siguen datos urgentes. Los datos urgentes se denominan datos fuera de banda.

El campo de opciones está concebido para posibilitar futuras mejoras de TCP. Cada opción se especifica mediante un byte que especifica el número de opción, un campo que contiene la longitud de la opción , y finalmente , los valores de la opción propiamente dichos.

Las opciones son las siguientes :

0 : fin de lista de opciones. 1 : no operación. 2 : tamaño máximo de segmento.

Finalmente el campo relleno asegura que la cabecera TCP ocupa un múltiplo par de 32 bits. Luego, por su puesto siguen los datos de usuario.

>> **Entre los puertos TCP reservados más comunes destacan :** >> || Número =Puertos o Sockets=
 * Aplicación || Descripción ||
 * 7 || Echo || Eco ||
 * 11 || Users || Usuarios Activos ||
 * 13 || Daytime || Fecha y hora ||
 * 20 || FTP – Datos || Transferencia de ficheros con FTP ||
 * 21 || FTP – Control || Transferencia de comandos en FTP ||
 * 23 || Telnet || Conexión Remota ||
 * 25 || SMTP || Transferencia de Correo. ||
 * 37 || TIME || Time ||
 * 42 || Nameserver || Servidor de Nombres ||
 * 53 || Domain || Servidor de Nombres de Dominio ||
 * 79 || Finger || Finger ||
 * 101 || Hostname || Servidor de nombres nic ||
 * 110 || POP3 || Recuperación de Correo. ||
 * 119 || NNTP || Acceso a noticias en la Red. ||

> Puertos > Cada proceso que se comunica con otro proceso se identifica a sí mismo a la familia de protocolos TCP/IP por uno o más puertos. Un puerto es un número de 16 bits, usado por el protocolo host-a-host para identificar a qué protocolo de más alto nivel o programa de aplicación (proceso) debe entregar los mensajes de entrada. > Como algunos programas de más alto nivel son protocolos por sí mismos, estandarizados en la familia de protocolos TCP/IP, tales como telnet y ftp, usan el mismo número de puerto en todas las realizaciones de TCP/IP. Aquellos números de puerto "asignados" se denominan puertos bien-conocidos y las aplicaciones estándares servicios bien-conocidos. > Los puertos "bien-conocidos" los controla y asigna la Autoridad de Números Asignados de Internet (IANA) y en la mayoría de los sistemas sólo pueden usarlo los procesos del sistema o programas ejecutados con privilegios de usuario. Los puertos "bien-conocidos" asignados ocupan números de puerto en el rango de 0 a 1023. Los puertos con números dentro del rango 1024-65535 no los controla la IANA y la mayor parte de los sistemas únicamente usan programas desarrollados por usuarios. > La confusión debida a que dos aplicaciones diferentes intentan usar los mismos números de puerto sobre un host se evita escribiendo esas aplicaciones para pedir un puerto TCP/IP disponible. Puesto que este número de puerto se asigna dinámicamente, debe diferir de una invocación de una aplicación a la próxima. > > **Sockets** > **Consideremos la terminología siguiente:** >> En la familia TCP/IP, por ejemplo: >> {tcp, 193.44.234.3, 1500, 193.44.234.5, 21} > La interfaz socket es una de las muchas APIs para los protocolos de comunicación. Diseñada para ser una interfaz de programación de comunicación, fue introducida primero por el sistema UNIX 4.2BSD. Aunque no se ha estandarizado, ha llegado a ser un estándar en la industria. > 4.2BSD permitía dos dominios de comunicación diferentes: Internet y UNIX. 4.3BSD ha añadido los protocolos del Sistema de Red de Xerox (XNS) y 4.4BSD añadirá una interfaz extendida para dar soporte a los protocolos ISO OSI. > > Llamadas socket básicas > A continuación se lista algunas llamadas de la interfaz socket básica. En la próxima sección se verá un escenario ejemplo del uso de estas llamadas de la interfaz socket. >> donde: >> >> donde: >> >> Nótese que después de la llamada bind, ya se tienen valores para los tres primeros parámetros dentro de la asociación 5-tupla: >> {protocolo, dirección-local, proceso-local, dirección-externa, proceso-externo} >> donde: >> >> donde: >> >> Nótese que esta llamada accept la emite un proceso servidor en vez de un proceso cliente. Si existe una petición de conexión esperando en la cola por este socket de conexión, accept toma la primera petición de la cola y crea otro socket con las mismas propiedades que sockfd; en caso contrario, accept bloqueará al proceso llamador hasta que llegue una petición de conexión. >> donde: >> Enviar y/o recibir datos >> Nótese que esta llamada la emite un proceso cliente mejor que un proceso servidor. >> Nótese que estas llamadas son similares a las llamadas del sistema de E/S de ficheros estándar read y write. >> donde sockfd es el mismo entero que devuelve la llamada socket. > > Un escenario ejemplo > Como ejemplo, considerar las llamadas del sistema socket para un protocolo orientado a conexión. > Considerar las llamadas del sistema socket anterior en términos de especificar los elementos de la asociación: > La interfez socket se diferencia por los servicios distintos que proporciona. Flujo, datagrama, y raw sockets cada uno de ellos define un servicio distinto disponible para aplicaciones.
 * Un socket es un tipo especial de manejador de fichero que utiliza un proceso para pedir servicios de red al sistema operativo.
 * Una dirección de socket es la tripleta: {protocolo, dirección-local, proceso-local} En la familia TCP/IP, por ejemplo: {tcp, 193.44.234.3, 12345}
 * Una conversación es el enlace de comunicación entre dos procesos.
 * Una asociaciónes la quíntupla que especifica completamente los dos procesos que comprende una conexión: {protocolo, dirección-local, proceso-local, dirección-externa, proceso-externo}
 * podría ser una asociación válida.
 * Una media-asociaciónes:
 * {protocolo, dirección-local, proceso-local}
 * {protocolo, dirección-externa, proceso-externo}
 * que especifica cada mitad de una conexión.
 * La media-asociación se denomina también socket o dirección de transporte. Esto es, un socket es un punto terminal para comunicación que puede nombrarse y direccionarse en una red.
 * La media-asociación se denomina también socket o dirección de transporte. Esto es, un socket es un punto terminal para comunicación que puede nombrarse y direccionarse en una red.
 * Inicializar un socketFORMATO: int sockfd = socket(int familia, int tipo, int protocolo)
 * familia simboliza familia de direccionamiento . Puede tomar valores tales como AF_UNIX, AF_INET, AF_NS y AF_IUCV. Su propósito es especificar el método de direccionamiento utilizado por el socket.
 * tipo simboliza el tipo de interface de socket a usar. Puede tomar valores tales como SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, y SOCK_SEQPACKET.
 * protocolo puede ser UDP, TCP, IP o ICMP.
 * sockfd es un entero (similar a un descriptor de fichero) que devuelve llamada socket.
 * Ligar (registro) un socket a una dirección de puertoFORMATO: int bind(int sockfd, struct sockaddr *localaddr, int addrlen)
 * sockfd es el mismo entero devuelto por la llamada socket.
 * localaddr es la dirección local que devuelve la llamada bind.
 * Indicar premura para recibir conexionesFORMATO: int listen(int sockfd, int tamaño-cola)
 * sockfd es el mismo entero que devuelve la llamada socket.
 * tamaño-cola indica el número de conexiones pedida que puede introducir en la cola el sistema mientras el proceso local no haya emitido la llamada accept.
 * Aceptar una conexiónFORMATO: int accept(int sockfd, struct sockaddr *dirección-externa, int addrlen)
 * sockfd es el mismo entero que devuelve la llemada socket.
 * dirección-externa es la dirección del proceso externo (cliente) que devuelve la llamada accept.
 * Petición de conexión al servidorFORMATO: int connect(int sockfd, struct sockaddr *dirección-externa, int addrlen)
 * sockfd es el mismo entero devuelto por la llamada socket.
 * dirección-externa es la dirección del proceso externo (servidor) que devuelve la llamada connect.
 * Las llamadas read, readv(sockfd, char *buffer, int addrlen), recv, readfrom, send(sockfd, msg, len, flags), write pueden usarse para recibir y enviar datos en una asociación de socket establecida (o conexión).
 * Cerrar un socket FORMATO: int close(int sockfd)
 * Interfaz socket de flujo (SOCK_STREAM): Define un servicio orientado a conexión confiable (sobre TCP por ejemplo). Los datos se envían sin errores o duplicación y se reciben en el mismo orden de como fueron enviados. El control de flujo está integrado para evitar overruns. No se imponen límites en el intercambio de datos, que se considera flujo de bytes. Ejemplo de aplicación que use sockets de flujo es el Programa de Transferencia de Ficheros (FTP).
 * Interfaz socket de datagrama (SOCK_DGRAM): Define un servicio no orientado a conexión (sobre UDP por ejemplo). Los datagramas se nevían como paquetes independientes. El servicio no proporciona garantías; los datos se pueden perder o duplicar y los datagramas pueden llegar fuera de orden. No realiza desensamblado y reensamblado de paquetes. Ejemplo de aplicación que utilice sockets de datagrama es el Sistema de Ficheros de Red.
 * Interfaz socket raw (SOCK_RAW): Permite acceso directo a protocolos de capas más bajas tales como IP e ICMP. Esta interfaz se utiliza a menudo para comprobar nuevas implementaciones de protocolos. Ejemplo de aplicación que use sockets raw es la orden ping.