1 Clase de Sockets en lenguaje C Prof. Ricardo González.

67
1 Clase de Sockets en lenguaje C Prof. Ricardo González

Transcript of 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

Page 1: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

1

Clase de Sockets en lenguaje C

Prof Ricardo Gonzaacutelez

2

Modelo de Programacioacuten Cliente-Servidor Cliente un programa que enviacutea

peticiones Servidor un programa que ofrece un

servicio que satisface peticiones que provienen de una serie de clientes

La mayoriacutea de servicios de la Internet tales como la Web ftp o telnet estaacuten basados en el modelo cliente-servidor

3

Modelo de Programacioacuten Cliente-Servidor

Servidor

ClienteSolicitud

Respuesta

Conexioacuten

4

Modelo de Programacioacuten Cliente-Servidor y los Sockets La mayoriacutea de las comunicacioacuten ente procesos siguen

el esquema ClienteServidor donde el Cliente y el Servidor son dos procesos independientes que cooperan

El Servidor y el Cliente intercambian mensajes a traveacutes de la red usando un API comuacuten de Sockets

5

Modelo de Programacioacuten Cliente-Servidor y los SocketsEjemplos de programas Web browsers (Navegadores) ftp telnet sshiquestCoacutemo un cliente encuentra a su Servidor Mediante una tupla de dos componentes La direccioacuten IP identifica el host o computador El puerto (well-known) identifica el servicio y de forma implicita al

proceso que ofrece dicho servicioEjemplos de puerto bien conocidos (well know ports) Puerto 7 Echo server Puerto 23 Telnet server Puerto 25 Mail server Puerto 80 Web server

6

Protocolos de Comunicacioacuten Protocolos Orientados a Conexioacuten

7

Protocolos de Comunicacioacuten

Protocolos No Orientados a Conexioacuten

8

Protocolos de Comunicacioacuten

TCPProvee una conexioacuten confiable para transferir

bytes entre dos procesos que pueden estar en equipos distitos

UDPProvee una transferencia no fiable de un

grupo de bytes entre dos procesos

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 2: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

2

Modelo de Programacioacuten Cliente-Servidor Cliente un programa que enviacutea

peticiones Servidor un programa que ofrece un

servicio que satisface peticiones que provienen de una serie de clientes

La mayoriacutea de servicios de la Internet tales como la Web ftp o telnet estaacuten basados en el modelo cliente-servidor

3

Modelo de Programacioacuten Cliente-Servidor

Servidor

ClienteSolicitud

Respuesta

Conexioacuten

4

Modelo de Programacioacuten Cliente-Servidor y los Sockets La mayoriacutea de las comunicacioacuten ente procesos siguen

el esquema ClienteServidor donde el Cliente y el Servidor son dos procesos independientes que cooperan

El Servidor y el Cliente intercambian mensajes a traveacutes de la red usando un API comuacuten de Sockets

5

Modelo de Programacioacuten Cliente-Servidor y los SocketsEjemplos de programas Web browsers (Navegadores) ftp telnet sshiquestCoacutemo un cliente encuentra a su Servidor Mediante una tupla de dos componentes La direccioacuten IP identifica el host o computador El puerto (well-known) identifica el servicio y de forma implicita al

proceso que ofrece dicho servicioEjemplos de puerto bien conocidos (well know ports) Puerto 7 Echo server Puerto 23 Telnet server Puerto 25 Mail server Puerto 80 Web server

6

Protocolos de Comunicacioacuten Protocolos Orientados a Conexioacuten

7

Protocolos de Comunicacioacuten

Protocolos No Orientados a Conexioacuten

8

Protocolos de Comunicacioacuten

TCPProvee una conexioacuten confiable para transferir

bytes entre dos procesos que pueden estar en equipos distitos

UDPProvee una transferencia no fiable de un

grupo de bytes entre dos procesos

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 3: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

3

Modelo de Programacioacuten Cliente-Servidor

Servidor

ClienteSolicitud

Respuesta

Conexioacuten

4

Modelo de Programacioacuten Cliente-Servidor y los Sockets La mayoriacutea de las comunicacioacuten ente procesos siguen

el esquema ClienteServidor donde el Cliente y el Servidor son dos procesos independientes que cooperan

El Servidor y el Cliente intercambian mensajes a traveacutes de la red usando un API comuacuten de Sockets

5

Modelo de Programacioacuten Cliente-Servidor y los SocketsEjemplos de programas Web browsers (Navegadores) ftp telnet sshiquestCoacutemo un cliente encuentra a su Servidor Mediante una tupla de dos componentes La direccioacuten IP identifica el host o computador El puerto (well-known) identifica el servicio y de forma implicita al

proceso que ofrece dicho servicioEjemplos de puerto bien conocidos (well know ports) Puerto 7 Echo server Puerto 23 Telnet server Puerto 25 Mail server Puerto 80 Web server

6

Protocolos de Comunicacioacuten Protocolos Orientados a Conexioacuten

