Date post: | 29-Jan-2016 |
Category: |
Documents |
Upload: | francisco-jose-naranjo-torregrosa |
View: | 224 times |
Download: | 1 times |
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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