Módulo 02 La Capa de Aplicaciones (Pt. 2)

1 Módulo 02 La Capa de Aplicaciones (Pt. 2) ...
Author: Belén Álvarez Cárdenas
0 downloads 3 Views

1 Módulo 02 La Capa de Aplicaciones (Pt. 2)

2 Copyright Copyright © 2010-2017 A. G. StankeviciusSe asegura la libertad para copiar, distribuir y modificar este documento de acuerdo a los términos de la GNU Free Documentation License, versión 1.2 o cualquiera posterior publicada por la Free Software Foundation, sin secciones invariantes ni textos de cubierta delantera o trasera. Una copia de esta licencia está siempre disponible en la página La versión transparente de este documento puede ser obtenida de la siguiente dirección: Redes de Computadoras - Mg. A. G. Stankevicius

3 Contenidos Servicios que requiere la capa de aplicaciones.Protocolos de la capa de aplicaciones. HTTP. SMTP, POP e IMAP. DNS. Arquitectura de las aplicaciones p2p. Programación basada en sockets. Redes de Computadoras - Mg. A. G. Stankevicius

4 Directorio de nombres Uno de los requerimientos de las aplicaciones de red es poder identificar unívocamente a cualquier computadora dentro de la red. A nivel de hardware se usa una cadena de 32 bits denominada dirección IP. Para facilitar la comunicación de direcciones IP se suele cortar la cadena en cuatro partes de 8 bits, expresadas en decimal y separadas por un punto. Aún con esa convención, recordar múltiples direcciones IP se vuelve bastante complicado... Redes de Computadoras - Mg. A. G. Stankevicius

5 Directorio de nombres Los humanos sin duda retenemos con más facilidad nombres simbólicos concretos. Por caso, cs.uns.edu.ar. Necesitamos un servicio que nos permita convertir nombre simbólicos en direcciones IP. Características que debería tener este servicio: El sistema de directorio de nombres de internet necesita ser confiable y eficiente. La base de datos resultante es altamente dinámica, ya que se producen altas y bajas constantemente. Redes de Computadoras - Mg. A. G. Stankevicius

6 Sistema centralizado La solución inmediata sería ensayar alguna forma de sistema centralizado. El archivo /etc/hosts de los sistemas UNIX. No obstante: Poca tolerancia a fallos. Volumen de tráfico astronómico. Imposible estar cerca de todas partes a la vez. Imposible mantener al día de la base de datos. Alto costo para escalar el sistema. Redes de Computadoras - Mg. A. G. Stankevicius

7 Domain Name System La solución adoptada para este complicado problema es hacer uso de una base de datos distribuida junto con el correspondiente protocolo de la capa de aplicaciones. Se denomina DNS (Domain Name System). La base de datos distribuida está compuesta por una jerarquía de servidores de dominio. Computadoras, routers y servidores de dominio se comunican entre sí usando el protocolo DNS. La complejidad se lleva a la frontera de la red. Redes de Computadoras - Mg. A. G. Stankevicius

8 Domain Name System Rol central:Mapear nombres simbólicos a direcciones IP. Roles secundarios: Implementar sinónimos simbólicos. Nótese que para esto hace falta distinguir a uno de los sinónimos como el nombre canónico. Usar estos sinónimos en los servidores de correo. Posibilitar un esquema de distribución de carga (asociando las direcciones IP de múltiples servidores a un mismo nombre simbólico). Redes de Computadoras - Mg. A. G. Stankevicius

9 Domain Name System Ningún servidor conoce la totalidad del mapeo bajo este esquema distribuido. El servidor de dominio se denomina categórico cuando conoce de primera mano el mapeo para un determinado conjunto de computadoras. Los servidores, categóricos o no, se organizan jerárquicamente en función de la cantidad de computadoras a su cargo. Los servidores en el tope de la jerarquía se denominan servidores raíz. Redes de Computadoras - Mg. A. G. Stankevicius

