TEMA III: UDP Y TCP 3. Protocols UDP i TCP 3.1 El protocol UDP 3.2 Funcionalitats de TCP 3.3 Els estats de TCP 3.3.1 Establiment de la conexió(3whs) 3.3.2 Finalització de la conexió 3.4 Control d'errors 3.5 Control de fluxe 3.6 Control de la congestió 3.7 Sockets 3.8 RPCs INTRODUCCIÓN apl. apl. apl. Traceroute FTP Nivel de Proceso SMTP Puerto Nivel de Proceso UDP TCP Nivel de Transporte Nivel de Transporte ICMP IP Nivel de Red Nivel de Red Nivel de Red ARP RARP Driver Interfaz Red Interfaz Red Interfaz Red Red Física Red Física INTRODUCCIÓN Entre las aplicaciones e IP existen dos protocolos de los cuales puede hacerse uso: UDP (User Datagram Protocol): para aplicaciones NOORIENTADAS A LA CONEXIÓN (aquellas en las que los intercambios de información son puntuales y gastar recursos en que los procesos pongan en pie una conexión es excesivo -RIP, DNS para preguntas y respuestas cortas-) TCP (Transport Control Protocol): para aplicaciones ORIENTADAS A LA CONEXIÓN, aquellas en que los procesos deben establecer un diálogo de una cierta duración (ftp, http, telnet, etc.). Juan Carlos Cruellas Ibarz. 1
INTRODUCCION Ambos son protocolos extremo a extremo: Las entidades que se comunican son dos procesos que se ejecutan en máquinas diferentes. En una misma máquina pueden haber varios procesos en ejecución: multiplexación por número de puertos Un proceso identifica a su interlocutor remoto (otro proceso) mediante la @IP de la máquina en que se ejecuta y el número de puerto por el que dicho proceso se comunica con UDP o TCP. User Datagram Protocol (UDP) Especificado en la RFC 768 Definido para ofrecer a las aplicaciones un mecanismo de comunicación no orientado a la conexión (datagramas). Se trata de un protocolo: Extremo a extremo No fiable (la entrega de los datagramas y la protección contra la duplicidad no están garantizadas) Cada datagrama UDP se encapsula en UN datagrama IP User Datagram Protocol (UDP) UDP coloca en sus datagramas los datos tal y como los genera la aplicación. Utilizado por RIP y por SNMP (Simple Network Management Protocol), entre otros. Juan Carlos Cruellas Ibarz. 2
User Datagram Protocol (UDP) 0 7 8 15 16 23 24 31 Source Destination Port Port Length Checksum data octets... ----------------... Puertos fuente y destino para identificar las aplicaciones en los hosts. Longitud del datagrama Checksum para proteger el datagrama UDP User Datagram Protocol (UDP) Cálculo del checksum: operaciones similares a las del checksum del header de IP. Protege la totalidad del datagrama UDP. En la realización de la suma intervienen: Un pseudoheader formado por las @IP de fuente y destino, así como indicaciones del protocolo y la longitud del datagrama UDP El header del datagrama UDP Los datos del datagrama UDP User Datagram Protocol (UDP) 0 7 8 15 16 23 24 31 source address destination address zero protocol UDP length Source Destination Port Port Length Checksum data octets... +-----------------------------------+ Pseudoheader Juan Carlos Cruellas Ibarz. 3
Transmision Control Protocol (TCP) Definido en la RFC 793. TCP es un protocolo: Extremo a extremo (entre procesos ejecutados en máquinas diferentes) Orientado a la conexión y Fiable Basado en el intercambio bajo ciertas premisas de secuencias de bytes sin marcas insertadas automáticamente por el protocolo. TCP: Introducción Especificación del protocolo: RFC 793 Protocolo: Extremo a extremo (entre procesos), Fiable, Orientado a la conexión, De secuencia de bytes (byte-stream) TCP: Introducción Fiable: asegura la entrega de datos en destino sin errores, en orden y sin pérdida o duplicación. TCP divide los datos de la aplicación en pedazos adecuados para ser transmitidos (segmentos TCP) dentro de datagramas IP TCP utiliza notifica la recepción correcta de segmentos con datos mediante el el envío de segmentos con indicación de dicha recepción (ACK). Cuando el módulo TCP envía un segmento con datos, activa un reloj y espera la llegada del ACK correspondiente durante un período de tiempo. Si se supera, RETRANSMITE el segmento no reconocido. Juan Carlos Cruellas Ibarz. 4
TCP: Introducción El módulo TCP calcula un checksum sobre el header y los datos de un segmento (checksum extremo a extremo). El módulo TCP reordena los datos que no llegan en orden. El módulo TCP implanta un mecanismo de control de flujo para que procesos demasiado rápidos en la generación de información no desborden los recursos de procesos más lentos en el consumo de la información (problemas de recursos de procesos -en hosts-). El módulo TCP implanta un mecanismo de control de congestión para ralentizar el envío de datagramas con segmentos a zonas de Internet cercanas a la congestión(problemas de recursos en Internet -redes-). TCP: Introducción Es orientado a la conexión. Para aplicaciones en las que se prevee interacciones prolongadas entre los procesos que se comunican: conexión TCP especifica CÓMO ESTABLECER, MANTENER y CERRAR una conexión. Durante el establecimiento de la conexión no se intercambian datos de las aplicaciones (los segmentos TCP constarán únicamente de los headers ). Durante una conexión los dos extremos intercambian datos. Dos casos bien diferenciados: TCP: Introducción Intercambios interactivos con pocos datos (Telnet, rlogin). Intercambios de grandes cantidades ( bulk data ) de datos (ftp cuando se transfieren ficheros). Está orientado al intercambio de bytes. No hay marcas de registro insertadas por TCP: no diferencia unos de otros. No interpreta en absoluto los contenidos de los datos. Juan Carlos Cruellas Ibarz. 5
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Source Port Destination Port Sequence Number Acknowledgment Number Data U A P R S F Offset Reserved R C S S Y I Window G K H T N N Checksum Urgent Pointer Options Padding data 16 bits con el número de puerto generador del segmento (identifica el proceso entre el resto de procesos de la máquina). 16 bits con el número de puerto destinatario del segmento. En aplicaciones cliente-servidor, el servidor tiene un número de puerto fijo y si es un servicio estándar, conocido públicamente. A cada cliente se le asigna un número de puerto cuando arranca que puede variar (puerto efímero) 32 bits codificando un NÚMERO DE SECUENCIA del primer byte de datos del segmento. TCP numera CADA byte de datos intercambiados en una conexión con esos 32 bits. Juan Carlos Cruellas Ibarz. 6
32 bits codificando el ACK number : número del siguiente número de secuencia que quien lo envía espera recibir. Confirma la llegada correcta de bytes hasta aquel cuyo número es ACK number - 1. Es un ACK de grupo. Este campo solo contiene dicho número si el bit ACK está a 1. En TCP enviar un ACK no cuesta nada: aparece en el header. Una vez establecida la conexión, el bit ACK estará siempre a 1 y todos los segmentos incorporarán el número de ACK. La conexión mantenida con TCP es full-duplex (la información puede fluir desde cualquier extremo sin importar qué sucede en el otro sentido): cada extremo debe mantener su propia secuencia de números de bytes. 4 bits para codificar la longitud del header en número de palabras de 32 bits (tamaño máximo: 60 bytes, sin opciones: 20). 6 bits reservados para usos futuros. Bits de control: URG: Indicador de que en el segmento hay datos urgentes. El módulo TCP receptor debe notificar tal situación a la aplicación. ACK: valida el número de ACK en el campo correspondiente. PUSH. El módulo TCP receptor debe pasar lo antes posible los datos a la aplicación. RST: Reset de la conexión. Juan Carlos Cruellas Ibarz. 7
SYN: Indicación para proceder a la sincronización de los números de secuencia para establecer una conexión. FIN: No habrá más datos por parte de quien envía un segmento con este flag puesto a 1. 16 bits para codificar el tamaño en bytes de la ventana de recepción (control de flujo). 16 bits para el checksum del segmento TCP. Calculado de forma similar al del datagrama UDP (incluido el pseudoheader). 16 bits para el puntero de datos urgentes. Cuando el flag URG está a 1, el valor de este campo, sumado al número de secuencia del segmento apunta al último byte de los datos urgentes. Control de errores y ACKs TCP numera los bytes enviados, NO los segmentos. Sigue un mecanismo de reconocimiento de bytes correctamente llegados: Una vez establecida la conexión, todos los segmentos fijan el flag ACK a 1. Además en el campo ACK de la cabecera, se incorpora el valor del número de secuencia (N) del siguiente segmento que espera recibirse. En definitiva, se reconoce la correcta llegada de hasta el byte cuyo número de secuencia es N-1. Juan Carlos Cruellas Ibarz. 8
100-130 131-200 201-220 221-240 241-260 261-280 Time-out segm. 3! 201-220 Control de errores y ACKs ack 201 ack 201 ack 201 ack 281 Los acks viajan en la cabecera de segmento. 100-130 131-200 201-220 221-240 241-260 261-280 El receptor vuelve a generar ack 201 porque NO ha recibido el byte 201! Tras recibir el segmento 201 a 221, el primer ACK reconoce todos los bytes hasta el 280 Establecimiento de la conexión Se lanza cuando una aplicación (cliente de ftp, telnet o http, por ejemplo) desea dialogar con otra aplicación remota. La aplicación lanza una indicación a su módulo TCP (después de invocar al resolver ) de su deseo de dialogar con la aplicación que escucha en el puerto P que se ejecuta en la máquina cuya @IP es D. El módulo TCP inicia entonces un diálogo con el módulo TCP que sirve a la aplicación remota para poner en pie una CONEXIÓN TCP. Cuando esta fase acaba, TCP lo notifica a la aplicación que puede dar comienzo al diálogo. Establecimiento de la conexión Terminología: Cuando un extremo solicita abrir una conexión al otro, se dice que intenta llevar a cabo una apertura activa de la conexión. Si el extremo al que llega la solicitud acepta establecer la conexión, se dice que lleva a cabo una apertura pasiva de la conexión. Dos posibles escenarios: La apertura activa tiene lugar en un extremo. La apertura activa tiene lugar en ambos extremos (apertura simultánea). Juan Carlos Cruellas Ibarz. 9
Apertura activa desde un extremo Durante esta fase, los extremos intercambian segmentos SIN datos, solo contienen los headers. Secuencia: Para solicitar la apertura de una conexión el extremo A envía un header TCP con el flag SYN puesto a 1. Cuando B lo recibe y decide aceptar la conexión, le contesta con un segmento TCP (header) sin datos con los flags SYN y ACK a 1. El valor del campo ACK es el ACK del segmento recibido. Cuando A recibe este segmento, envía el último de la negociación: un segmento TCP con el flag ACK a 1 y el campo ACK NUMBER del segmento llegado de B TCP B Apertura activa desde un extremo SYN 1234567890 ACK 1234567891 (0) SYN 5000000000 (0) Conexión establecida ACK 5000000001 1 A genera un num de secuencia inicial y envía SYNC para pedir conexión 2 B admite conexión. SYNC con ACK 3 A finaliza esta fase enviando el ACK del SYN de B TCP A Apertura simultánea En este escenario, los extremos deciden solicitar la apertura al otro. A envía un SYN a B, y antes de recibirlo, B envía un SYN a A Cuando A y B reciben los respectivos SYN, generan los SYN de respuesta con los ACK correspondientes. La llegada de estos dos SYN a los dos extremos significa que la conexión está establecida. Juan Carlos Cruellas Ibarz. 10
B Apertura simultánea ACK 5000000001 SYN 1234567890 (0) Conexión establecida A SYN 1234567890 (0)SYN 5000000000 (0) ACK 1234567891 SYN 5000000000 (0) 2. B envía SYN a A 1. A envía SYN a B 4. B envía SYN y ACK a A 3. A envía SYN y ACK a B Juan Carlos Cruellas Ibarz. 11