Módulo 9 Programación de Servicios y Procesos
Módulo 9 Programación de Servicios y Procesos
Programación de servicios y
procesos
Módulo 9: Programación de servicios y procesos
Página 2 de 75
Módulo 9: Programación de servicios y procesos
BIBLIOGRAFÍA .................................................................................................... 74
Página 3 de 75
Módulo 9: Programación de servicios y procesos
Normalmente, toda aplicación recibirá información por parte del usuario, por
lo que es importante el tratamiento de la misma. Los datos, al ser una parte
muy sensible, es lo que más se suele atacar.
Es necesario verificar siempre que los datos introducidos son válidos, tanto los
parámetros, como la información, como los ficheros que se utilizan.
Cuando se trabaja con URL páginas web, hay que tener presente la seguridad
y, por ello, comprobar si la URL es fiable o no. Los datos de las webs pueden
ser alterados por un usuario, tanto su contenido como la configuración.
Página 4 de 75
Módulo 9: Programación de servicios y procesos
● Comprobar que todas las llamadas al sistema se han realizado con éxito
y detener la aplicación si no ha sido así.
Página 5 de 75
Módulo 9: Programación de servicios y procesos
● Cifrado Cesar
Una función hash es una función que, dada cualquier cadena de caracteres, los
convierte en otra cadena de longitud fija.
Página 6 de 75
Módulo 9: Programación de servicios y procesos
- DES: utiliza una clave de 56 bits, por lo que no se considera seguro. Cifra
bloques de datos de 64 bits con la clave de 56, y después de varias
iteraciones, muestra 64 bits de salida.
Página 7 de 75
Módulo 9: Programación de servicios y procesos
Página 8 de 75
Módulo 9: Programación de servicios y procesos
Página 9 de 75
Módulo 9: Programación de servicios y procesos
● Certificación
Este certificado es generado por una Autoridad Certificadora (AC), que
también es la encargada de realizar la autenticación al usuario.
● Comercio electrónico
Mediante la criptografía es posible realizar operaciones sensibles por Internet,
con la seguridad de que los datos no serán interceptados por terceros.
Para que un sistema sea seguro deben cumplirse todas estas características.
Además, hay que tener en cuenta que tanto no repudio como
confidencialidad dependen de la autenticidad para poder cumplirse.
Página 10 de 75
Módulo 9: Programación de servicios y procesos
Página 11 de 75
Módulo 9: Programación de servicios y procesos
Página 12 de 75
Módulo 9: Programación de servicios y procesos
Página 13 de 75
Módulo 9: Programación de servicios y procesos
● Clase Cipher
static MessageDigest
Asigna el algoritmo de cifrado para el objeto.
getInstance (String algorithm)
byte[] digest () Realiza el cálculo del resumen.
static boolean isEqual (byte[] Compara dos resúmenes para comprobar si son
digestA, byte[] digestB) iguales.
Página 14 de 75
Módulo 9: Programación de servicios y procesos
Con la Clase KeyPair se crea un objeto que contiene una clave privada y una
pública mediante el constructor KeyPair (PublicKey publicKey, PrivateKey
privateKey). Es posible recoger estas claves con los siguientes métodos:
Página 15 de 75
Módulo 9: Programación de servicios y procesos
Toda esta información no es posible guardarla en una base de datos sin cifrar,
y hay que tener en cuenta que, si la información navega a través de Internet,
debe ir cifrada y mediante un protocolo seguro.
Todo esto es necesario reflejarlo en la documentación de la aplicación,
centrándose en la información cifrada y en el tipo de cifrado que se ha
realizado.
Página 16 de 75
Módulo 9: Programación de servicios y procesos
1. Programación multiproceso
Caracterización de la programación concurrente,
paralela y distribuida
Página 17 de 75
Módulo 9: Programación de servicios y procesos
Veamos un ejemplo:
L(I1) = {x,z}
L(I2) = {b}
L(I3) = {b,c}
E(I1) = {a}
E(I2) = {x}
E(I3) = {y}
● L(Si) ∩ E(Sj) = Ø
● E(Si) ∩ L(Sj) = Ø
● E(Si) ∩ E(Sj) = Ø
Página 18 de 75
Módulo 9: Programación de servicios y procesos
E(S1) ∩ L(S2) = Ø
E(S1) ∩ E(S2) = Ø
E(S1) ∩ L(S3) = Ø
E(S1) ∩ E(S3) = Ø
E(S2) ∩ L(S3) = Ø
E(S2) ∩ E(S3) = Ø
Página 19 de 75
Módulo 9: Programación de servicios y procesos
• Programación paralela
Página 20 de 75
Módulo 9: Programación de servicios y procesos
Este tipo de memoria permite ser accedida por múltiples programas, por lo
que es un modo eficaz de transferencia de datos. Esto se consigue creando
un espacio de acceso común por parte de cada uno de los procesos en la
memoria RAM.
Hay que tener en cuenta que uno de los mayores problemas se da cuando
existe un punto de acceso en común, como son las secciones críticas.
• Programación distribuida
Página 21 de 75
Módulo 9: Programación de servicios y procesos
Página 22 de 75
Módulo 9: Programación de servicios y procesos
Página 23 de 75
Módulo 9: Programación de servicios y procesos
En Unix existen más estados para los procesos que los que se han explicado
anteriormente. En este diagrama se pueden observar las transiciones entre
ellos:
Página 24 de 75
Módulo 9: Programación de servicios y procesos
Cabe destacar que existen varios estados nuevos, como pueden ser:
● Nuevo: aquellos procesos que aún no han sido elegidos para iniciar su
procesamiento.
● Terminado: aquellos procesos que han finalizado su ejecución.
● Zombies: aquellos procesos que han finalizado su ejecución, pero no
han liberado los recursos que han utilizado.
● Ejecutables
Son archivos binarios que contienen un conjunto de instrucciones en código
fuente que el compilador ha traducido a lenguaje máquina. Este tipo de
archivos suele contener instrucciones de llamada a las funciones del sistema
operativo.
Este tipo de archivos son incomprensibles para el ser humano. Algunos de los
más comunes son .bat, .com, .exe y .bin.
● Procesos
Conjunto de instrucciones que ejecutará el microprocesador, es lo que se
entiende como un programa en ejecución. Los procesos son gestionados por
el sistema operativo, que es el encargado de crearlos y destruirlos. Requieren
de unos recursos de memoria que reservan para su ejecución.
En los sistemas operativos multihilo es posible crear hilos y procesos. La
diferencia reside en que un proceso solamente puede crear hilos para sí
mismo, y en que dichos hilos comparten toda la memoria reservada para el
proceso.
Página 25 de 75
Módulo 9: Programación de servicios y procesos
● Servicios
Es un tipo de proceso informático que posee unas características especiales,
ya que se ejecutan en segundo plano y no son controlados por el usuario.
Pueden permanecer de manera continuada en ejecución dentro del sistema y
carecen de interfaz gráfica.
La mayor parte de estos servicios están destinados a realizar tareas de
mantenimiento del sistema operativo de forma periódica.
Los hilos dentro de una misma aplicación disponen de las siguientes zonas
comunes:
● Sección de código.
● Sección de datos.
● Los recursos del sistema operativo.
Página 26 de 75
Módulo 9: Programación de servicios y procesos
Un hilo, al igual que un proceso, está caracterizado además por su estado. Los
estados en los que se puede encontrar un hilo son:
● Ejecución.
● Preparado.
● Bloqueado.
En la mayor parte de los casos, los hilos realizan las mismas operaciones que
los procesos. La existencia de un hilo está vinculada a un proceso. Los hilos
permiten que la comunicación entre los distintos procesos sea más rápida,
además, se tarda un tiempo menor en crear un nuevo hilo que un nuevo
proceso.
Página 27 de 75
Módulo 9: Programación de servicios y procesos
Página 28 de 75
Módulo 9: Programación de servicios y procesos
● SIGINT: se envía una señal a todos los procesos cuando se pulsan las
teclas Ctrl+C. Se utiliza para interrumpir la ejecución de un programa.
Los hilos agilizan las tareas que tienen los procesos, por lo que es importante
considerar la posibilidad de que un hilo permanezca bloqueado de forma
continuada. Como los hilos no son independientes, sino que forman parte
todos del mismo proceso, el proceso podrá llegar a bloquearse por
completo, así como todos los hilos que componen ese proceso.
Página 29 de 75
Módulo 9: Programación de servicios y procesos
Página 30 de 75
Módulo 9: Programación de servicios y procesos
Página 31 de 75
Módulo 9: Programación de servicios y procesos
Información:
● UID: usuario del proceso.
● PID: identificador del proceso.
● PPID: PID del padre del proceso.
● C: uso del procesador.
● STIME: hora de inicio del proceso.
● TTY: terminal asociado.
● TIME: tiempo de ejecución del proceso.
● CMD: nombre del proceso.
Página 32 de 75
Módulo 9: Programación de servicios y procesos
2. Programación multihilo
• Clase Thread
Página 33 de 75
Módulo 9: Programación de servicios y procesos
Mientras que los procesos se caracterizan por no compartir la memoria con la que
trabajan y ser independientes entre ellos, lo hilos no son iguales. Estos últimos suelen
compartir la memoria con la que trabajan, puesto que pertenecen al mismo proceso.
Página 34 de 75
Módulo 9: Programación de servicios y procesos
El uso de hilos en lugar de procesos tiene bastantes ventajas, entre las que se
destacan dos:
Estos hilos suelen ser utilizados la mayor parte de las ocasiones para llevar
a cabo tareas en segundo plano, puesto que se reduce mucho el tiempo de
realización de diversas tareas de forma simultánea.
Página 35 de 75
Módulo 9: Programación de servicios y procesos
Como solución a esto se han creado los hilos de ejecución que permiten
ser ejecutados dentro de una aplicación de forma paralela y haciendo uso
de otra parte del código. De esta forma, es posible ejecutar un hilo en primer
plano que permita la comunicación con el usuario, y, en segundo plano, hilos
que vayan ejecutando las diferentes tareas de carga de una aplicación. Con
esto se consigue que el rendimiento del equipo esté más optimizado.
Página 36 de 75
Módulo 9: Programación de servicios y procesos
Página 37 de 75
Módulo 9: Programación de servicios y procesos
Página 38 de 75
Módulo 9: Programación de servicios y procesos
Estos hilos deben saber quiénes de ellos deben esperar y cuáles continuar con
su ejecución. Para ello existen diferentes mecanismos de comunicación
entre hilos:
Página 39 de 75
Módulo 9: Programación de servicios y procesos
otro. Para solucionar estos problemas, hay que sincronizar los hilos. Por
fichero.println("Hola");
fichero.println("Adiós");
Si los dos hilos lo hacen a la vez, sin ningún tipo de sincronización, el fichero final
puede tener esto:
HoAldiaós
Para evitar este problema debemos sincronizar los hilos. En Java el código sería así:
synchronized (fichero)
{
fichero.println("Hola");
}
Y el otro hilo:
synchronized (fichero)
{
fichero.println("Adiós");
}
Página 40 de 75
Módulo 9: Programación de servicios y procesos
Página 41 de 75
Módulo 9: Programación de servicios y procesos
Con esto se consiguen focalizar los errores y poder resolver las incidencias más
rápidamente.
Página 42 de 75
Módulo 9: Programación de servicios y procesos
Página 43 de 75
Módulo 9: Programación de servicios y procesos
Página 44 de 75
Módulo 9: Programación de servicios y procesos
Página 45 de 75
Módulo 9: Programación de servicios y procesos
• Clase InetAddress
Es la clase que representa las direcciones IP.
• Clase URL
Es la clase que representa un localizador de recursos uniforme (URL), es decir,
representa la dirección del recurso en Internet.
Una URL es un conjunto de caracteres que permiten denominar de forma
única los recursos en Internet, de esta forma facilita el acceso a ellos.
protocolo:/usuario:contraseña@máquina:puerto/ruta_fichero
Página 46 de 75
Módulo 9: Programación de servicios y procesos
Página 47 de 75
Módulo 9: Programación de servicios y procesos
• Clase URLConnection
Esta clase permite trabajar con conexiones realizadas a la URL especificada.
Para ello, es necesario crear un objeto de la clase URL e invocar al método
openConnection().
Con esto obtenemos una conexión al objeto URL referenciado. Las instancias
se esta clase se pueden utilizar tanto para leer como para escribir al recurso
referenciado por la URL.
Página 48 de 75
Módulo 9: Programación de servicios y procesos
1.4. Sockets
Un socket es un mecanismo que permite la comunicación entre aplicaciones
a través de la red, es decir, abstrae al usuario del paso de la información entre
las distintas capas. Su función principal es crear un canal de comunicación
entre las aplicaciones y simplificar el intercambio de mensajes.
Página 49 de 75
Módulo 9: Programación de servicios y procesos
Página 50 de 75
Módulo 9: Programación de servicios y procesos
Una vez que estos tres mensajes han sido enviados, es posible empezar a
enviar mensajes entre los dispositivos.
Este tipo de sockets utilizan el protocolo UDP. Al contrario que los anteriores,
este tipo de sockets no garantizan que los mensajes enviados lleguen a su
destino, por lo que no es un protocolo fiable. Además, tampoco garantizan
que los paquetes vayan a llegar en el orden enviado. A cambio de esto,
ofrecen una mayor velocidad en el intercambio de los mensajes, puesto que
no tienen que establecer conexión para ello, ni controlar los mensajes que han
llegado.
Página 51 de 75
Módulo 9: Programación de servicios y procesos
TCP UDP
Conexión Protocolo orientado a Protocolo sin conexiones.
conexiones.
Función Se usa para enviar mensajes Se usa para transporte de
por Internet de una mensajes y/o transferencias. Al
computadora a otra, no estar basada en
mediante conexiones conexiones, un programa
virtuales puede enviar una carga de
paquetes y recibirse en el
destino.
Uso Aplicaciones que requieren Aplicaciones que necesitan
confiablidad alta y donde el transmisión rápida y efectiva.
tiempo de transmisión es Servidores que reciben una
menos crítico. gran cantidad de peticiones
pequeñas de un alto número
de clientes.
Uso por otros HTTP, HTTPS, SMTP, Telnet DNS, DHCP, TFTP, SNMP, RIP,
protocolos VoIP
Página 52 de 75
Módulo 9: Programación de servicios y procesos
Fluidez Los datos se leen como una Los paquetes son enviados
secuencia de bits y no se individualmente; se verifica su
transmiten indicadores para integridad solo si llegan. Los
los límites de segmentos de paquetes tienen límites
los mensajes. definidos, que comprueban
que el mensaje está completo.
Peso TCP es pesado. Requiere UDP es liviano. No hay
tres paquetes para ordenamiento de mensajes ni
establecer una conexión conexiones de verificación.
antes de transmitir. TCP
maneja confiabilidad y
control de congestión.
Control de flujo de Sí realiza control de flujo. No se realiza control de
data Requiere tres paquetes flujo.
para establecer una
conexión antes de
transmitir. Maneja
confiabilidad y control de
congestión.
Verificación de errores Sí hay verificación de Sí hay verificación de
errores. errores, pero no tiene
opciones para recuperar los
datos perdidos.
Campos 1. Número de 1. Largo
secuencia 2. Puerto de origen
2. Número de ACK 3. Puerto de destino
3. Índice data 4. CheckSum
4. Reservado
5. Bit de control
6. Ventana
7. Indicador de
urgencia
8. Opciones
9. Relleno
10. CheckSum
11. Puerto de origen
12. Puerto de destino
Reconocimiento Hay segmentos de No hace reconocimiento.
reconocimiento.
SYN No hace esta verificación.
conexiones en tres SYN-ACK
tiempos) ACK
Checksum Completo Solo para detectar errores.
Página 53 de 75
Módulo 9: Programación de servicios y procesos
- Clase ServerSocket
Es la clase que se debe instanciar en la parte del servidor para crear el puerto
que se queda esperando a la conexión por parte de los clientes.
ServerSocket (int port, int Crea un socket enlazado al puerto especificado, indicando el
baklog) número máximo de peticiones que pueden estar en cola.
Página 54 de 75
Módulo 9: Programación de servicios y procesos
ServerSocket (int port, int Crea un socket enlazado al puerto especificado y a una
baklog, InetAdress dirección) dirección IP, indicando el número máximo de peticiones que
pueden estar en cola.
- Clase Socket
Página 55 de 75
Módulo 9: Programación de servicios y procesos
- Clase DatagramSocket
Es la clase que se debe instanciar tanto en la parte del cliente como en el
servidor.
Página 56 de 75
Módulo 9: Programación de servicios y procesos
- Clase DatagramPacket
Es la clase que permite crear paquetes para enviarlos a través del socket UDP.
Página 57 de 75
Módulo 9: Programación de servicios y procesos
- Clase Socket
void bind (SocketAddress addr) Vincula el socket a una dirección y puerto especificado.
void close () Cierra el socket.
void connect (InnetAddress address, Conecta el socket a una dirección remota.
int port)
void disconnect () Desconecta el socket.
InetAddress getInetAddress () Devuelve la dirección local a la que está vinculado el socket.
Página 58 de 75
Módulo 9: Programación de servicios y procesos
- Clase DatagramPacket
Página 59 de 75
Módulo 9: Programación de servicios y procesos
• Socket TCP
Una vez que existe conexión, comienza la transmisión de los datos, mediante
funciones de write y read. Estas operaciones se realizan mediante las clases
DataInputStream y DataOutputStream, que permiten utilizar diversos
métodos de lectura y de escritura.
Página 60 de 75
Módulo 9: Programación de servicios y procesos
• Socket UDP
Página 61 de 75
Módulo 9: Programación de servicios y procesos
De esta forma, el servidor podrá atender a todos los clientes que realicen la
petición.
Página 62 de 75
Módulo 9: Programación de servicios y procesos
El ejemplo más claro de aplicaciones cliente son los navegadores, a través de los
cuales se realizan la mayor parte de las peticiones. Las aplicaciones instaladas en
cualquier tipo de dispositivo que requieran de Internet para su funcionamiento son,
de igual manera, un tipo de cliente.
A lo largo del capítulo se estudiarán las distintas clases que ofrece el API de
Java para realizar este tipo de conexiones, y así poder lograr una
comunicación con los distintos servicios.
Página 63 de 75
Módulo 9: Programación de servicios y procesos
Para dar servicio a las peticiones que realizan los clientes desde cualquier tipo
de aplicación es necesario almacenar en una máquina todos los datos que se
van a solicitar. Para esto se utilizan los servidores, que, como se ha comentado
anteriormente, son equipos informáticos que dan servicio a otros equipos.
Debido al gran volumen de peticiones que pueden llegar a tener este tipo de
equipos, los servidores se caracterizan por tener unas prestaciones técnicas
muy superiores al resto de ordenadores que se comercializan.
Página 64 de 75
Módulo 9: Programación de servicios y procesos
● NFS: este protocolo permite que distintos equipos que forman parte
de una misma red puedan acceder a ficheros como si estuvieran
almacenados de forma local en el equipo.
• Telnet
- Constructores:
- Métodos:
Página 65 de 75
Módulo 9: Programación de servicios y procesos
• FTP
- Constructor:
- Métodos:
Página 66 de 75
Módulo 9: Programación de servicios y procesos
Página 67 de 75
Módulo 9: Programación de servicios y procesos
• HTTP
- Constructor:
- Métodos:
• SMTP
- Constructor:
- Métodos:
boolean login (String Inicia sesión en el servidor SMTP del host indicado.
hostname)
Página 68 de 75
Módulo 9: Programación de servicios y procesos
Página 69 de 75
Módulo 9: Programación de servicios y procesos
• RMI
Página 70 de 75
Módulo 9: Programación de servicios y procesos
• RPC
Existe una variante de esta técnica cuyo concepto es similar al RMI, es el RPC
(Remote Procedure Call). La diferencia con el RMI es la estructura de
programación de cada una de ellas. El RMI está basado en la programación
orientada a objetos y el RPC en la programación estructurada. El cliente en el
RPC realiza una petición directamente al método del servidor.
• Servicios web
El uso de este viene definido por el tipo de operaciones que se quieren llevar
a cabo.
Una de las ventajas que ofrece REST frente a SOAP es que los mensajes que
son enviados ya definen todo lo necesario para ser procesados en el servidor,
por lo que ni cliente ni servidor deben almacenar el estado de cada uno de
ellos.
Página 71 de 75
Módulo 9: Programación de servicios y procesos
Esta exigencia puede provocar que ocurran fallos, por lo que este tipo de
servidores cuentan con diferentes herramientas de monitorización de su
estado. Así, es posible comprobar la disponibilidad de forma inmediata y
realizar las acciones necesarias de mantenimiento.
Hoy en día existen servicios que contienen peticiones a datos que son
especialmente sensibles a caídas. Existen, por tanto, herramientas que
permiten garantizar una disponibilidad de prácticamente el 100% sin
pérdidas de datos. Esto se conoce como alta disponibilidad.
Estos servidores permanecen activos junto con unas réplicas de sí mismos que
permiten que, en caso de fallos, automáticamente se encargue el otro servidor
de procesar los servicios.
Página 72 de 75
Módulo 9: Programación de servicios y procesos
Este tipo de documentación denominada API no solo está para JAVA, sino
para cualquier aplicación o servicio de red. Una API proporciona un conjunto
de métodos o funciones accesibles para los desarrolladores de software
de cualquier tipo de aplicaciones. Es importante tener en cuenta la versión
de Java con la que se está trabajando, puesto que no es posible utilizar
métodos de las versiones posteriores y algunos de versiones anteriores que
se hayan quedado obsoletos.
Página 73 de 75
Módulo 9: Programación de servicios y procesos
Bibliografía
Sánchez campos, Alberto; Montes Sánchez, Jesús. (2013). Programación de
servicios y procesos. CFGS. España: Ra-ma Editorial.
Página 74 de 75
Módulo 9: Programación de servicios y procesos
Página 75 de 75