7

Protocolos de Comunicacioacuten

Protocolos No Orientados a Conexioacuten

8

Protocolos de Comunicacioacuten

TCPProvee una conexioacuten confiable para transferir

bytes entre dos procesos que pueden estar en equipos distitos

UDPProvee una transferencia no fiable de un

grupo de bytes entre dos procesos

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 4: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

4

Modelo de Programacioacuten Cliente-Servidor y los Sockets La mayoriacutea de las comunicacioacuten ente procesos siguen

el esquema ClienteServidor donde el Cliente y el Servidor son dos procesos independientes que cooperan

El Servidor y el Cliente intercambian mensajes a traveacutes de la red usando un API comuacuten de Sockets

5

Modelo de Programacioacuten Cliente-Servidor y los SocketsEjemplos de programas Web browsers (Navegadores) ftp telnet sshiquestCoacutemo un cliente encuentra a su Servidor Mediante una tupla de dos componentes La direccioacuten IP identifica el host o computador El puerto (well-known) identifica el servicio y de forma implicita al

proceso que ofrece dicho servicioEjemplos de puerto bien conocidos (well know ports) Puerto 7 Echo server Puerto 23 Telnet server Puerto 25 Mail server Puerto 80 Web server

6

Protocolos de Comunicacioacuten Protocolos Orientados a Conexioacuten

7

Protocolos de Comunicacioacuten

Protocolos No Orientados a Conexioacuten

8

Protocolos de Comunicacioacuten

TCPProvee una conexioacuten confiable para transferir

bytes entre dos procesos que pueden estar en equipos distitos

UDPProvee una transferencia no fiable de un

grupo de bytes entre dos procesos

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 5: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

5

Modelo de Programacioacuten Cliente-Servidor y los SocketsEjemplos de programas Web browsers (Navegadores) ftp telnet sshiquestCoacutemo un cliente encuentra a su Servidor Mediante una tupla de dos componentes La direccioacuten IP identifica el host o computador El puerto (well-known) identifica el servicio y de forma implicita al

proceso que ofrece dicho servicioEjemplos de puerto bien conocidos (well know ports) Puerto 7 Echo server Puerto 23 Telnet server Puerto 25 Mail server Puerto 80 Web server

6

Protocolos de Comunicacioacuten Protocolos Orientados a Conexioacuten

7

Protocolos de Comunicacioacuten

Protocolos No Orientados a Conexioacuten

8

Protocolos de Comunicacioacuten

TCPProvee una conexioacuten confiable para transferir

bytes entre dos procesos que pueden estar en equipos distitos

UDPProvee una transferencia no fiable de un

grupo de bytes entre dos procesos

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 6: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

6

Protocolos de Comunicacioacuten Protocolos Orientados a Conexioacuten

7

Protocolos de Comunicacioacuten

Protocolos No Orientados a Conexioacuten

8

Protocolos de Comunicacioacuten

TCPProvee una conexioacuten confiable para transferir

bytes entre dos procesos que pueden estar en equipos distitos

UDPProvee una transferencia no fiable de un

grupo de bytes entre dos procesos

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 7: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

7

Protocolos de Comunicacioacuten

Protocolos No Orientados a Conexioacuten

8

Protocolos de Comunicacioacuten

TCPProvee una conexioacuten confiable para transferir

bytes entre dos procesos que pueden estar en equipos distitos

UDPProvee una transferencia no fiable de un

grupo de bytes entre dos procesos

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 8: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

8

Protocolos de Comunicacioacuten

TCPProvee una conexioacuten confiable para transferir

bytes entre dos procesos que pueden estar en equipos distitos

UDPProvee una transferencia no fiable de un

grupo de bytes entre dos procesos

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 9: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

9

Sockets

Los sockets son un API para la comunicacioacuten entre procesos que permiten que un proceso hable ( emita o reciba informacioacuten ) con otro proceso incluso estando en distintas maacutequinas

Un socket es al sistema de comunicacioacuten entre computadores lo que un buzoacuten o un teleacutefono es al sistema de comunicacioacuten entre personas un punto de comunicacioacuten entre dos agentes ( procesos o personas respectivamente ) por el cual se puede emitir o recibir informacioacuten La forma de referenciar un socket por los procesos implicados es mediante un descriptor del mismo tipo que el utilizado para referenciar archivos

Se podraacute realizar redirecciones de los archivos de ES estaacutendar (descriptores 01 y 2) a los sockets y asiacute combinar entre ellos aplicaciones de la red

Todo nuevo proceso creado heredaraacute por tanto los descriptores de sockets de su padre

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 10: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

10

SocketsProceso A Proceso B

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 11: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

11

Puerto

Compugravetador X Compugravetador Z

Proceso C

Proceso D

Proceso E

Proceso F

Proceso G

Proceso H

Proceso I

( direccioacuten puerto )

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 12: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

12

Sockets

Los pasos en general para comunicarse viacutea sockets son1 El servidor crea un socket cuyo nombre conocen otros procesos Abre una conexioacuten a un puerto