10 Jerarquía de servidores. .com .org .edu .gov ... .ar ... .za google.com amazon.com com.ar org.ar edu.ar gov.ar se denomina dominio a cada subárbol de la jerarquía las hojas son computadoras concretas uns.edu.ar unlp.edu.ar se denomina zona a cada porción asignada a un servidor autoritativo cs.uns.edu.ar Redes de Computadoras - Mg. A. G. Stankevicius

11 Servidores raíz Hay 13 servidores raíz en todo el mundo:Redes de Computadoras - Mg. A. G. Stankevicius

12 Entidades a cargo Redes de Computadoras - Mg. A. G. Stankeviciusk RIPE Londres (y otros 17 lugares) e NASA Mt View, CA f Internet Software C., Palo Alto, CA (y otros 48 lugares) i Netnod, Estocolmo (y otros 37 lugares) m WIDE, Tokio (y otros 5 lugares) a Verisign, Los Angeles, CA (y otros 5 lugares) b USC-ISI, Marina del Rey, CA l ICANN, Los Angeles, CA (y otros 41 lugares) c Cogent, Herndon, VA (y en otros 5 lugares) d U Maryland College Park, MD g US DoD Columbus, OH (y en otros 5 lugares) h ARL Aberdeen, MD j Verisign, Dulles, VA (y en otros 69 lugares) Redes de Computadoras - Mg. A. G. Stankevicius

13 DNS en la actualidad La carga en los servidores raíz creció de gran forma con el advenimiento de la web. Los dominios de primer nivel (top-level domain) se solían clasificar en dos grandes categorías: Por un lado están los dominios de primer nivel genéricos (.com, .edu, .gov, .org, .mil y .net). Por otra parte están los dominios de primer nivel de países (por caso, .ar, .br, .cl, etc.). En agosto de 2000 los servidores raíz pudieron delegar los dominios de primer nivel genéricos. Redes de Computadoras - Mg. A. G. Stankevicius

14 DNS en la actualidad En la actualidad los dominios de primer nivel se clasifican en múltiples categorías. Dominios sin una organización detrás: .com, .edu, .gov, .org, .mil y .net .biz (para las empresas) .info (información en general) .name (para personas individuales) Redes de Computadoras - Mg. A. G. Stankevicius

15 DNS en la actualidad Dominios con una organización detrás:.aero (industria aeronáutica) .coop (cooperativas) .museum (museos) .travel (industria del turismo) Dominios nuevos que recién comienzan: .mobi (dominios optimizados para celulares) .tel (relativo a la industria telefónica) Redes de Computadoras - Mg. A. G. Stankevicius

16 DNS en la actualidad La situación en Argentina es de primer nivel, la gestión de los dominios .ar está a cargo de la organización nic.ar dependiente del gobierno. Por caso, hasta el año 2013 el registro y la delegación de los dominios .com.ar era gratuita, una excelente medida que propendía a fomentar la adopción de estas tecnologías. En la actualidad si bien se cobra un costo fijo por la mayoría de los trámites, el mismo sigue siendo relativamente accesible. Por caso, $220 por una renovación de dominio. Redes de Computadoras - Mg. A. G. Stankevicius

17 Domain Name System Cada red local de computadoras cuenta con un servidor de dominio por defecto. Las computadoras de la red acceden en primer lugar al servidor por defecto. Si el servidor local no fuera capaz de resolver una consulta, se accederá a uno de los servidores raíz. El servidor raíz contacta al servidor categórico correspondiente, a fin de poder acercarle al servidor local el mapeo que no había podido resolver. Cada zona cuenta con su respectivo conjunto de servidores categóricos (principal y secundario). Redes de Computadoras - Mg. A. G. Stankevicius

20 Consultas iteradas El servidor raíz tiene dos opciones a la hora de contestar a una consulta que no haya podido resolver apelando a sus propios registros: Por un lado puede encargarse él mismo de averiguar cómo responder a la consulta. Esta modalidad se denomina resolución recursiva de consultas. Otra alternativa es contestar simplemente “no lo sé, pero este servidor quizás si lo sepa”. Esta modalidad se denomina resolución iterada de consultas. Redes de Computadoras - Mg. A. G. Stankevicius

