270 likes | 392 Views
Usamos las reglas del protocolo para mandar información de un sitio a otro sin garantía de entrega en destino y sin garantía de orden Ejemplo: si primero mando un bloque B1 y luego B2 el protocolo IP no garantiza la llegada al destino en ese orden.
E N D
Usamos las reglas del protocolo para mandar información de un sitio a otro • sin garantía de entrega en destino y sin garantía de orden • Ejemplo: si primero mando un bloque B1 y luego B2 el protocolo IP no garantiza la llegada al destino en ese orden. • Ni siquiera garantiza la entrega, (probabilidad de pérdida muy baja) • TENEMOS que CONFIAR en que el protocolo transporte la información ¿Cómo se implementa el protocolo? • Como un conjunto de rutinas que son capaces de capturar información y enviarla donde nosotros le digamos • El S.O. necesita saber a quién enviar y qué enviar • Coge los datos a enviar los empaqueta y las rutinas (software) del protocolo envían la información por la red, encaminándolo hasta que llegue al destino • ¿Para qué aplicaciones es útil? • Aplicaciones básicas que no requieran alta fiabilidad, p.eje: correo electrónico • Por encima del protocolo IP están otros protocolos que organizan el problema de comunicación 1. El protocolo de red IP Curso 2002-2003 - Redes (IS20) -Capítulo 5
El protocolo UDP es un recubrimiento de IP básico • En cada máquina podemos tener varios procesos en ejecución • Supongamos 2 máquinas cada una con diferentes procesos: • M1: P1 y P2 M2: P3 y P4 • Si un proceso en M1 intenta mandar información a M2 el protocolo UDP se ocupará de la manera de organizar el envío • El SO de M2 recibe la información pero no sabe a quien entregársela • Si algún proceso de M2 avisa al SO que se hace cargo de atender la comunicación (tarea de recepción) no habrá problema • Si varios procesos de M2 quieren atender la tarea el SO no sabrá a quien asignarla: • A los dos • A uno de los dos arbitrariamente • Un trozo a cada uno • Alguien debe decidir que proceso acepta las peticiones de comunicación • Más complejo: ¿qué pasa si varios procesos de M1 mandan información a M2? Los protocolos de transporte Curso 2002-2003 - Redes (IS20) -Capítulo 5
El protocolo UDP permite organizar el problema: Añade dos puertos: puerto de origen y puerto de destino (nº de 16 bits) La información va a tal máquina con tal puerto de origen y tal puerto de destino La identificación de máquina y puertos incluida en la información que envío • Permite multiplexar sobre la misma conexión diferentes comunicaciones • El SO de M2 mira la información recibida de M1 y mira el puerto de destino que ESTARA ASOCIADO A UN PROCESO de M2 • Si el puerto asignado está ocupado el SO podrá asignar otro • También puede estar asignado un puerto a varios procesos estos compiten por la información. El SO lo asigna al primero que la pida. • Los procesos tienen que reservar los puertos que quieran utilizar ¿Qué ocurre si quiero entrega de paquetes (nivel de red) ordenada? • Nuevo protocolo TCP, garantiza la entrega y en orden • Ejemplo: • en una aplicación que lea fotogramas de video y los envía a otro, si cada 30 sg se pierde un fotograma no ocurre nada (USO DE UDP) • Si quiero que no se pierda nada aunque el sistema sea más lento (USO TCP) Los protocolos de transporte Curso 2002-2003 - Redes (IS20) -Capítulo 5
Recordemos: • IP servicio sin conexión (conexión virtual usando protocolo) • UDP sabemos dirección origen, dirección destino, puerto origen (proceso que manda) y puerto destino (proceso que recibe) • El SO sabe a quien (proceso que tiene asignado puerto) darle la información • El puerto será un “descriptor de archivo” Los protocolos de transporte Curso 2002-2003 - Redes (IS20) -Capítulo 5
¿Cómo funciona TCP? • Si al cabo de un tiempo la información no llega avisa • Garantiza entrega fiable (se entrega y en orden) • No hay comunicación real es ficticia, SO crea unas estructuras de datos para manejar la información • Conexión virtual—Sistema Operativo: • Fase inicial de conexión P1 quiere conectarse con P3. SO envia un paquete a M2 para asegurarse que existe la máquina. • M2 contesta enviando un paquete de confirmación a M1 • SO en M1 manda paquete a M2 para indicar que está conectado (devuelve un descriptor de archivo) • SO de M2 se informa de que alguien se ha conectado y confirma la conexión (devuelve un descriptor de archivo) • Conexión establecida: • P1 escribe en el descriptor y aparece información en M2 • P3 escribe en su descriptor y aparece información en M1 • Estos descriptores se conocen como SOCKET Los protocolos de transporte Curso 2002-2003 - Redes (IS20) -Capítulo 5
Para asegurarnos de la entrega de información ordenada existen mecanismos (protocolos) especiales: • Acuse • Incluir acuse en la trama de vuelta para optimizar el uso del canal..etc • La desconexión segura tiene 4 fases: • Inicio de desconexión: M1 paquete indicando que ya no mando nada más • M2 contesta yo tampoco te mando más • M1 dice adios • M2 dice adios • Todas estas facilidades las ofrece el sistema operativo como llamadas al sistema • ¿Quién empieza la conexión? ¿Quién acepta la conexión? • Si alguien quiere conectarse alguien debe estar dispuesto a oirle NODO PASIVO: servidor, que está dispuesto a que alguien se conecte a el NODO ACTIVO: cliente que quiere conectarse a alguien Los protocolos de transporte Curso 2002-2003 - Redes (IS20) -Capítulo 5
SERVIDOR: Pide un socket al SO (punto o puerto de conexión a un proceso) • Llamada al sistema: s=socket(dominio, tipo, protocolo) • Dominio: AF_UNIX rutas de ficheros (especifica conexión local en la misma máquina) y AF_INET para direcciones de internet (en máquina remota) • Tipo: para mandar datagramas SOCK_DGRAM o orientado a conexión SOCK_STREAM • Protocolo: 0 indica IP, SOCK_STREAM para TCP y SOCK_DGRAM UDP • El SO devuelve ese sockets que es un descriptor de archivo asociado al proceso que lo creo y con las propiedades que se pasan como argumento Informar al SO que estoy dispuesto a recibir conexiones • Llamada al sistema: bind(descriptorsocket, dirección, longitud) • Especifica al SO la dirección asignada al socket por donde puedo recibir cosas (puerto 7000) Servidor Curso 2002-2003 - Redes (IS20) -Capítulo 5
SERVIDOR: Tabla para guardar peticiones pendientes: • Llamada al sistema: estado=listen(descriptorsocket, longitud) • Reserva de zona de memoria para guardar peticiones que llegan para atenderlas posteriormente Resumen: El proceso servidor • Quiero recibir • en tal puerto • sino puedo atender guarda petición en memoria • Además debe esperar que alguien se conecte para ello usa la llamada: Nuevo socket=accept(antiguosocket, direccion, longitud) • El descriptor nuevo socket (que es el usado para comunicar) es idéntico al antiguosocket. Recibe la dirección del socket activo (el del cliente) en direccion • Si no conexiones pendientes antiguosocket bloquea al proceso hasta que lleguen • Al acabar se debe cerrar nuevo socket close() para dar fin a comunicación • El antiguosocket sigue abierto por si llegan otras peticiones, close() para fin de peticiones (fin de conexión) • Para intercambiar información llamadas: read, write, ..... Servidor Curso 2002-2003 - Redes (IS20) -Capítulo 5
CLIENTE: Pide un socket al SO (punto o puerto de conexión a un proceso) • Llamada al sistema: r=socket(dominio, tipo, protocolo) • Llamada al sistema: connect(descritorsocketactivo, direccion, longitud) • Establece la conexión entre socket activo y el pasivo para mandarle información • Direccion y longitud se refieren al socketpasivo o de destino • En el boletín de prácticas se nos dan dos programas: client.c server.c • Estudiar el programa intentando identificar su funcionamiento • Compilar primero servidor, ejecutarlo en una terminal de vuestro ordenador • Compilar el cliente y ejecutarlo en otra terminal de vuestro ordenador pasandole los parámetros necesarios: • Nombre máquina a la que quiero conectar • Puerto donde escucha el servidor • Palabra o frase (si es frase entre comillas dobles) a enviar • ¿Por qué aparecen unos caracteres extraños? Cliente Curso 2002-2003 - Redes (IS20) -Capítulo 5
Próxima sesión de prácticas Programa que envíe un pequeño correo Basado en el programa del cliente En web de asignatura enlaces a tutorial de SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
Hemos visto la relación cliente-servidor ¿qué significa realmente el concepto cliente-servidor? • La arquitectura cliente servidor intenta descargar la actividad de servidor. • El servidor tiene que atender a multitud de clientes o nodos (con listen creaba una lista de espera) • A mayor potencia de un servidor mayor coste • Objetivo: minimizar número de nodo que requieren servicio del servidor. • Si número de nodos (peticiones de cliente) disminuye el servidor aliviará su carga ya que no tiene que poner en marcha tantos servicios. SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
La separación entre los procesos que corren en el servidor y cliente ha evolucionado con el tiempo: • Inicialmente clientes grandes, y con el tiempo se redujo el tamaño • Ejemplo: pasarela web para proporcionar servicios (avance tecnológico para optimizar sistema cliente-servidor) • Pasarela web para correo: • conectamos cliente a servidor • vemos las páginas con mensajes que están en el servidor. • El cliente no las descarga • Protocolo en navegador web se adaptan con el tiempo a estas funciones • Navegador web permite conexión a servidor para mostrar información • Permiten servicio directo sin necesidad de software específico • La separación cliente-servidor para correo será: • Cliente pide a servidor servidor contesta • Después de separadas las tareas cliente-servidor vimos que hay que establecer comunicación • ¿Quién hace open pasivo? Nodo PASIVO ?? • ¿Quién hace open activo? Nodo ACTIVO ?? SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
Nodo PASIVO SERVIDOR ejecuta accept • Nodo ACTIVO CLIENTE ejecuta connect • ¿Cómo enviamos un correo? • Conexión a “estafeta” (máquina que corre software específico de envío y recepción de correo) • Necesarias direcciones de origen y destino y cuerpo del mensaje a enviar • Protocolo específico de envío de correo SMTP (Simple Mail Transfer Protocol), recuperación de mensajes POD (post office protocol), otros MIME (Multipurpose Internet Mail Extensions) • Se usa el puerto 25 de recepción de correo ¿Qué es un protocolo? • Una forma de entendernos definida por unas reglasEstándar • Ejemplo: • alumno-profesor (cliente-servidor) • Servicio: tutorías • Protocolo: • alumno pregunta: es hora de tutorías • Profesor responde: • Si, alumno entra y se sienta • No, alumno se va SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
Un protocolo se basa en un intercambio de mensajes • Hay mensajes inteligibles para el usuario • Ejemplo, pasos de conexión a un servidor: • Cliente se conecta • Servidor dice Hello 200 (el 200 indica que ha funcionado conexión) • Servidor se bloquea esperando peticiones • Hay situaciones del protocolo opcionales: Ej: • Alumno pregunta hay tutorías-profesor contesta si • Alumno entra en tutorías • Alumno en tutorías pegunta si puede fumar (opcional, puede no estar estandarizado) • Veremos luego que el cuerpo del mensaje DATA --- texto <<ENTER>> ---- texto <<ENTER>> . Punto que indica final mensaje <<ENTER>> • A partir de las reglas y los servicios que quiero obtener se genera un programa del cliente. • Si servidor usa el mismo estándar (protocolo) funcionará SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
El protocolo SMTP es un protocolo sencillo hay una negociación previa mínima • Para más eficiencia la negociación debe ser más fina • Ej: si se comparte ancho de banda y se quiere mandar un archivo grande rápidamente debe hacer una negociación que optimice la velocidad de transferencia. • SMTP no necesita identificador de usuario, • en el mail recibido aparentemente no se indica el emisor. • Generalmente se preserva la dirección IP desde donde se manda • Detección de anónimosresponsabilidad • Veamos el problema de envío de correo ¿Qué hará el cliente, open pasivo o activo? SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
Análisis del programa: • Comprobación de número de argumentos argc (número de argumentos 1) • Cliente crea conexión, s=socket(dominio, tipo, protocolo) • Dominio: AF_UNIX rutas de ficheros especifica conexión local (en la misma máquina y AF_INET para direcciones de internet en máquina remota • Tipo: para mandar datagramas SOCK_DGRAM o orientado a conexión SOCK_STREAM • Protocolo: 0 indica IP, SOCK_STREAM para TCP y SOCK_DGRAM UDP • Hace open activo: connect(descritorsocketactivo, direccion, longitud) • Establece conexión entre socket activo (s) y pasivo para mandarle información • Dirección y longitud se refieren al socketpasivo o de destino • Dirección del puerto 25 se construye la estructura ADDR que rellena los datos para connect. SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
Análisis del programa: • RESULTADO: El sistema devuelve un socket y se conecta al servidor que hemos pasado como argumento LEER HELLO-DECIR HELLO • Se lee del socket un vector (buffer) de 256 bytes • Strcpy(&buffer[leidos], “\0”) termina la cadena leída (long<=256bytes) • Printf para ver lo que hemos leído (mensaje del servidor) ¿qué vemos? • Formar el string que queremos enviar (cadena)= texto+terminación • IMPORTANTE: el protocolo espera como terminador del mensaje \r\n • “\r\n” equivale a pulsar ENTER (retorno carro y salto de línea) • Con write se escribe cadena en el socket • Leo respuesta de servidor (256 bytes) y la imprimo ¿qué vemos? SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
ENVIAR MAIL • Formar el string que queremos enviar (cadena)= texto+terminación\r\n • Con write se escribe cadena en el socket (mensaje de quién soy) • Leo respuesta de servidor (256 bytes) y la imprimo ¿qué vemos? • Se construye el cuerpo del mensaje DATA --- texto <<ENTER>> ---- texto <<ENTER>> . Punto que indica final mensaje <<ENTER>> • Leo respuesta servidor y la imprimo ¿qué vemos? DESPEDIDA • Formar el string que queremos enviar (cadena)= texto+terminación\r\n • Con write se escribe cadena en el socket (mensaje de quit) • Leo respuesta servidor y la imprimo ¿qué vemos? • Cierro el socket del cliente SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
Compilar y ejecutar programa • Hay que pasar como argumento al programa la máquina a la que me quiero conectar anubis.uji.es • Probar programa enviándote un mail a tu cuenta en anubis • Modificar el programa para que nos pida por teclado o le pasemos como argumento la dirección de correo donde quiero enviar el mail SMTP Curso 2002-2003 - Redes (IS20) -Capítulo 5
Próxima sesión de prácticas Problema de conexión simultanea de un Host (con 2 tarjetas de red) a 2 ordenadores Curso 2002-2003 - Redes (IS20) -Capítulo 5
Supongamos un Host M con 2 tarjetas de red que quiere hablar (proceso P) con dos ordenadores diferentes (procesos P1 y P2 en máquinas M1 y M2) • P se conecta con P1 abre un socket s1 • P se conecta con P2 abre un socket s2 • Orden de llegada de información a M procedente de M1 y M2 es aleatoria. • No hay un método de sincronización que especifíque quien debe enviar • Si P hace read en uno de los socket se queda bloquea hasta que haya algo que leer ¿cómo escoger cual de los socket debo inspeccionar primero? Select Curso 2002-2003 - Redes (IS20) -Capítulo 5
La única forma de recuperar información de un socket es hacer read • Si no hay datos se bloquea • Los socket tienen una opción para indicar lectura no bloqueante • Así sino hay datos se devuelve el control • Podemos saltar de uno a otro proceso hasta que en alguno haya datos • Consumo innecesario de CPU • Otra solución: crear dos procesos P y P’ uno lee de P1 y el otro de P2 • Cada proceso atiende a un nodo • Los procesos tienen espacios de memoria disjuntos • Nuestro espacio de datos es comúnespacio de memoria compartidarequiere semáforo • Otra solución: usar threads: procesos con memoria compartida, necesito un semáforo Select Curso 2002-2003 - Redes (IS20) -Capítulo 5
Problema: Tenemos un escenario en el que un proceso tiene varios socket abiertos y debe manejar los datos de entrada o salida en ellos. • No sabemos si llegan o no datos ni el orden en que llegaran por los socket. (puede haber bloqueos de lectura o escritura). Solución: Usar la llamada al sistema select para chequear el estado de varios descriptores de archivo (descriptores de los socket) a la vez y en diferentes modalidades: lectura, escritura, excepción. Hay que monitorizar socket en lectura, escritura y excepciones Parámetros: select(n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout ) • 3 listas: • Lista de descriptores de archivo que queremos monitorizar en lectura • Descriptores de archivo que quiero monitorizar en escritura • Lista de descriptores en los que se produjo alguna excepción (ejemplo: estoy leyendo un archivo y se cierra la conexión) • Una estructura: • Indica tiempo que queremos que este esperando a que uno de sus descriptores cambie de estado (listo para leer o escribir) Select Curso 2002-2003 - Redes (IS20) -Capítulo 5
Parámetros: select(n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout ) • Último parámetro puntero a una estructura compuesta por dos punteros largos, en una segundos y en otra microsegundos. • Especifica cuanto tiempo estará monitorizando los descriptores sin que se produzca ningún evento • Si queremos siempre bloqueado hasta evento, usamos NULL • Argumentos 2,3,4: son punteros a (fd_set) un vector de bits • En cada posición del vector de bits un 1 o 0 indica si se desea monitorizar el descriptor que ocupa esa posición: 1 SI , 0 NO • Para la monitorización de vectores de bit disponemos de Macros: FD_CLR (int fd, fd_set *set) pone a cero la posición del vector de bit de fd FD_ISSET (int fd, fd_set *set) indica si la posición de fd está o 1 o 0 FD_SET (int fd, fd_set *set) pone a uno la posición del vector de bit de fd FD_ZERO (fd_set *set) pone a cero todo el vector de bits fd_set • Primer argumentos: hace referencia a: • 1+ el descriptor más alto que queremos monitorizar • Ej: para un vector de bit de 8 bits 01234567 • monitorizar 5 descriptores 01001111 • Primer argumento 7+1=8 Select Curso 2002-2003 - Redes (IS20) -Capítulo 5
Programa: • Actúa como servidor: accepta 2 conexiones e inmediatamente ejecuta select para determinar la conexión por donde llegán antes los datos • PUERTO SERVIDOR 7000 • Crea dos conexiones sc0, sc1 Socket -> bind -> 2 accept (2 clientes) • Sólo se podrán conectar Inicialización de vector de bit usando FD_ZERO • Se pone a 1 los dos descriptores sc0,sc1 para monitorizarlos • Ponemos un tiempo de tv para el desbloqueo aunque no lo usamos ponemos NULL: siempre bloqueado hasta evento • Ejecutamos select: nos devuelve un entero que indica si hay o no descriptores para ser leídos • Si se desbloquea por llegada de algo será positivo • Si se desbloquea por timeout devuelve cero • Testeo retval!=0 • Miro si bit asociado al sc0 está a 1 • Si, escribimos mensaje “datos en descriptor del primer socket” • No, “datos en el segundo socket • Cerrar socket y acabar Select Curso 2002-2003 - Redes (IS20) -Capítulo 5
Funcionamiento: • Escribir programa select.c, compilar y ejecutar (sin argumentos) • Ejecutar dos clientes que quieran mandar cosas al servidor • telnet labtecxx.act.uji.es 7000 (ejecutar en dos shells diferentes) • El primero en que escriba algo y pulse ENTER desbloqueara a select y se imprimira el mensaje. Modificación: • Cambiar o añadir lo necesario para que el servidor con dos conexiones • si recibe algo por sc0 lo envíe (escriba) en sc1 • si recibe algo por sc1 lo envíe (escriba) en sc0 while (1) { FD_ZERO.... ........... Else printf(“No hay datos\n”); } Al ejecutar lo que envío por cliente 0 se escribe en cliente 2 y viceversa Select Curso 2002-2003 - Redes (IS20) -Capítulo 5
Utilidad: • Por ejemplo tres redes conectadas por routers • Quiero comunicar la de un extremo con el otro extremo pero está es una red privada • No permitirá conexiones de entrada desde internet (SEGURIDAD) Solución: • Usar un servidor en la red intermedia de forma que las conexiones de las redes extremas son de salida de las mismas y entrada a la red central y no se viola la seguridad Select Curso 2002-2003 - Redes (IS20) -Capítulo 5