bien conocido Un puerto es un concepto loacutegico para saber a queacute proceso dirigir la peticioacuten del cliente

2 El cliente crea un socket sin nombre y pide una conexioacuten al socket del servidor (con el puerto bien conocido)

3 El servidor acepta la conexioacuten4 El cliente y el servidor intercambian informacioacuten

Cliente

Servidor

1)

Cliente

2)

X

Conectar a X

X

Cliente

3)

X

Servidor

ServidorCliente

4)

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 13: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

13

Comunicacioacuten mediante Socket

Para establecer una comunicacioacuten en red debemos conocer

1048708 Protocolo de comunicacioacuten (TCP o UDP) 1048708 Direccioacuten del emisor (direccioacuten IP + puerto) 1048708 Direccioacuten del receptor (direccioacuten IP + puerto)

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 14: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

14

Tipos de Servidores Seriales Seriales reciben la peticioacuten y hasta que no terminan con la misma no atienden una

nueva peticioacuten

for() listen for client request create a private two-way channel while (no error on communication channel) read request handle request close communication channel

Si el servidor es muy solicitado y las peticiones son largas (transferencia de archivos) los clientes tendraacuten que esperar para ser atendidos lo cual puede llegar a ocasionar inconvenientes

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 15: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

15

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el hijo maneja la peticioacuten del cliente mientras el padre sigue

oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Servidor Multithreaded es la estrategia de menor overhead El servidor crea un thread en su propio espacio de direcciones Es eficiente cuando las peticiones son pequentildeas El problema es que comparten un uacutenico espacio de direcciones y pudiera haber interferencia Si los threads son CPU bound y no son soportados por el kernel el servidor main thread pudiera no ejecutarse

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 16: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

16

Tipos de Servidores ConcurrentesPadre-Hijo (Servidor concurrente) el

hijo maneja la peticioacuten del cliente mientras el padre sigue oyendo requerimientos adicionales

for() listen for client request create a private two-way channel if (fork) handle the request exit else close the private channel clean up zombies

Cliente

Servidor

1)X

Cliente

2)

X

Servidor

Cliente

3)X

Servidor

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 17: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

17

Esquema general de la comunicacioacuten Cliente ServidorClient

1 Create a TCP socket

2 Establish connection

3 Communicate

4 Close the connection

Server

1 Create a TCP socket

2 Assign a port to socket

3 Set socket to listen

4 Repeatedly1 Accept new connection

2 Communicate

3 Close the connection

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 18: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

18

Esquema general de la comunicacioacuten Cliente Servidor

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 19: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

19

Esquema general de la comunicacioacuten Cliente Servidor

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 20: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

20

Llamadas al sistema asociadas a los Sockets Include Cualquier programa que emplee socket debe contar con los siguientes

includeusrincludesystypeshusrincludesyssocketh Adicionalmente seguacuten el dominio empleado se debe contar con los

siguientes include

Dominio Archivos adicionales a incluir (include)

AF_UNIX usrincludesysunh

AF_INET usrincludenetinetinh

usrincludearpaineth

usrincludenetdbh

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 21: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

21

Creacioacuten de un Socketint socket (int domain int type int protocol) permite crear un socket no nominado y retorna un descriptor de archivo El socket se

liga a un protocolo particular pero no se conecta a nada Hasta que no estaacute conectado no se puede leer de eacutel o escribir en eacutel

La llamada socket retorna un descriptor de archivo si la llamada ha tenido eacutexito o -1 si no lo ha tenido Despueacutes que se conecta el socket el descriptor de archivo puede ser utilizado para leer (read) o escribir (write)

Cuando un proceso termina de usar el socket debe cerrarlo para liberar los recursos asociados a eacutel

Como open() socket retorna un valor que es menor que cero si ocurre un error y un descriptor de archivo que es mayor o igual a cero si tiene eacutexito

Paraacutemetros El dominio indica doacutende puede residir el socket del servidor y del cliente Es el

dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Un protocolo es un juego de reglas que define la forma en que deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 22: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

22

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros El dominio indica doacutende puede residir el socket del

servidor y del cliente Es el dominio donde las direcciones seraacuten interpretadas El dominio tiene una familia de protocolos asociada

Dominio Descripcioacuten

PF_UNIX Dominio UNIX el cliente y el servidor deben estar en la misma maacutequina

PF_INET TCPIP v4 el cliente y el servidor pueden estar en cualquier lugar en la Internet

PF_APPLETALKAppleTalk DDS AppleTalk DDS

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 23: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

23

Creacioacuten de un Socket

int socket (int domain int type int protocol) ParaacutemetrosEl tipo Es el tipo de comunicacioacuten que puede existir entre el cliente y

el servidor Hay varios tipos pero soacutelo dos son de intereacutes SOCK_STREAM circuito virtual Garantiza un manejo confiable de