22 Cache DNS local Toda vez que un servidor toma conocimiento de un nuevo mapeo actualiza su cache individual. Las entradas de este cache cuentan con un atributo de tiempo de vida, es decir, pasado un cierto tiempo desaparecen. Los mecanismos de actualización de la base de datos de registros y de propagación de estas modificaciones están especificados por un grupo de trabajo de la IETF. Este grupo de trabajo produjo el RFC 2136. Redes de Computadoras - Mg. A. G. Stankevicius

23 Relación entre nombres e IPsEl sistema DNS tiene que contemplar un conjunto bastante flexible de relaciones entre nombres simbólicos y direcciones IP: El caso básico es la relación uno-a-uno, por ejemplo cs.uns.edu.ar y También existe el caso muchos-a-uno, por caso pop3.cs.uns.edu.ar y smtp.cs.uns.edu.ar. Finalmente tenemos el caso uno-a-muchos, por caso google.com está asociado a un conjunto bastante grande de direcciones IP. Redes de Computadoras - Mg. A. G. Stankevicius

24 (nombre, valor, tipo, tiempo de vida)Registros DNS La base de datos distribuida DNS se compone de un conjunto de registros DNS. Los registros DNS son meras tuplas: (nombre, valor, tipo, tiempo de vida) El rol de cada uno de los campos difiere en función del valor contenido en el campo tipo. Para el tipo A, nombre contiene el nombre simbólico de una computadora y valor su dirección IP. Redes de Computadoras - Mg. A. G. Stankevicius

25 Registros DNS Para el tipo NS, nombre contiene un nombre de dominio y valor contiene la dirección del servidor autoritativo para ese dominio. Para el tipo CNAME, nombre contiene un alias simbólico que será asociado a un cierto nombre canónico y valor contiene ese nombre canónico. Para el tipo MX, nombre contiene un dominio y valor contiene la dirección del servidor de mail que corresponde a ese dominio. Redes de Computadoras - Mg. A. G. Stankevicius

26 El protocolo DNS El protocolo DNS usa un formato de mensaje fijo para consultas y respuestas. Está especificado formalmente en el RFC 1034/5. identificación flags 12 bytes cant. de consultas cant. de respuestas cant. de resp. autorit. cant. de resp. adicionales consultas respuestas tamaño variable respuestas categóricas respuestas adicionales Redes de Computadoras - Mg. A. G. Stankevicius

27 El protocolo DNS Significado de los distintos campos:El encabezado tiene un tamaño fijo de de 12 bytes. El cuerpo es de un tamaño variable (pues depende de la cantidad de respuestas incluidas). El campo identificación contiene un valor de 16 bits con el cual se asocian las consultas a las respuestas. El campo flags permite indicar si se trata de una consulta o una respuesta, si se prefiere o si está disponible una respuesta recursiva, o si la respuesta es autoritativa. Redes de Computadoras - Mg. A. G. Stankevicius

28 El protocolo DNS Significado de los distintos campos (continúa):Cada consulta indica el tipo de registro buscado así como el valor del campo nombre en cuestión. Cada respuesta contiene el registro DNS deseado. Cada respuesta categóricas contiene el registro DNS de un servidor categórico. Cada respuesta adicional contiene información extra considerada de utilidad. Redes de Computadoras - Mg. A. G. Stankevicius

29 Incorporación de dominiosSupongamos que queremos arrancar una startup para desarrollar la próxima killer app… Registramos el dominio killerapp.com con un gestor (conocidos como DNS registrar). El gestor nos brinda el nombre y el IP del que será nuestro servidor categórico (primario y secundario) A su vez, inserta dos registros en el server TLD .com: (killerapp.com, dns1.killerup.com, NS, 86400) (dns1.killerup.com, , A) Redes de Computadoras - Mg. A. G. Stankevicius

