Sin t - PowerPoint PPT Presentation

About This Presentation
Title:

Sin t

Description:

Title: Sin t tulo de diapositiva Author: MERCEDES Last modified by: Carlos y Mercedes Created Date: 1/12/2003 2:09:12 PM Document presentation format – PowerPoint PPT presentation

Number of Views:27
Avg rating:3.0/5.0
Slides: 28
Provided by: mercedes
Category:
Tags: privada | sin | virtual

less

Transcript and Presenter's Notes

Title: Sin t


1
Redes (IS20)Ingeniería Técnica en Informática de
Sistemas
http//www.icc.uji.es
Práctica 2- Comunicación de procesos mediante
sockets
1. Protocolos de red IP 2. Protocolos de
transporte UDP, TCP 3. Servidor 4. Cliente
ÍNDICE
2
  • Queremos realizar comunicaciones entre varios
    procesos que pueden tener ubicación en diferentes
    máquinas
  • Usamos para ello los servicios que ofrece el
    sistema operativo (llamadas) realizando programas
    en C
  • Porqué en C?
  • Es un lenguaje más próximo al estudiante
  • El tipo de comunicación que queremos realizar es
    sencilla de programar
  • Puestos a usar un lenguaje, usamos el que ya
    conocemos
  • La implementación en otro lenguaje se hará
    prácticamente adaptando las llamadas
    correspondientes en dicho lenguaje
  • El en boletín de prácticas hay una introducción
    al protocolo de red IP.
  • Supondremos que existe este protocolo el cual
    permite comunicarse con una cierta garantía
  • Las máquinas identificadas mediante una dirección
    (dirección IP) formada por 4 números separados
    por puntos
  • Ejemplo 150.128.40.100 nuvol
  • 150.128.49.69 máquina de la red docente
    conectado LAN

1. El protocolo de red IP
3
  • 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
4
  • 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
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
6
  • 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
7
  • 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 virtualSistema 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
8
  • 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
9
  • SERVIDOR
  • Pide un socket al SO (punto o puerto de conexión
    a un proceso)
  • Llamada al sistema
  • ssocket(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
10
  • SERVIDOR
  • Tabla para guardar peticiones pendientes
  • Llamada al sistema
  • estadolisten(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 socketaccept(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
11
  • CLIENTE
  • Pide un socket al SO (punto o puerto de conexión
    a un proceso)
  • Llamada al sistema
  • rsocket(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
12
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
13
  • 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
14
  • 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
15
  • 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
    reglas?Está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
16
  • 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 ltltENTERgtgt
  • ---- texto ltltENTERgtgt
  • . Punto que indica final mensaje
  • ltltENTERgtgt
  • 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
17
  • 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ónimos?responsabilidad
  • Veamos el problema de envío de correo
  • Qué hará el cliente, open pasivo o activo?

SMTP
18
  • Análisis del programa
  • Comprobación de número de argumentos argc (número
    de argumentos 1)
  • Cliente crea conexión,
  • ssocket(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
19
  • 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(bufferleidos, \0) termina la cadena
    leída (longlt256bytes)
  • Printf para ver lo que hemos leído (mensaje del
    servidor) qué vemos?
  • Formar el string que queremos enviar (cadena)
    textoterminació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
20
  • ENVIAR MAIL
  • Formar el string que queremos enviar (cadena)
    textoterminació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 ltltENTERgtgt
  • ---- texto ltltENTERgtgt
  • . Punto que indica final mensaje
  • ltltENTERgtgt
  • Leo respuesta servidor y la imprimo qué vemos?
  • DESPEDIDA
  • Formar el string que queremos enviar (cadena)
    textoterminació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
21
  • 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
22
Próxima sesión de prácticas Problema de conexión
simultanea de un Host (con 2 tarjetas de red) a 2
ordenadores
23
  • 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
24
  • 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ún?espacio de
    memoria compartida?requiere semáforo
  • Otra solución usar threads procesos con memoria
    compartida, necesito un semáforo

Select
25
  • 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
26
  • 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 718

Select
27
  • 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 -gt
    bind -gt 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
28
  • 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
29
  • 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
Write a Comment
User Comments (0)
About PowerShow.com