los datos en el orden que son enviados Se enviacutean cadenas de bytes de longitud variable No se puede enviar datos mientras el circuito no se haya establecido El circuito permanece intacto hasta que se destruya expliacutecitamente

SOCK_DGRAM este tipo de conexioacuten se usa para enviar distintos paquetes de informacioacuten llamados datagramas No se garantiza que lleguen en orden no se garantiza siquiera que lleguen Los mensajes son de longitud fija No hay conexioacuten privada

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 24: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

24

Creacioacuten de un Socket

int socket (int domain int type int protocol) Paraacutemetros Un protocolo es un juego de reglas que define la forma en que

deben efectuarse las comunicaciones de las redes incluyendo el formato la secuencia tamantildeo de mensajes etc

El protocolo estaacute sujeto a las restricciones impuestas por los primeros dos paraacutemetros Su valor indica la forma de bajo nivel en la que es implementado el socket Las llamadas al sistema que esperan como paraacutemetro al protocolo acepta el valor 0 para indicar el protocolo correcto dejando al kernel elegir el protocolo por defecto Si la familia es PF-INET o AF_INET TCP es el protocolo orientado a conexioacuten y UDP es el protocolo no orientado a conexioacuten

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 25: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

25

Rutinas asociadas al servidorBindAsociar un socket a una direccioacutenint bind (int sockfd struct sockaddr my_addr int addrlen) Es como asignar un nombre a un socket Esta llamada asocia una direccioacuten

y un puerto bien conocido al socket identificado por el descriptor de archivo sockfd Retorna 0 si tiene eacutexito y -1 si se presenta alguacuten error

sockfd = file descriptor que retorna la llamada a socket struct sockaddr Las direcciones del dominio UNIX son pathnames del file system Estas

direcciones se pasan a traveacutes de la siguiente estructurastruct sockaddr_un unsigned short sun_family AF_UNIX char sun_path[UNIX_PATH_MAX] pathname

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 26: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

26

Rutinas asociadas al servidorBind Las direcciones IP empleadas por el dominio INET se cargan en una estructura con

el siguiente formatostruct sockaddr_in short int sin_family AF_INET unsigned short int sin_port port number struct in_addr sin_addr IP address El primer elemento indica que es una direccioacuten IP y no el nombre de un archivo El segundo elemento es el nuacutemero de puerto Los puertos son nuacutemeros de 16 bits

que identifican uniacutevocamente el punto final de una conexioacuten a un hosts La combinacioacuten de una direccioacuten IP y un nuacutemero de puerto identifica el punto final de una conexioacuten en cualquier lugar de una red TCPIP Aunque los nuacutemeros de puerto van del 0 al 65535 Linux la divide en dos clases Los puertos reservados van del 0 al 1024 deben usarlo soacutelo los procesos o servicios estaacutendares del sistema El puerto debe ir en el orden correcto de bytes

El nuacutemero final es la direccioacuten IP de la maacutequina donde el puerto reside

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 27: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

27

Direcciones IP v4

Las direcciones IP cada nodo en una red TCP-IP requiere de una direccioacuten numeacuterica de 4 bytes o 32 bits Lo maacutes comuacuten es escribirla en notacioacuten decimal lo cual se obtiene transformando cada byte a su forma decimal

11000000 10101000 00000001 0001101 192 168 1 25

192168125

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 28: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

28

Direcciones IP v4

Las direcciones IP estaacuten asociadas a nombres Estos nombres se encuentran en una base de datos A estas BD se accede a traveacutes de los servidores de nombres distribuidos por Internet La base de datos se llama DNS o Domain Name System El mapping entre nombres y direcciones IP es many to many Varios sites o servicios pueden usar una misma maacutequina por ejemplo el ftp y el web Pueden tener dos nombres wwwsomeorg y ftpsomeorg y soacutelo una direccioacuten IP si se ejecutan en una misma maacutequina Un router puede tener varias direcciones IP y un solo nombre

Direcciones especiales 127001 local host (el mismo computador donde se esta

trabajando) Direcciones que terminan en 0 = una subred Direcciones que terminan en 1= un router

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 29: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

29

Estableciendo el nuacutemero maacuteximo de clientes en espera Listenint listen(int sockfd int backlog)

Cuando un proceso servidor estaacute dando servicio a un cliente conectado siempre es posible que otro cliente intente establecer una nueva conexioacuten con el servidor La llamada al sistema listen permite especificar al proceso servidor el nuacutemero de conexiones pendientes que deben ser encoladas Luego de sobrepasar este valor el siguiente cliente que intente conectarse fallariacutea en su llamada connect

sockfd file descriptor backlog cuantas conexiones pueden estar pendientes esperando

ser aceptadas Histoacutericamente se ha colocado el valor de 5 aunque puede colocarse otro valor

Listen retorna 0 si tiene eacutexito y un valor diferente de 0 si falla

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 30: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

30

Aceptacioacuten de la conexioacuten de un clienteint accept(int sockfd struct sockaddr addr int addrlen)