30 Vectores de ataque Cabe señalar que la jerarquía DNS constituye en principio un punto único de fallo de internet. Como tal, ha resultado objeto de diferentes intentos de ataques, con diverso grado de éxito. Ataques tipo DDoS a los servidores raíz: La idea es tapar con pedidos espurios a uno o más de uno de los servidores raíz. Al día de la fecha nunca funcionó… ...no obstante, ¡los servidores raíz están bajo estricta vigilancia armada las 24 horas del día! Redes de Computadoras - Mg. A. G. Stankevicius

31 Vectores de ataque Ataques tipo DDoS a los servidores TLD:¡Potencialmente más peligroso que el anterior! Ataques de redirección: Variante man-in-the-middle, interceptar y adulterar las consultas y las respuesta a mitad de camino. Variante envenenamiento: contaminar las respuestas almacenadas en el cache de los servidores. Ataques tipo DDoS causados por el DNS: Enviar en cantidad consultas espurias con el IP de origen adulterado. Redes de Computadoras - Mg. A. G. Stankevicius

32 Confiabilidad La alta replicación de la base de datos DNS aporta dos grandes beneficios: Mejora notablemente la confiabilidad. Permite implementar alguna forma de balance de carga a fin de obtener un mejor desempeño. Se utiliza UDP como protocolo de transporte. Si hace falta integridad, se debe implementar a nivel de la aplicación. ¿Por qué razón no se usa TCP? Redes de Computadoras - Mg. A. G. Stankevicius

33 Herramientas DNS El programa dig es una de las herramientas más usadas para diagnosticar errores en la configuración de los servidores DNS. El permite enviar la consulta a un servidor en particular. El parámetro +norecurse permite recorrer a mano la jerarquía de servidores de dominio. El parámetro +trace permite inspeccionar las respuestas que recibe el servidor de dominio por defecto al resolver la consulta efectuada. Redes de Computadoras - Mg. A. G. Stankevicius

34 Arquitectura p2p pura Características de las aplicaciones que hacen uso del estilo arquitectónico p2p puro: No requiere de servidores todo el tiempo en línea. Las computadoras en la frontera de la red se comunican directamente entre sí. Los pares se conectan y desconectan de la red p2p todo el tiempo, a veces modificando su dirección IP. Analizaremos principalmente dos aspectos, la distribución de contenidos y la búsqueda de información en redes p2p. Redes de Computadoras - Mg. A. G. Stankevicius

36 Distribución de contenidosAnálisis (modelo cliente servidor): El servidor debe enviar secuencialmente n veces el documento de f bits a cada uno de los clientes. Esto es, insume alrededor de nf/us segundos. A un determinado cliente i le toma f/di segundos el descargar el documento. En síntesis, el tiempo que toma la distribución del documento bajo este modelo es: Tc-s = máx( nf/us, f/mín(di) ) Redes de Computadoras - Mg. A. G. Stankevicius

37 Distribución de contenidosAnálisis (modelo p2p): El servidor como mínimo debe enviar enviar al conjunto de clientes una copia entera de documento. Esto es, insume alrededor de f/us segundos. A un determinado cliente i le toma f/di segundos el descargar el documento. Los nf bits han de ser descargados de cualquier par, es decir, usando el ancho de banda agregado us+∑ui. Tp2p = máx( f/us, f/mín(di), nf/(us+∑ui) ) Redes de Computadoras - Mg. A. G. Stankevicius

38 Distribución de contenidosRedes de Computadoras - Mg. A. G. Stankevicius

40 Protocolo Bit Torrent Características del protocolo:El torrent se divide en piezas de 256 KB. Al sumarse al torrent se debe registrar con el tracker, quien le acerca el listado de pares activos. Cada par se conecta con un subconjunto de los pares activos (denominados vecinos). Al mismo tiempo que descarga nuevas piezas va compartiendo las que ya tiene con sus vecinos. Los pares pueden ingresar o salir del torrent a voluntad y en cualquier momento. Redes de Computadoras - Mg. A. G. Stankevicius