Una vez que un socket es creado nominado y el tamantildeo de la cola de clientes establecido el paso final es aceptar el requerimiento de conexioacuten de un cliente Esto lo puede hacer el servidor mediante la llamada accept

El servidor acepta la conexioacuten por un socket Al llegar a este punto normalmente el servidor detiene su ejecucioacuten en espera de que un cliente establezca una conexioacuten

La llamada accept es bloqueante a menos que se haya especificado no bloqueante en la creacioacuten del socket

La llamada al sistema retorna un nuevo socket no nominado asociado al descriptor de archivo sockfd que representa al socket que debe usarse para la conexioacuten con el cliente Este nuevo descriptor hereda los atributos del socket por donde se hizo el listen

Los paraacutemetros addr y addrlen apuntan a datos del cliente que el kernel llena Al crearse el nuevo socket para el cliente el socket original puede volver a ser empleado para esperar nuevas conexiones de otros clientes

Accept al igual que open retorna un descriptor de archivo si tiene eacutexito o un nuacutemero menor que 0 si ocurre un error Inicialmente Addrlen debe ser un entero que contiene el tamantildeo de la estructura addr

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 31: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

31

Rutinas asociadas al Cliente

Para poder establecer la comunicacioacuten viacutea socket con un servidor el proceso cliente debe llenar una estructura con direccioacuten del servidor y el puerto para luego emplear la llamada connect para intentar establecer la conexioacuten con el servidor

int connect (int sockfd struct sockaddr seraddr int addrlen) Si la conexioacuten es exitosa la rutina devuelve el valor 0 y el valor

sockfd puede ser empleado como descriptor de archivo para comunicarse con el servidor mediante las llamadas read y write Si el socket del servidor no existe o su cola de procesos en espera esta llena la llamada connect retorna el valor -1 para indicar que la conexioacuten no fue exitosa

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 32: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

32

Rutinas asociadas al Cliente

int connect (int sockfd struct sockaddr seraddr int addrlen)

Los paraacutemetros son el socket del cliente y la direccioacuten a la cuaacutel el cliente se desea conectar pasada a traveacutes de la estructura seraddr

Si el socket pertenece al dominio AF_UNIX el paraacutemetro es un apuntador a una estructura sockaddr_un en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

Si el socket pertenece al dominio AF_INET el paraacutemetro es un apuntador a una estructura sockaddr_in en este caso se le debe hacer un cast a sockaddr para ser pasado como seraddr

El paraacutemetro addrLen debe ser igual al tamantildeo de la estructura referenciada por sockaddr

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 33: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

33

Otras Rutinas asociadas a la comunicacioacuten de datosOrden de los bytes Las redes TCP-IP son heterogeacuteneas e incluyen una gran variedad de maacutequinas y

arquitecturas Una de las diferencias maacutes comunes en las arquitecturas es coacutemo almacenan los nuacutemeros Big endian carga el byte maacutes significativo en la direccioacuten maacutes baja y little endian hace justo lo contrario

TPCIP adopta big-endian para transmitir datos o informacioacuten del mismo protocolo y sugiere tambieacuten que se le aplique a los datos Este orden se conoce como network byte order

Existen una serie de funciones para convertir del orden en el cual son trabajados los nuacutemeros en el computador que ejecuta el coacutedigo (host) al orden de la red (network) y viceversa

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 34: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

34

Otras Rutinas asociadas a la comunicacioacuten de datosTodos los valores almacenado en sockaddr_in deben estar en network byte order sin_port El nuacutemero del puerto TCPIP sin_addr La direccioacuten IP

unsigned int htonl (unsigned int hostlong) Host to network long convierte un entero largo (32 bits) que esta originalmente en el

formato de la maacutequina local al formato de redunsigned short htons (unsigned short hostshort) Host to network short convierte un entero corto (16 bits) que esta originalmente en el

formato de la maquina local al formato de redunsigned int ntohl (unsigned int netlong) Network to host long convierte un entero largo (32 bits) que esta originalmente en el

formato de red al formato de la maquina localunsigned int ntohs (unsigned short netshort) Network to host short convierte un entero corto (16 bits) que esta originalmente en el

formato de red al formato de la maquina local Estas rutinas trabajan con cantidades con signo y sin signo Aunque se usa el

teacutermino long las rutinas esperan cantidades de 32 bits

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 35: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

35

Manejo de las direcciones IP

char inet_ntoa(struct in_addr address) Toma una estructura del tipo in_addr que contiene la direccioacuten IP

binaria (32 bits) y retorna un string conteniendo la direccioacuten en formato decimal (ABCD)

int inet_aton(const char daddress struct in_addr address) Espera un string que contiene la direccioacuten IP en decimal y llena la

estructura address con la representacioacuten binaria Retorna 0 si ocurre un error y non-zero si la conversioacuten fue exitosa

unsigned long inet_addr(char dirip) A partir de la variable dirip que contiene la direccioacuten IP de un

computador en el formato ABCD retorna la direccion IP en un formato de 32 bits que estaacute en network-byte order

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 36: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

36

Manejo de las direcciones IP

Nombres de hostsPara manejar la complejidad del mapping entre direcciones IP y nombres se definen la

siguiente estructurastruct hostent char h_name char h_aliases int h_addrtype int h_length char h_addr_list char h_name nombre oficial del hostchar h_aliases alias para el hostint h_addrtype tipo de direccioacuten (AF_INET en Ipv6 se veraacuten otros tipos de direcciones)int h_length longitud de la direccioacuten binaria sizeof (struct in_addr)char h_addr_list arreglo con direcciones de este host Cada posicioacuten del arreglo

apunta a algo del tipo struct in_addr

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 37: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

37

Manejo de las direcciones IP

Dos funciones de libreriacutea convierten entre nuacutemeros IP y hostnames Gethostbyname retorna un struct hostent para un hostname que contiene

la direccioacuten IP de la maacutequina especificada en el paraacutemetro name Gethostbyaddr retorna informacioacuten sobre una maacutequina con una direccioacuten

IP en particular Struct hostent gethostbyname(const char name)Struct hostent gethostbyaddr(const char addr int len int type) el primer

paraacutemetro deberiacutea apuntar a un struct in_addr El paraacutemetro len es la longitud de la estructura y type especifica el tipo de direccioacuten

Cuando ocurren errores buscando un nombre de host se establece el valor de la variable h_errno Se usa entonces herror() que imprime la descripcioacuten de error

Retornan un apuntador a una estructura que puede sobreescribirse cuando se vuelva a llamar a la funcioacuten El programa deberiacutea salvar valores que vaya a necesitar despueacutes

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 38: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

38

Manejo de las direcciones IP

La direccioacuten del host donde se ejecuta el programa se puede obtener mediante la rutina gethostname

int gethostname (char name int nameLen) Esta rutina llena el arreglo de caracteres

apuntado por name de longitud nameLen con un string terminado en null que contienen la direccioacuten del host local donde se ejecuta el programa

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 39: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

39

Programa de Ejemplo

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 40: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

40

Protocolo HTTP Es el protocolo de red que se utiliza para transferir los

archivos (llamados recursos) que forman parte de la World Wide Web Ya sean estos archivos HTML imaacutegenes sonidos etc

Propuesto por Tim Berners-Lee en 1989 HTTP es el protocolo utilizado para intercambio de

informacioacuten entre clientes Web (ej Mozilla Firefox) y servidores HTTP (ej Apache)

Conexioacuten TCP puerto 80 que escucha pasivamente Actualmente versioacuten HTTP11 HTTP10 ver RFC 1945 y HTTP11 ver RFC 2616 Maacutes informacioacuten httpwwww3orgprotocols

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 41: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

41

HTTP - HyperText Transfer Protocol Normalmente HTTP utiliza a TCP como medio de

transporte HTTP se utiliza para transferir Recursos no solo

archivos Un recurso es un trozo de informacioacuten que puede

identificarse a traveacutes de un URL La clase maacutes comuacuten de recursos son los archivos

pero tambieacuten pueden ser datos generados dinaacutemicamente

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 42: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

42

Web y HTTPAlgunos teacuterminos Una paacutegina Web consta de objetos Los objetos pueden ser un archivo HTML una imagen

JPEG un applet Java un archivo de audiohellip Una paacutegina Web consta de un archivo HTML base que

incluye diversos objetos referenciados Cada objeto se direcciona con un URL Ejemplo de un URL

wwwalgunsitioedualgunaFacultadpicgif

Nombre del host Nombre del path

http

Protocolo

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 43: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

43

Panoraacutemica de HTTPHTTP Protocolo de

Transferencia de HiperTexto Es el protocolo de la capa de

aplicacioacuten para el Web Usa el modelo clienteservidor

Cliente browser o navegador que solicita recibe y muestra los objetos Web

Servidor Servidor www que enviacutea objetos en respuesta a las solicitudes del browser

HTTP 10 RFC 1945 HTTP 11 RFC 2068

PC ejecutandoIE Explorer

Servidorejecutando

El servidor WebApache

Mac ejecutandoNetscape Navigator

Solicitud HTTP

Solicitud HTTP

Respuesta HTTP

Respuesta HTTP

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 44: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

44

Panoraacutemica de HTTP (continuacioacuten)Utiliza TCP El cliente inicia la conexioacuten

TCP (crea el socket) al servidor puerto 80

El servidor acepta la conexioacuten TCP solicitada por cliente

Los mensajes HTTP (mensajes del protocolo de la capa de aplicacioacuten) se intercambian entre el browser (cliente HTTP) y el servidor Web (servidor HTTP)

Se cierra la conexioacuten TCP

HTTP es ldquostatelessrdquo El servidor no mantiene

informacioacuten sobre las solicitudes anteriores del cliente

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 45: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

45