41 Obtención de las piezasEn todo momento, los distintos pares cuentan con distintos subconjuntos de piezas. Periódicamente cada par consulta a sus vecinos acerca del listado de piezas que poseen. Cada par al recibir esa información de sus vecinos procede a encargar le envíen las piezas que le estén faltando. Las piezas faltantes se ordenan en función de su rareza, encargando primero las menos difundidas. Redes de Computadoras - Mg. A. G. Stankevicius

42 Envío de las piezas Para determinar que solicitudes priorizar, los pares ordenan a sus vecinos en función del ancho de banda con el cual éstos le estén enviando piezas (favor con favor se paga). Cada 10 segundos se eligen los mejores cuatro vecinos y se atiende sus primeros pedidos. En simultáneo, cada 30 segundos se elige otro par al azar y se le envía lo que necesite. La idea es agregarle dinamismo a la red de pares. Redes de Computadoras - Mg. A. G. Stankevicius

43 ¡al compartir más se descarga más!Favor con favor se paga Supongamos que Andrea elige al azar a Bruno. Seguramente se convertirá en uno de los mejores vecinos de Bruno. De ser así, Bruno le empezará a subir a Andrea, y quizás llegue a ser uno de sus vecinos preferido. Bruno ¡al compartir más se descarga más! Andrea Redes de Computadoras - Mg. A. G. Stankevicius

44 Base de datos simple Una base de datos en su versión más simple es en esencia un mapeo entre claves y valores: Clave: apellido y nombre; Valor: número de teléfono Clave: título de la película; Valor: dirección IP clave valor Palotes, Juan Dellos D'etal, Fulano Mengano, Evaristo ……. ……… Zultano, Cástulo Redes de Computadoras - Mg. A. G. Stankevicius

45 Tabla hash Cualquier clave puede ser indexada como si se tratara de una clave numérica: clave numérica = hash(clave original) clave original clave numérica valor Palotes, Juan Dellos D'etal, Fulano Mengano, Evaristo ……. ……… Zultano, Cástulo Redes de Computadoras - Mg. A. G. Stankevicius

46 Distributed Hash TableUn aspecto nada trivial en las aplicaciones p2p es la representación de bases de datos. En contraste, en una aplicación cliente-servidor, podemos hacer uso del primer DMBS que se nos cruce por delante. El mecanismo mayormente utilizado se denomina Distributed Hash Table (DHT). La DHT hace las veces de base de datos distribuida. Se compone de un conjunto de tuplas (clave, valor) repartidas entre los pares. Redes de Computadoras - Mg. A. G. Stankevicius

47 Distributed Hash TableCualquier par puede consultar la base de datos mediante una clave. La DHT retornará el valor asociado a esa clave. Para resolver la consulta, se intercambia un pequeño número de mensajes entre los pares. Cada par necesita conocer sólo un pequeño número de su pares. El algoritmo tolera que los pares entren y salgan de la red p2p en cualquier momento. Redes de Computadoras - Mg. A. G. Stankevicius

48 Identificadores DHT Los pares de la red p2p se identifican a través de un entero en el rango [0, 2n-1]. Es decir, cada par se caracteriza mediante n bits. A su vez, las claves de las tuplas tienen que ser valores enteros tomados del mismo rango. Como vimos, si las claves no fueran valores enteros, se puede simplemente calcular el valor de hash sobre la misma. Redes de Computadoras - Mg. A. G. Stankevicius

49 Asignación de claves a paresEl problema central al implementar una DHT es cómo repartir las tuplas entre los pares. Como pares y claves comparten el mismo rango, se puede ensayar asignar cada tupla al par cuyo identificador sea el más próximo a su clave. En los siguientes ejemplos consideraremos como par más próximo al sucesor inmediato. Por ejemplo, con n = 4, para los pares 1, 3, 4, 5, 8, 10, 12 y 14 definimos que para la clave 8 el sucesor inmediato es 8, pero para 13 es 14 y para 15 es 1. Redes de Computadoras - Mg. A. G. Stankevicius