Funcionamiento de HTTP Funcionamiento 1 El cliente realiza una peticioacuten o apertura activa

(request) al servidor (puerto 80 por defecto) 2 Solicita la transaccioacuten (request) con HTTP

GET POST HEAD PUT hellip 3 El servidor enviacutea la respuesta (response) en

HTML 4 Se cierra la conexioacuten (en HTTP10)

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 46: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

46

Ejemplo de transaccioacuten HTTP

El navegador solicita recurso Se determina el URL Se resuelve la IP (DNS) Se establece conexioacuten TCP con puerto

80 de la IP destino Se transmite el meacutetodo GET

ltURIgt ltprotocologt

(archivohtml HTTP11) El servidor responde (seguacuten

extensiones MIME y RFCs) Se cierra la conexioacuten (HTTP 10) Se presenta el recurso en el

ldquonavegadorrdquo Uniform Resource Identifier (URI) es una cadena de caracteres usada para identificar o nombrar un recurso en la Internet

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 47: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

47

Mensajes HTTP

Dos tipos de mensajes usando ASCII (texto plano) Request (Solicitud) Response (Respuesta)

Solicitudes HTTP10

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 48: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

48

Mensajes HTTP Respuestas HTTP10

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 49: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

49

Mensajes HTTP Ejemplo real de mensajes HTTP

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 50: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

50

Mensajes HTTP Coacutedigos de estado

Identificador del estado de la peticioacuten Los enviacutea el servidor web como respuesta Entero de 3 diacutegitos

1xx Informativos 2xx Operacioacuten realizada con eacutexito 3xx Redireccionan al cliente a otra URL 4xx Error del cliente 5xx Error del servidor

Los maacutes usuales 200 OK solicitud exitosa la respuesta va en el cuerpo 404 Not Found el recursos no existe 303 See Other el recurso se ha movido a otra URL (ver Header Location) 500 Server Error error interno del servidor

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 51: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

51

Mensajes HTTP

Meacutetodos Operaciones que se pueden solicitar a un servidor Existen 3 meacutetodos distintos

GET Se utiliza para recoger cualquier tipo de informacioacuten del servidor Esta informacioacuten va en el cuerpo de la respuesta

HEAD Solicita informacioacuten sobre un objeto (fichero) Es igual que GET pero la informacioacuten va contenida en la cabecera de la respuesta NUNCA TIENEN CUERPO

POST Se utiliza para enviar informacioacuten al servidor por

ejemplo los datos contenidos en un formulario

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 52: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

52

HTTP 11 El protocolo HTTP11 es ligeramente

diferente a su precedenteConexiones persistentes vs no-persistentesPosibilidad de cerrar la conexioacuten cuando se

deseeNuevos meacutetodos como PUT DELETE

OPTIONSNuevas cabeceras

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 53: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

53

Conexiones HTTP

HTTP no persistente Al menos un objeto

es enviado sobre una conexioacuten TCP

HTTP10 utiliza HTTP no persistente

HTTP persistente Multiples objetos

pueden ser enviados sobre una misma conexioacuten TCP entre el cliente y el servidor

HTTP11 por omisioacuten utiliza conexiones persistentes

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 54: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

54

HTTP No persistente Supongamos que el usuario ingresa el URL wwwalgunsitioedualgunaFacultadindexhtml

1a El cliente HTTP inicia la conexioacuten TCPal servidor HTTP (el proceso) en wwwalgunsitioedu en el puerto 80

2 El cliente HTTP enviacutea un request message (que contiene el URL) hacia su socket de conexioacuten TCP El mensaje indica que el cliente desea el objeto algunaFacultadindexhtml

1b El servidor HTTP en el host wwwalgunsitioedu espera conexiones TCP en el puerto 80 Cuando ldquoaceptardquo una conexioacuten notifica al cliente

3 El servidor HTTP recibe el mensaje de solicitud construye un response message que contiene el objeto solicitado y enviacutea el mensaje hacia su sockettiempo

(contiene texto referencia a 10 imaacutegenes jpeg)

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 55: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

55

HTTP No persistente (cont)

5 El cliente HTTP recibe el mensaje de repuesta que contiene el archivo html muestra el html Al recorrer el archivo html encuentra 10 objetos jpeg referenciados

6 Los pasos 1 a 5 se repiten para cada uno de los 10 objetos jpeg

4 El servidor HTTP cierra la conexioacuten TCP

tiempo

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 56: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

56

Modelado del tiempo de respuesta

Definicioacuten de RRT tiempo para enviar un pequentildeo paquete y que este viaje desde el cliente hasta el servidor y que regrese

Tiempo de respuesta Un RTT para iniciar la conexioacuten

TCP Un RTT para la solicitud HTTP

y para que los primeros bytes de la respuesta HTTP regresen

Tiempo de transmisioacuten del archivo

tiempo para transmitir archivo

Inicia Conexioacuten TCP

RTT

solicitaarchivo

RTT

archivorecibido

tiempo tiempo

total = 2RTT+tiempo de transmisioacuten

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 57: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

57

HTTP PersistenteAspectos de HTTP No persistente requiere 2 RTTs por objeto El OS debe trabajar y asignar los

recursos del host para cada conexioacuten TCP

En ocasiones un browser abre conexiones TCP paralelas para traer los objetos referenciados

HTTP persistente El servidor deja la conexioacuten abierta

despueacutes de enviar el mensaje de respuesta

Los mensajes HTTP que siguen entre el clienteservidor son enviados sobre la misma conexioacuten TCP

Persistencia sin pipelining El cliente emite una nueva

solictud soacutelo cuando la respuesta anterior ha sido recibida

Se requiere un RTT para cada objeto referenciado

Persistencia con pipelining Por omisioacuten en HTTP11 El cliente enviacutea una solicitud tan

pronto como encuentra un objeto referenciado

Se requiere apenas como un RTT para TODOS los objetos referenciados

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 58: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

58

Mensaje de solicitud HTTP HTTP tiene dos tipos de mensajes

request response Mensaje de solicitud

ASCII (formato legible para nosotros)

GET algundirpaginahtml HTTP11Host wwwalgunsitioedu User-agent Mozilla40Connection close Accept-languagefr

(ldquocarriage return line feedrdquo adicional)

Liacutenea de solicitud(comandos GET POST

HEAD)

Liacuteneas deencabezado

ldquoCarriage return line feedrdquo

Indica el final del mensaje

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 59: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

59

Mensaje de solicitud HTTP formato general

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 60: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

60

Enviando datos al servidor desde un formulario HTMLUsando el meacutetodo POST Las paacuteginas web incluyen

a menudo formularios para ingresar datos

Los datos ingresados en el formulario son ldquosubidosrdquo o enviados al servidor a traveacutes del cuerpo del mensaje (Entity Body)

Usando el URL Utiliza el meacutetodo GET Los datos ingresados son

enviados en el campo del URL de la liacutenea de solicitud

wwwalgunsitiocombusquedanombre=arcesioampapellido=net

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 61: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

61

Tipos de meacutetodos

HTTP10 GET POST HEAD

Hace una consulta al servidor sobre las caracteriacutesticas del objeto pero no transfiere el objeto

HTTP11 GET POST HEAD PUT

Enviacutea un archivo en el cuerpo del mensaje al path especificado en el URL

DELETE Borra el archivo

especificado en el URL

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 62: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

62

Mensaje de respuesta de HTTP

HTTP11 200 OK Connection closeDate Thu 06 Aug 1998 120015 GMT Server Apache130 (Unix) Last-Modified Mon 22 Jun 1998 hellip Content-Length 6821 Content-Type texthtml datos datos datos datos datos

Liacutenea de estado(coacutedigo deestado delProtocolo

frase de estado)

Liacuteneas de encabezado

datos es decir archivo HTML

solicitado

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 63: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

63

Coacutedigos de estado de HTTP

200 OK Solicitud exitosa el objeto solicitado va en este mensaje

301 Moved Permanently El objeto solicitado fue movido la nueva ubicacioacuten se

especifica posteriormente en este mensaje (Location)

400 Bad Request El mensaje de solicitud no fue entendido por el servidor

404 Not Found El documento solicitado no se encontroacute en este servidor

505 HTTP Version Not Supported

Se usan en la primera liacutenea del mensaje de respuesta del servidor-gtcliente Ejemplos

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 64: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

64

Conexioacuten HTTP (cliente) hecha ldquoa manordquo

1 Coneacutectese a traveacutes de telnet al puerto 80 a su sitio Web favorito

Abre una conexioacuten TCP al puerto 80(puerto ldquobien conocidordquo de HTTP) enwwwarcesionetCualquier cosa que se digite seraacute enviadaAl puerto 80 en wwwarcesionet

telnet wwwarcesionet 80

2 Digite una solicitud de HTTP con el meacutetodo GET

GET indexhtml HTTP10 Al digitar esto (y oprimir ltENTERgtdos veces) se enviaraacute esta solicitud HTTP miacutenima (pero completa) al servidor HTTP

3 iexclObserve el mensaje de respuesta enviado por el servidor HTTP

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 65: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

65

HTTP Proxy Un proxy es un programa o dispositivo que

realiza un accioacuten en representacioacuten de otro

Cliente

HTTPProxyCliente

Servidor Web

Servidor Web

Request

Replay

Request Request

ReplayReplay

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 66: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

66

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina no prohibida

Usuario

Solicita una paacutegina web

request

request

response

response

Paacutegina solicitada o mensaje de error

Verifica el url

Elabora respuesta

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url

Page 67: 1 Clase de Sockets en lenguaje C Prof. Ricardo González.

67

NavegadorWeb

Servidor Webhproxy

Diagrama de Secuencia de una paacutegina prohibida

Usuario

Solicita una paacutegina web

request

response

Paacutegina indicando la prohibicioacuten

Verifica el url