50 DHT circular Cada par sólo conoce los pares adyacentes.Se conforma una red superimpuesta (overlay). 1 3 4 5 8 10 12 14 Redes de Computadoras - Mg. A. G. Stankevicius

51 DHT circular La resolución de una consulta insume O(n) mensajes para una red de n pares. ¿quién se encarga de la tupla cuya clave es “1101”? 1 ¡yo! 14 3 ¿1101? ¿1101? 4 12 esta consulta insumió 6 mensajes + 1 respuesta ¿1101? ¿1101? 5 ¿1101? 10 ¿1101? 8 Redes de Computadoras - Mg. A. G. Stankevicius

52 DHT circular con atajosCada nodo registra la dirección de los nodos antecesor, sucesor y atajos. Con log n atajos, se reduce a O(log n) mensajes. ¿quién se encarga de la tupla cuya clave es “1101”? 1 ¡yo! 14 3 4 12 la consulta ahora insumió 2 mensajes + 1 respuesta 5 10 8 Redes de Computadoras - Mg. A. G. Stankevicius

53 Actualización del DHT Dada la naturaleza dinámica del conjunto de pares, también se debe contemplar la incorporación y la eliminación de pares: Para esto, cada par registra no sólo uno sino dos antecesores y dos sucesores. Periódicamente contacta al antecesor y al sucesor inmediato para ver si siguen en línea. En caso de no contestar, actualiza los sucesores y antecesores de manera apropiada. ¿Cómo se resolverá la incorporación de nuevos pares? Redes de Computadoras - Mg. A. G. Stankevicius

54 Actualización del DHT El nodo 4 detecta que 5 no contesta, hace 8 su sucesor inmediato y al sucesor de 8 su segundo sucesor. El nodo 8 también hace lo propio. 1 14 3 4 12 5 10 8 Redes de Computadoras - Mg. A. G. Stankevicius

56 Sockets La API sockets fue introducida en la versión 4.1 del UNIX BSD.Los sockets son creados, utilizados y destruidos por las aplicaciones. Hacen uso del estilo arquitectónico cliente-servidor. Pone a disposición del programador dos servicios de transporte: Transporte no confiable de datagramas. Transporte confiable de un flujo de bytes. Redes de Computadoras - Mg. A. G. Stankevicius

57 Ejemplo de aplicación Se desea implementar una aplicación cliente servidor con las siguientes características: El cliente lee lo ingresado por el usuario en el teclado y lo envía al servidor a través de un socket. El servidor lee una línea de su socket y procede a mayusculizarla. Luego, el servidor la envía de vuelta al cliente. El cliente recibe la respuesta del servidor y finalmente la muestra por pantalla. Redes de Computadoras - Mg. A. G. Stankevicius

58 Programación c/sockets UDPEl transporte UDP no hace uso de una conexión permanente entre cliente y servidor. No requiere inicialización de la conexión. Al mandar cada datagrama se debe indicar explícitamente el IP y puerto destino. El receptor de un datagrama debe tomar nota del IP y puerto de origen con el objeto de poder responder al mismo. Debemos recordar que UDP no asegura la transmisión ni el orden de los datagramas. Redes de Computadoras - Mg. A. G. Stankevicius

59 Bosquejo de interacciónServer ( :12345) Cliente ( ) crea un socket atado al puerto y queda a la espera de requerimientos serverSocket = socket(AF_INET, SOCK_DGRAM) crea el socket del cliente ClientSocket = socket(AF_INET, SOCK_DGRAM) crea un requerimiento con la dirección destino , Puerto y envía la envía usando clientSocket lee un nuevo requerimiento desde serverSocket escribe el mensaje de respuesta indicando el IP y el puerto de origen en serverSocket lee la respuesta desde clientSocket cierra el clientSocket Redes de Computadoras - Mg. A. G. Stankevicius

60 Cliente UDP en Python (serverName, serverPort))incluimos la librería Socket de python from socket import * serverName = ' ' serverPort = 12345 clientSocket = socket(AF_INET, SOCK_DGRAM) message = input('Ingrese un string: ') clientSocket.sendto(bytes(message,'utf-8'), (serverName, serverPort)) modifiedMessage, serverAddress = \ clientSocket.recvfrom(2048) print ('Recibido del servidor:', modifiedMessage.decode('utf-8')) clientSocket.close() crea un socket para datagramas leemos del teclado le agregamos nombre y puerto y lo enviamos por el socket recibimos la respuesta generadas por el servidor muestra la respuesta por pantalla y cierra el socket Redes de Computadoras - Mg. A. G. Stankevicius

62 Programación con sockets TCPPasos involucrados en la interacción estándar entre cliente y servidor: El proceso servidor debe estar corriendo al momento de iniciar la comunicación. El servidor tiene que haber creado con anterioridad un socket especial que acepte los requerimientos por parte de los clientes. El cliente crea un nuevo socket estándar TCP especificando la dirección IP y el puerto deseado. Al crear este socket se establece la conexión TCP. Redes de Computadoras - Mg. A. G. Stankevicius

63 Programación con sockets TCPContinúa: En el momento de recibir una nueva conexión, el servidor crea un segundo socket a través del cual se comunicará con ese cliente en particular. De esta manera, un servidor puede atender múltiples requerimientos de distintos clientes en simultáneo. Los clientes se distinguen a través del número de puerto de origen que indican en sus requerimientos. Redes de Computadoras - Mg. A. G. Stankevicius

64 Bosquejo de interacciónServer ( :54321) crea un socket en el puerto y queda a la espera de requerimientos serverSocket = socket(); Cliente ( ) inicialización de la conexión TCP espera el arribo de un nuevo requerimiento connectionSocket = serverSocket.accept(); crea un socket y lo conecta al IP , puerto 54321 clientSocket = socket(); envía un nuevo requerimiento usando clientSocket lee el nuevo requerimiento desde connectionSocket escribe el mensaje de respuesta en connectionSocket lee la respuesta desde clientSocket cierra a connectionSocket cierra a clientSocket Redes de Computadoras - Mg. A. G. Stankevicius

65 Cliente TCP en Python Redes de Computadoras - Mg. A. G. Stankeviciusfrom socket import * serverName = ' ' serverPort = 54321 clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((serverName,serverPort)) sentence = input('Ingrese un string: ') clientSocket.send(bytes(sentence, 'utf-8')) modifiedMessage = clientSocket.recv(1024) print ('Recibido del servidor: ', modifiedMessage.decode('utf-8')) clientSocket.close() crea un socket TCP lo conecta al servidor usando el puerto 54321 no hace falta indicar IP o puerto destino Redes de Computadoras - Mg. A. G. Stankevicius

66 Servidor TCP en Python Redes de Computadoras - Mg. A. G. Stankeviciuscrea un socket de bienvenida from socket import * serverSocket = socket(AF_INET,SOCK_STREAM) serverSocket.bind((' ',54321)) serverSocket.listen(1) print ('El servidor está listo...') while 1: connectionSocket, addr = serverSocket.accept() sentence = connectionSocket.recv(1024) capitalizedSentence = sentence.upper() connectionSocket.send(capitalizedSentence) connectionSocket.close() el servidor empieza a recibir requerimientos ciclo infinito el servidor ante el arribo de un requerimiento, crea un nuevo socket se leen bytes del socket (pero ni IP ni puerto de origen, ¡no hace falta!) cierra el socket del cliente (no así el de bienvenida) Redes de Computadoras - Mg. A. G. Stankevicius

67 ¿Preguntas? Redes de Computadoras - Mg. A. G. Stankevicius