martes, 8 de enero de 2013

Introducción


Internet es una red enfocada al intercambio de información entre usuarios y equipos. La información disponible en internet es enorme en 2011, la corporación EMC estimo en 161 millones de gigabytes. Esta ingente cantidad de información debe estar estructurada y organizada para que sea accesible. Gracias al uso de los navegadores y los buscadores de internet, la información se encuentra mayoritariamente en páginas de hipertexto con enlaces, imágenes y vídeos.

Existen multitud de aplicaciones que los usuarios demandan para su trabajo y entretenimiento. En general, todas ellas se basan en transferencia de información, aunque se distinguen por su formato o los tipos de datos que se manejan. Algunos de los servicios más importantes que incluye internet son:
  • Transferencia de archivos
  • Correo electrónico
  • Mensajería instantánea
  • Conexión remota a equipos
  • Acceso a información de hipertexto
  • Transferencia de audio y vídeo.
La mayoría de los servicios ofrecidos por una red de comunicación de ordenadores se basa en un modelo cliente-servidor. Consiste en que el servicio podrá ser proporcionado si existe en la red un equipo que funcione como servidor y que se encargue de atender las peticiones. El resto de equipos de la red se comportaran como clientes, enviando peticiones a los servidores para que se atiendan.



El servicio más importante que debe ofrecer es el intercambio de información entre equipos. Sin embargo, para que este servicio pueda funcionar puede ser necesario que tengan que existir otros servicios complementarios que aporten las funciones necesarias.

La mayoría de los servicios ofrecidos a una red de comunicación se basan en el mecanismo de interacción cliente-servidor. Existen una serie de equipos, llamados clientes, que son habitualmente manejados por usuarios, que solicitan una serie de servicios para completar sus tareas. Por otro lado, en la red deben existir otros equipos que sean capaces de ofrecer los servicios solicitados, se llaman servidores. Entre los servicios que pueden solicitar los clientes para ser atendidos por los servidores podemos encontrar, el acceso a páginas web, impresión de documentos, descarga de archivos, transferencia de correo electrónico…

Cuando un equipo quiere acceder a los servicios disponibles en un servidor remoto, primero tiene que enviar un mensaje de solicitud y dirigirlo al puerto asociado a ese servicio. El servidor deberá tener activo ese puerto para recibir la solicitud, procesarla y enviar los resultados. En este modelo el cliente debe conocer cuál es el numero de puerto de ese servicio en el servidor, normalmente se trata de un puerto bien conocido.

El concepto C/S es muy amplio y en el campo de la informática se puede aplicar tanto a programas que se ejecutan en un mismo equipo como a equipos conectados a través de la red. De igual forma, este modelo no restringe la función que desempeña cada equipo en la red, de forma que un equipo se puede comportar como cliente de unos determinados servicios a la vez que comportarse como servidor de otros. Por todo ello, C/S funciona muy bien en redes de ordenadores donde los servicios se gestionan a través de servidores centralizados y donde pueden existir varios servidores que reportan el trabajo de diferentes tareas.

Las características que definen a un equipo como cliente son:
  • Requiere de una potencia de cálculo menor.
  • Es utilizado por usuarios para realizar su trabajo diario.
  • Es el encargado de iniciar las peticiones o solicitudes.
  • Recibe las respuestas de los servidores, obteniendo la información que ha solicitado o un    mensaje de rechazo.
  • Puede realizar peticiones de varios servicios a diferentes servidores.

Las características de definen a un equipo como servidor son:
  • Suele requerir gran potencia de cálculo y memoria para poder atender todas las peticiones que recibe.
  • Permanece a la espera de recibir peticiones.
  • Cuando recibe una petición, la procesa y envía los resultados o un mensaje de rechazo.
  • Suele aceptar un gran número de peticiones, aunque este valor puede limitarse.
  • Es un equipo dedicado a atender peticiones y los usuarios no suelen trabajar con él directamente.


VENTAJAS DEL C/S
  • Se establece un mayor control de la seguridad y el acceso a servicios autorizados, ya que este se realiza a través de cada servidor.
  • Puede aumentarse fácilmente la capacidad de los equipos o su número.


INCONVENIENTES DEL C/S
  • Sobrecarga de los servidores cuando existen muchas peticiones.
  • El mal funcionamiento de un servidor hace que no estén disponibles los servicios que ofrece.
  • Los servidores requieren de sistemas operativos y programas muy estables.

Información Aportada por: Miguel Angel García Soto 


DNS


DNS à Domain Name System. Creador: Paul Mockapetris (1986)
También se les conoce como URL ( Universal Resources Locator).

2.1 Introducción

Las direcciones de dominio forman una clasificación jerárquica de nombres separados por puntos. A un nivel superior se encuentran los nombres genéricos. Junto a estos nombres genéricos aparece el nombre distintivo de organización. Dentro de la organización pueden definirse subdominios. Finalmente a nivel inferior se especifica el nombre asignado al equipo.


Los nombres genéricos pueden ser de dos tipos:

     Genéricos: “.com”, “.edu”, “.org”, “.net”, “.gov” , “.int” , “.mil”, “.biz”, …
     De países: “.es”, “.us”, “.ar”, “.fr”, “.it”, “.jp”,…

      Ejercicio:


A las direcciones completas de dominio se les llama nombre totalmente cualificados o FQDN (Full Qualified Domain Name), y son absolutas porque especifican la ruta completa de la jerarquía hasta llegar al elemento. Cada equipo de la red tendrá un único nombre FQDN. Por su parte, un dominio está formado por el espacio de nombres que comparten el mismo dominio de primer nivel y segundo nivel.



El modelo DNS distribuye la información relativa a los dominios en servidores DNS de la red. Esta información almacenada constituye una zona, que está definida por un conjunto de dominios y/o subdominios. Esto significa que la zona tiene autoridad sobre el dominio, es decir, es la zona la que guarda la información relativa a la organización del dominio. Normalmente las zonas se guardan como una base de datos en determinados servidores DNS, desde donde es posible gestionarlas.

La zona definida como raíz de todos los dominios de Internet “/” está gestionada en varios servidores ISC (Internet System Consotium). Estos servidores se encuentran ubicados en varios lugares del mundo, lo que permite repartir la carga de trabajo entre ellos.
Si se desea definir una zona para la red de la organización, deberá existir al menos un servidor DNS que guarde la información de configuración de esta. En caso de que no se defina ninguna zona, los servidores DNS existentes funcionaran como cache de nombres exclusivamente.

Esto quiere decir que el servidor no define ninguna zona y se limita solamente a recibir peticiones de los equipos y buscar en su cache para ver si las puede resolver. Si no las puede resolver, reenvía esas solicitudes a otros servidores conocidos.
El uso de servidores cache de nombres puede acelerar el acceso a una red de área extensa, ya que la resolución de nombres es mucho más rápida.

El establecimiento de las zonas de los dominios se basa en gran medida en cuestiones relativas al tamaño de la organización y subdominios definidos, velocidades de los enlaces que comunican los servidores DNS, tasa de tráfico esperada entre ellos, etc. Por estas razones en muchas organizaciones grandes suele ser complicado establecer criterios concretos para la división en zonas.
La información de zona está estructurada en forma de registros de recursos. Estos registros de recursos son entradas a una tabla estática donde se especifican las direcciones IP y los nombres de los equipos que forman el dominio. Además se suele incluir más información sobre un dominio.

En algunas situaciones puede resultar conveniente crear un subdominio en una zona distinta a la que se encuentra el dominio padre. Será la zona que contiene el dominio padre la que autorice y delegue el control a la nueva zona para que gestione el subdominio de forma automática.



Tipos de registros de zonas en los servidores DNS:


TIPO
DESCRIPCIÓN
A
Asocia un nombre de dominio de equipo con su dirección IP.
AAAA
Asocia un nombre de dominio de equipo con su dirección IPv6 completa de 128 bits.
A6
Asocia un nombre de dominio de equipo con su dirección IPv6, pero especifica direcciones fragmentadas.
CNAME
Se utiliza para asignar otro nombre (alias) de un nombre de dominio de equipo.
HINFO
Guarda información adicional de un equipo, como el tipo de CPU o el SO instalado.
MX
Registra un servidor de correo.
NS
Es una referencia a los nombre de dominios DNS de servidores que tienen autoridad para una zona.
PTR
Asigna una dirección IP a un nombre de dominio para llevar a cabo correspondencias inversas.
SOA
Es el primer registro o punto de partida que se crea cuando se agrega una nueva zona.

La base de datos de una zona esta almacenada en un servidor DNS primario, de forma que todos los dominios que contiene esta se gestionan desde el equipo. Aunque no resulta conveniente mantener un único servidor primario para la zona, ya que en caso de fallo, no se podrán resolver las direcciones. En la configuración también se pueden configurar uno o más servidores secundarios, que se encargan de mantener copias actualizadas de la información de zona. La actualización se realiza mediante volcados totales o parciales de la información de zona, llamados transferencias de zona (total). Las transferencias parciales se llaman transferencias de zona incrementales (parcial) y, a veces, se utilizan con el propósito de reducir la cantidad de información que se transmite por la red. Los servidores DNS primarios pueden notificar a los secundarios que se ha producido una modificación en la zona, con el fin de actualizar sus informaciones de zona lo antes posible.

El protocolo DNS utiliza una base de datos distribuida por la red en ordenadores llamados servidores DNS, que almacenan tablas de correspondencias entre direcciones de nombres de dominio y direcciones IP. Cuando una estación desea establecer una conexión con una dirección DNS, llama a la rutina del sistema o “resolvedor” que primero comprueba si puede obtener la dirección IP a través de una tabla local o almacenada de forma temporal de una consulta anterior. Si no la encuentra en su tabla, envía un mensaje con el protocolo UDP a la dirección del servidor DNS que tenga configurado por defecto. Este servidor consulta primero en sus registros de recursos de zona la dirección solicita y devuelve la dirección IP si la encuentra. Si no la encuentra, consultara la tabla local donde están almacenadas temporalmente consultas anteriores. Si tampoco lo encuentra ahí, puede consultar en otros servidores DNS. Esta operación es denominada consulta recursiva.

Los servidores DNS son capaces de resolver correspondencia directa, es decir, recibida una dirección de nombre, estos devuelven la dirección IP asociada. Además, también son capaces de resolver correspondencias inversas, devolviendo una dirección de nombre cuando reciben una solicitud con una dirección IP.

El problema es que conforme se ha organizado el espacio de nombres de los dominios y estos en las zonas, estas consultas deben hacer una búsqueda en todos los dominios de la red. Para solucionar este problema DNS se ha reservado el dominio especial “in-addr.arpa” o “ip6.arpa”.

Los registros que guardan estas correspondencias inversas se llaman punteros de registro de recursos (PTR). Es posible que la herramienta de administración del servidor DNS cree automáticamente las resoluciones inversas, aunque a veces hay que establecerlas manualmente.

Con el fin de facilitar la administración de zonas en los servidores DNS, algunos sistemas operativos para estaciones permiten la actualización dinámica. Esta consiste en que la estación cliente notifica de forma automática al servidor DNS cualquier cambio en su dirección IP o nombre de dominio. Así, el administrador de la zona no tendrá que configurar ese nuevo registro en el servidor, ya que este lo hará automáticamente cuando reciba la notificación de la estación cliente.
Cuando un dominio aumenta de tamaño e incluye una gran cantidad de subdominios asociados, puede resultar demasiado complejo mantener un solo servidor DNS primario para esa zona. En su lugar se pueden crear zonas de delegación que permiten llevar algunos de esos subdominios a otros servidores DNS primarios.  De esta forma cada servidor DNS primario va a funcionar como autoridad para una parte del dominio. 

2.2 Registro de un dominio en internet

Cuando se configura un domino en una red local y se establecen los nombres de los equipos, esta organización puede permanecer oculta dentro del ámbito de esa red o puede difundirse a Internet para que el dominio sea publico en el exterior. Si el dominio va a ser visible en Internet, existe un mecanismo de reserva y asignación de dominios para evitar que se dupliquen, de la misma forma que se realizan las asignaciones de direcciones IP. El ICANN es el organismo encargado de acreditar a las empresas para que ofrezcan servicios de registro único de dominios.
Si el dominio va a permanecer oculto dentro del ámbito de la red local, no es necesario reservar ningún nombre de dominio de Internet, simplemente se puede utilizar el que se desee.

2.3 Cuestiones relativas a la seguridad

El correcto funcionamiento del servidor DNS resulta crítico dentro del ámbito de Internet. Si este servicio falla o se interrumpe, los usuarios no podrán conectar con los servidores de Internet, puesto que no conocen sus direcciones Ipv4 o Ipv6 asociadas. Además, debe ser completamente seguro, para evitar los sabotajes y la suplantación de direcciones. Cuando un usuario envía una petición de resolución, tiene que tener la garantía de que la dirección que obtenga es la autentica, porque eso puede comprometer su propia seguridad.

Para evitar problemas, los servidores DNS establecen relaciones de confianza entre ellos, utilizando técnicas de cifrado y autenticación para realizar transferencias de zona y consultas recursivas. Estas técnicas se incluyen en el DNSSEC (DNS Security Extensions).

Información Aportada por: Miguel Angel García Soto

DHCP

ASIGANCION DINAMICA DE DIRECCIONES

El servicios DHCP (Dinamic Host Configuration Protocol), Si bien no es imprescindible para que una red de ordenadores funcione correctamente, si que resulta muy adecuado para simplificar las tareas de configuración y administración. DHCP permite a los equipos obtener su configuración de red de forma automática. Esto permite a los administradores ahorrarse mucho trabajo si tienen que configurar nuevos equipos o hacer cambios en los ya existentes.

Para que un usuario pueda comunicarse a una red, primero necesita instalar en su equipo una serie de programas, que contienen todos los pasos que se deben seguir para establecer las conexiones, realizar transferencia de información, controlar errores… Este conjunto de normas resulta muy importante, ya que sin ellos no estarían disponibles los servicios necesarios a bajo y alto nivel. El paquete que es necesario instalar es TCP/IP además de configurar correctamente sus parámetros más importantes como la dirección IP, mascara de subred, puerta de enlace, direcciones IP de los servidores DNS… Se puede realizar de forma normal o automática desde un servidor DHCP.



El protocolo DHCP establece una configuración predeterminada para el equipo que la solicita, es decir, una configuración que ha sido definida con antelación para la red o subred en la que están conectados los equipos. La utilización del protocolo IPv6 permite otro mecanismo de configuración automática, en el que el propio equipo es el que decide qué dirección IP va a utilizar, en base a la información que puede obtener de la red a la que está conectado y asegurándose de que ningún otro equipo la va a utilizar.

Aunque IPv6 todavía no se ha generalizado en internet, se espera que los dos tipos coexistan, e incluso se complementen, ya que IPv6 permite que un equipo pueda autoconfigurar su propia dirección a la vez que obtener el resto de parámetros de red e un servidor DHCPv6.

1.1 FUNCIONAMIENTO DHCP

Apareció en la década de los 90 con el objetivo de mejorar el protocolo BOOTP que se utilizaba en máquinas UNIX para asignar direcciones a ciertos dispositivos que trabajaban en redes locales.

Cualquier ordenador conectado a internet necesita de una dirección IP que le distinga del resto. Por lo tanto, deberá existir un mecanismo que organice las direcciones y ponga de acuerdo a todo el mundo para que no exista ninguna dirección duplicada.

Para “ordenar” Internet con cientos de millones de equipos conectados, existe una autoridad central que se encarga de asignar conjuntos de direcciones a organismos y empresas. A este grupo pertenecen las empresas proveedoras de acceso a internet, que son las que asignan las direcciones a sus clientes. Para simplificar esta asignación las empresas utilizan el protocolo DHCP, de forma que los usuarios finales obtienen una dirección de forma automática sin necesidad de realizar ninguna configuración en sus equipos.

DHCP puede utilizarse también dentro del ámbito de una red local y los ordenadores deben solicitar una dirección a una estación especial que funciones como servidor DHCP.Esta estación mantiene una tabla de direcciones asignadas IPs cuando realmente se conecta y hacen uso de la red y permanecen libre mientras no se necesitan, lo que ahorra dirección que pueden asignarse a otras estaciones. Se reducen las tareas de los administradores cuando hay que cambiar de lugar estaciones ya que no hay que volver a configurarlas.

El protocolo DHCP es abierto, se puede utilizar sobre una red heterogenia. Así, un servidor DHCP Windows, MacOSx, GNU/Linux, Novell, etc., pueden asignar direcciones sin problema a estaciones Windows, MacOSx, GNU/Linux, etc.Hay que recalcar que en la configuración de un equipo cliente no se especifica la dirección IP del servidor DHCP. El protocolo establece que las estaciones puesto que no tienen IP asignada y no conocen direcciones de servidores ni mascaras de red, deben lanzar, una petición usando el protocolo UDP a la dirección de difusión.

Todos los servidores DHCP contestan con una dirección IP, también con un mensaje UDP de difusión. El cliente tomara uno de esas dirección y enviare un mensaje de difusión anunciando a todos los servidores cual es la IP tomada. Por último, el servidor que ha ofrecido la IP asignada envía al cliente la confirmación de la operación y actualiza sus tablas con las direcciones asignadas y libres.




Dependiendo de la implementación que se realice del servidor DHCP, es posible que su comportamiento cambie de unas versiones a otras. Algunas versiones actuales de los servidores DHCP disponibles para GNU/Linux realizan comprobaciones adicionales antes de asignar las direcciones a los clientes. En estos casos, cuando un servidor DHCP recibe una petición de un cliente, comprueba su tabla de direcciones libres, y para asegurarse de que esa dirección no está siendo utilizada por ningún otro equipo en la red, envía un mensaje eco ICMP a esa dirección. Si un equipo contesta, es que esa dirección ha sido asignada de forma manual y la marca como “abandonada” para no asignarla a ningún cliente. Si no contesta ningún equipo, entonces se asigna esa dirección.

En caso de que no existan direcciones libres a asignar dentro del rango, el servidor vuelve a comprobar con mensajes eco ICMP si alguna de las direcciones abandonadas esta libre.

Es posible que exista más de un servidor DHCP en la misma red y, para qué no se produzcan conflictos, cada uno de ellos debe asignar un rango de direcciones distinto.

Cuando un cliente no es capaz de conectarse con servidor DHCP, para obtener su dirección IPv4, entonces utiliza la asignación APIPA, que consiste en la utilización de las direcciones IP de la red: 169.254.0.0/16. Existen algunos S:O que incluyen la asignación por DHCP, lo que puede resultar muy útil cuando se dispone de un equipo portátil que se usa en diferentes redes.

1.1.2 PARÁMETROS EN EL SERVIDOR

En la configuración de un servidor DHCP hay que tener en cuenta que este no puede asignarse direcciones IP a sí mismo.

El sistema operativo instalado en el servidor DHCP debe tener soporte para enviar paquetes de difusión.

Para que los mensajes sean enviados correctamente a través de las direcciones de difusión, es necesario que el equipo tenga también una entrada en su tabla de encaminamiento que especifique cual es la dirección de difusión en la red.

Cuando se ha comprobado que todo lo anterior está configurado correctamente, lo que hay que hacer es instalar el programa que contiene todos los archivos necesarios de proceso servidor DHCP. Puede variar según el S.O.


Un servidor DHCP debe incluir:
  • Dirección IP de la red 
  • Mascara de red 
  • Direcciones IP de las Subredes 
  • Mascaras de las subredes 
  • Puerta de enlace predeterminada 
  • Direcciones IP de los servidores DNS 
  • Nombre de dominio de la red o subredes 
  • Dirección de difusión de la red o subredes 
  • Rango de direcciones a asignar a los clientes 
  • Dirección IP,Mac y nombre de los equipos que tendrán siempre las mismas direcciones.

1.1.3 PARÁMETROS EN EL CLIENTE

Los parámetros necesarios para que un cliente obtenga su configuración de red son mínimos, de forma que la mayoría de ellos no tengan que ser especificados de forma manual. DHCP funciona por mensajes de difusión, lo que evita tener que especificar direcciones de servidores que puedan cambiar con el tiempo.

Para que un cliente pueda enviar y recibir mensajes de difusión de la red, necesita que el S.O esté preparado para ello.


Información Aportada por: Miguel Angel García Soto

Base de Datos

HISTORIA BASE DE DATOS


Los servidores de bases de datos surgen en la década del 80 con motivo de la necesidad de las empresas de manejar grandes y complejos volúmenes de datos, al tiempo que requieren compartir la información con un conjunto de clientes (que pueden ser tanto aplicaciones como usuarios) de una manera segura y debe proporcionar servicios de forma global y, en la medida de lo posible,independientemente de la plataforma.

Servidor de Base de Datos


Para bases de datos con múltiples usuarios sirve un servidor de base de datos. Las bases de datos están situadas en un servidor y se puede acceder a ellas desde terminales o equipos con un programa -llamado cliente- que permita el acceso a la base o bases de datos. Los gestores de base de datos de este tipo permiten que varios usuarios hagan operaciones sobre ella al mismo tiempo: un puede hacer una consulta al mismo tiempo que otro, situado en un lugar diferente, está introduciendo datos en la base.

La seguridad


En todo sistema abierto, debe proporcionarse un potente mecanismo de seguridad que garantice que ningún intruso pueda acceder o corromper la integridad del sistema, en servidores de base de datos hablaremos de la seguridad a 4 niveles básicos:
  • seguridad de acceso al sistema. 
  • seguridad a nivel de objetos de datos. 
  • seguridad a nivel de datos. 
  • seguridad en cuanto a protección de los almacenamientos físicos de los datos.
La seguridad de acceso se implementa de dos maneras posibles: a nivel de sistema operativo, en cuyo caso el SGBD se apoya en la seguridad de entrada al sistema operativo para comprobar la validez del acceso a los datos almacenados; o bien lo que se llama modo mixto, en el cual la seguridad de entrada a la información la llevará a cabo el propio servidor de datos a partir de la definición de cuentas de usuario al servidor (su denominación de mixta proviene de la capacidad de los sistemas de incluir como cuentas de acceso o login áquellas propias del sistema operativo, lo que facilita la transición de las cuentas de seguridad). La segunda es de gran ayuda cuando los clientes que acceden al sistema provienen de sistemas operativos con poca (o ninguna) seguridad o de aplicaciones instaladas que necesiten acceder a los volúmenes de información del sistema. En ambos casos, en los sistemas se contará con roles o papeles con los que contará el usuario al entrar al sistema para la realización de determinadas operaciones de cara al sistema.

La seguridad a nivel de objetos es el acceso a nivel de creación y administración de objetos de datos: tablas, vistas, índices, relaciones, reglas...etc. Es decir, las responsabilidades y acciones que puede hacer el usuario en el esquema de la base de datos (el esqueleto a partir del cual el sistema definirá cómo se debe almacenar y relacionar la información). Este podrán especificar de nuevo roles a los usuarios, indicando quién podrá crear, modificar o eliminar cualquier objeto de datos (con lo que se permite establecer una política de delegación de responsabilidades).

La seguridad a nivel de datos accede a la  información para su consulta, actualización, inserción o borrado y las características de los diversos motores, los que determinarán hasta qué grado de seguridad se llega en este apartado (desde la protección de las columnas de una tabla hasta la tabla en si, creación de vistas...etc.).

La seguridad a nivel de protección de los almacenamientos físicos de la información. es la seguridad a nivel de sistema operativo de los archivos de datos del sistema, y las políticas de copia de seguridad y restauración de los datos (tanto con herramientas del sistema operativo como las proporcionadas por el propio servidor de datos) junto con sus posibles aproximaciones (total, incremental y diferencial), además de los soportes hardware compatibles de almacenamiento masivo empleados como destino de las copias.

El soporte de red


Los servidores de datos deben proporcionar mecanismos de comunicación óptimos, pues de cómo se envíe la información dependerán parámetros tan importantes como la velocidad de acceso a los datos. Todos los sistemas gestores analizados cuentan con múltiples configuraciones de protocolos, adaptándose a los protocolos existentes y estandarizados de la actualidad: TCP/IP, IPX, Banyan, ect; es importante no sólo el canal de comunicaciones que está disponible para los servidores de datos sino también cómo es transmitida la información.

Servidores de Bases de Datos



  • MySQL Server -- Base de dato de código abierto muy popular, pequeño y rápido.
  •  Postgre SQL -- Base de datos de código abierto, es un servidor de base de datos relacional orientada a objeto publicado bajo licencia libre BSD. 
  • Oracle-XE -- Versión "lite" del RDBMS de Oracle (gratuita pero no de código abierto). 

Información Aportada por: Miguel Angel García Soto

SISTEMAS GESTORES DE BASES DE DATOS

Base de Datos o Banco de Datos (BB.DD.). Es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta.

Sistema Gestor de Base de Datos. Un Sistema Gestor de Base de Datos (SGBD, en inglés DBMS: DataBase Management System) es un sistema de software que permite la definición de base de datos; así como la elección de las estructuras de datos necesarios para el almacenamiento y búsqueda de los datos, ya sea de forma interactiva o a través de un lenguaje de programación. Un SGBD relacional es un modelo de datos que facilita a los usuarios describir los datos que serán almacenados en la base de datos junto con un grupo de operaciones para manejar los datos.

Los SGBD relacionales son una herramienta efectiva que permite a varios usuarios acceder a los datos al mismo tiempo. Brindan facilidades eficientes y un grupo de funciones con el objetivo de garantizar la confidencialidad, la calidad, la seguridad y la integridad de los datos que contienen, así como un acceso fácil y eficiente a los mismos

MySQL


MySQL es un sistema gestor de bases de datos relacionales rápido, sólido y flexible. Es idóneo para la creación de bases de datos con acceso desde páginas web dinámicas, así como para la creación de cualquier otra solución que implique el almacenamiento de datos, posibilitando realizar múltiples y rápidas consultas. Está desarrollado en C y C++, facilitando su integración en otras aplicaciones desarrolladas también en esos lenguajes.
Es un sistema cliente/servidor, por lo que permite trabajar como servidor multiusuario y de subprocesamiento múltiple, o sea, cada vez que se crea una conexión con el servidor, el programa servidor establece un proceso para manejar la solicitud del cliente, controlando así el acceso simultáneo de un gran número de usuarios a los datos y asegurando el acceso a usuarios autorizados solamente. Es uno de los sistemas gestores de bases de datos más utilizado en la actualidad, utilizado por grandes corporaciones como Yahoo! Finance, Google, Motorola, entre otras.

MySQL


SQL Server es un sistema gestor de base de datos relacionales producido por Microsoft. Es un sistema cliente/servidor que funciona como una extensión natural del sistema operativo Windows. Entre otras características proporciona integridad de datos, optimización de consultas, control de concurrencia y backup y recuperación.
Es relativamente fácil de administrar a través de la utilización de un entorno gráfico para casi todas las tareas de sistema y administración de bases de datos.
Utiliza servicios del sistema operativo Windows para ofrecer nuevas capacidades o ampliar la base de datos, tales como enviar y recibir mensajes y gestionar la seguridad de la conexión. Es fácil de usar y proporciona funciones de almacenamiento de datos que sólo estaban disponibles en Oracle y otros sistemas gestores de bases de datos más caros.

PostgreSQL


PostgreSQL es un Sistema Gestor de Bases de Datos Relacionales Orientadas a Objetos, derivado de Postgres, desarrollado en la Universidad de California, en el Departamento de Ciencias de la Computación de Berkeley. Es un gestor de bases de datos de código abierto, brinda un control de concurrencia multi-versión (MVCC por sus siglas en inglés) que permite trabajar con grandes volúmenes de datos; soporta gran parte de la sintaxis SQL y cuenta con un extenso grupo de enlaces con lenguajes de programación.
Posee características significativas del motor de datos, entre las que se pueden incluir las subconsultas, los valores por defecto, las restricciones a valores en los campos (constraints) y los disparadores (triggers). Ofrece funcionalidades en línea con el estándar SQL92, incluyendo claves primarias, identificadores entrecomillados, conversión de tipos y entrada de enteros binarios y hexadecimales.
El código fuente se encuentra disponible para todos sin costo alguno. Está disponible para 34 plataformas con la última versión estable.Es totalmente compatible con ACID (acrónimo de Atomicity, Consistency, Isolation and Durability; en español: Atomicidad, Consistencia, Aislamiento y Durabilidad).
Posee una integridad referencial e interfaces nativas para lenguajes como ODBC, JDBC, C, C++, PHP, PERL, TCL, ECPG; PYTHON y RUBY. Funciona en todos los sistemas operativos Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64), y Windows.
Debido a la liberación de la licencia, PostgreSQL se puede usar, modificar y distribuir de forma gratuita para cualquier fin, ya sea privado, comercial o académico.


Información Aportada por: Miguel Angel García Soto

CONCEPTOS


En la actualidad, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital (electrónico), que ofrece un amplio rango de soluciones al problema de almacenar datos.

Existen programas denominados sistemas gestores de bases de datos (en inglés: database management system, abreviado DBMS) son un tipo de software muy específico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan.

Los hechos generales de los sistemas gestores de bases de datos, son los de manejar de manera clara, sencilla y ordenada un conjunto de datos que posteriormente se convertirán en información relevante para una organización.

Conceptos Generales Fundamentales



  • Base de Datos. Conjuntos de datos interrelacionados entre sí y su fin es servir a uno o varios usuarios, sin redundancias perjudiciales e innecesarias, es independiente de la aplicación que la utilice y tiene operaciones específicas. 
  •  Sistema de Gestión de Bases de Datos (SGBD). Son software que dirigen y controlan todas las gestiones que realiza las BD. 
  •  Administrador de la BD. Diseñar la organización de la BD, elegir el software que se va a utilizar, dar mantenimiento a la BD y consultar a los usuarios.
  •  Entidad. Objeto del Mundo Real. Existe información descriptiva sobre él.
  •  Instancia. Es la información contenida en la BD en un momento determinado. 
  •  Atributos. Son los que describen la entidad. Se divide en dos grupos:
    1. Identificadores. Identifican de manera única cada instancia.
    2. Descriptores. Identifican las instancias y pueden.
      • Clave Primaria. Es la que permite la identificación única de una instancia.
      • Interrelaciones. Es la que permite relacionar y acoplar dos o más entidades: Modelo Entidad-Relación.
      • Clase Sociedad. Es la participación que tiene cada Instancia de la entidad en la interrelación. Si participan todas las Instancias estamos en presencia de Clase Sociedad Obligatoria.

Funcionalidad de las Interrelaciones:
  1. Uno a Uno (1:1)
  2. La interrelación "Dirige" entre las Entidades "Jefe" y "Departamento". Significa que un "Departamento" tiene como máximo un "Jefe" y un "Jefe" es dirigente de un "Departamento". Cuando ocurre este tipo de funcionalidad el Atributo Primo de la Entidad "Jefe" pasa como Llave Extranjera para la Entidad "Departamento" o viceversa.
  3. Uno a Muchos (1: N)
  4. Cuando ocurre este tipo de funcionalidad y la interrelación es Obligatoria el Atributo Primo de la Entidad "Jefe" pasa como Llave Extranjera para la Entidad "Empleado". Si el caso es Opcional, es cuando al menos uno de los elementos no pasa por la interrelación entonces se forma una nueva Entidad que contiene los Atributos Primos de cada Entidad, más otros datos de interés.
  5. Muchos a Muchos (M: N)
  6. En este caso es igual que cuando es de Uno a Muchos Opcional entonces se forma una nueva Entidad que contiene los Atributos Primos de cada Entidad, más otros datos de interés

Objetivos de los Sistemas Gestores de bases de datos (SGBD)


  • Abstracción de la información
  • Los SGBD ahorran a los usuarios detalles acerca del almacenamiento físico de los datos. Da lo mismo si una base de datos ocupa uno o cientos de archivos, este hecho se hace transparente al usuario. Así, se definen varios niveles de abstracción.
  • Independencia
  • La independencia de los datos consiste en la capacidad de modificar el esquema (Físico o Lógico) de una base de datos sin tener que realizar cambios en las aplicaciones que se sirven de ella.
  • Consistencia
  • En aquellos casos en los que no se ha logrado eliminar la redundancia, será necesario vigilar que aquella información que aparece repetida se actualice de forma coherente, es decir, que todos los datos repetidos se actualicen de forma simultánea. Por otra parte, la base de datos, representa una realidad determinada que tiene determinadas condiciones, por ejemplo, que los menores de edad no pueden tener licencia de conducir. El sistema no debería aceptar datos de un conductor menor de edad. En los SGBD existen herramientas que facilitan la programación de este tipo de condiciones.
  • Seguridad
  • La información almacenada en una base de datos puede llegar a tener un gran valor. Los SGBD deben garantizar que esta Información se encuentra segura de permisos a usuarios y grupos de usuarios, que permiten otorgar diversas categorías de permisos.
  • Manejo de transacciones
  • Una transacción es un programa que se ejecuta como una sola operación. Esto quiere decir que luego de una ejecución en la que se produce una falla es el mismo que se obtendría si el programa no se hubiera ejecutado. Los SGBD proveen mecanismos para programar las modificaciones de los datos de una forma mucho más simple que si no se dispusiera de ellos.
  • Tiempo de respuesta
  • Lógicamente, es deseable minimizar el tiempo que el SGBD tarda en darnos la información solicitada y en almacenar los cambios realizados.
Ventajas de los SGBD 

Proveen facilidades para la manipulación de grandes volúmenes de datos. Entre éstas se encuentran:
  • Simplifican la programación de equipos de consistencia.
  • Manejando las políticas de respaldo adecuadas, garantizan que los cambios de la base serán siempre consistentes sin importar si hay errores correctamente, etc.
  • Organizan los datos con un impacto mínimo en el Código de los programas.
  • Bajan drásticamente los tiempos de desarrollo y aumentan la calidad del sistema desarrollado si son bien explotados por los desarrolladores.
  • Usualmente, proveen interfaces y lenguajes de consulta que simplifican la Recuperación de los datos.
Inconvenientes
  1. Típicamente, es necesario disponer de una o más personas que administren de la base de datos, en la misma forma en que suele ser necesario en instalaciones de cierto porte disponer de una o más personas que administren los sistemas operativos. Esto puede llegar a incrementar los costos de operación en una Empresa. Sin embargo hay que balancear este aspecto con la calidad y confiabilidad del sistema que se obtiene.
  2. Si se tienen muy pocos Datos que son usados por un único Usuario por vez y no hay que realizar Consultas complejas sobre los Datos, entonces es posible que sea mejor usar una Planilla de cálculo.
  3. Complejidad: los Software muy complejos y las personas que vayan a usarlo deben tener conocimiento de las funcionalidades del mismo para poder aprovecharlo al máximo.
  4. Tamaño: la complejidad y la gran cantidad de funciones que tienen hacen que sea un Software de gran tamaño, que requiere de gran cantidad de memoria para poder correr.
  5. Coste del hardware adicional: los requisitos de Hardware para correr un SGBD por lo general son relativamente altos, por lo que estos equipos pueden llegar a costar gran cantidad de dinero.

Modelos de bases de datos


demás de la clasificación por la función de las bases de datos, éstas también se pueden clasificar de acuerdo a su modelo de Administración de datos.Un modelo de datos es básicamente una "descripción" de algo conocido como contenedor de datos (algo en donde se guarda la información), así como de los métodos para almacenar y recuperar información de esos contenedores. Los modelos de datos no son cosas físicas: son abstracciones que permiten la implementación de un sistema eficiente de base de datos; por lo general se refieren a Algoritmos, y Conceptos matemáticos.

Algunos modelos con frecuencia utilizados en las bases de datos:


Bases de datos jerárquicas
Éstas son bases de datos que, como su nombre indica, almacenan su información en una estructura jerárquica. En este modelo los datos se organizan en una forma similar a un árbol (visto al revés), en donde un nodo padre de información puede tener varios hijos. El nodo que no tiene padres es llamado raíz, y a los nodos que no tienen hijos se los conoce como hojas. Las bases de datos jerárquicas son especialmente útiles en el caso de aplicaciones que manejan un gran volumen de información y datos muy compartidos permitiendo crear estructuras estables y de gran rendimiento. Una de las principales limitaciones de este modelo es su incapacidad de representar eficientemente la redundancia de datos.

Bases de datos de red
Éste es un modelo ligeramente distinto del jerárquico; su diferencia fundamental es la modificación del concepto de nodo: se permite que un mismo nodo tenga varios padres (posibilidad no permitida en el modelo jerárquico). Fue una gran mejora con respecto al modelo jerárquico, ya que ofrecía una solución eficiente al problema de redundancia de datos; pero, aun así, la dificultad que significa administrar la información en una base de datos de Red ha significado que sea un modelo utilizado en su mayoría por programadores más que por usuarios finales.

Bases de datos transaccionales
Son bases de datos cuyo único fin es el envío y recepción de datos a grandes velocidades, estas bases son muy poco comunes y están dirigidas por lo general al entorno de análisis de calidad, datos de producción e industrial, es importante entender que su fin único es recolectar y recuperar los datos a la mayor velocidad posible, por lo tanto la redundancia y duplicación de información no es un problema como con las demás bases de datos, por lo general para poderlas aprovechar al máximo permiten algún tipo de conectividad a bases de datos relacionales.

Base de datos relacionales
Éste es el modelo utilizado en la actualidad para modelar problemas reales y administrar datos dinámicamente. Tras ser postulados sus fundamentos en 1970 por Edgar Frank Codd, de los laboratorios IBM en San José, no tardó en consolidarse como un nuevo paradigma en los modelos de base de datos. Su idea fundamental es el uso de "relaciones". Estas relaciones podrían considerarse en forma lógica como conjuntos de datos llamados "tuplas". Pese a que ésta es la teoría de las bases de datos relacionales creadas por Codd, la mayoría de las veces se conceptualiza de una manera más fácil de imaginar. Esto es pensando en cada relación como si fuese una tabla que está compuesta por registros (las filas de una tabla), que representarían las tuplas, y campos (las columnas de una tabla). En este modelo, el lugar y la forma en que se almacenen los datos no tienen relevancia (a diferencia de otros modelos como el jerárquico y el de red). Esto tiene la considerable ventaja de que es más fácil de entender y de utilizar para un usuario esporádico de la base de datos. La información puede ser recuperada o almacenada mediante "consultas" que ofrecen una amplia flexibilidad y poder para administrar la información. El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL, Structured Query Language o Lenguaje Estructurado de Consultas, un estándar implementado por los principales motores o sistemas de gestión de bases de datos relacionales. Durante su diseño, una base de datos relacional pasa por un proceso al que se le conoce como normalización de una base de datos. Durante los años 80 la aparición de DBASE produjo una revolución en los Lenguajes de programación y Sistemas de administración de datos. Aunque nunca debe olvidarse que DBase no utilizaba SQL como lenguaje base para su gestión.

Bases de datos multidimensionales
Son bases de datos ideadas para desarrollar aplicaciones muy concretas, como creación de Cubos Olap Básicamente no se diferencian demasiado de las bases de datos relacionales (una tabla en una base de datos relacional podría serlo también en una base de datos multidimensional), la diferencia está más bien a nivel conceptual; en las bases de datos multidimensionales los campos o atributos de una tabla pueden ser de dos tipos, o bien representan dimensiones de la tabla, o bien representan métricas que se desean estudiar.

Bases de datos orientadas a objetos
Este modelo, bastante reciente, y propio de los modelos informáticos orientados a objetos, trata de almacenar en la base de datos los objetos completos (estado y comportamiento).Una base de datos orientada a objetos es una base de datos que incorpora todos los conceptos importantes del paradigma de objetos:
    • Encapsulación. Propiedad que permite ocultar la información al resto de los objetos, impidiendo así accesos incorrectos o conflictos.
    • Herencia. Propiedad a través de la cual los objetos heredan comportamiento dentro de una jerarquía de clases.
    • Polimorfismo. Propiedad de una operación mediante la cual puede ser aplicada a distintos tipos de objetos.En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los datos como parte de la definición de la base de datos. Una operación (llamada función) se especifica en dos partes.

La Interfaz (o signatura) de una operación incluye el nombre de la operación y los tipos de datos de sus argumentos (o parámetros). La implementación (o método) de la operación se especifica separadamente y puede modificarse sin afectar la Interfaz. Los programas de aplicación de los usuarios pueden operar sobre los datos invocando a dichas operaciones a través de sus nombres y argumentos, sea cual sea la forma en la que se han implementado. Esto podría denominarse independencia entre Programas y Operaciones. SQL:2003, es el estándar de SQL9.2 ampliado, soporta los conceptos orientados a objetos y mantiene la compatibilidad con SQL9.2.

Bases de datos documentales
Permiten la Indexación a texto completo, y en líneas generales realizar búsquedas más potentes. Tesaurus es un sistema de Índices optimizado para este tipo de bases de datos.

Bases de datos deductivas
Un sistema de base de datos deductiva, es un sistema de base de datos pero con la diferencia de que permite hacer deducciones a través de inferencias. Se basa principalmente en reglas y hechos que son almacenados en la base de datos. Las bases de datos deductivas son también llamadas bases de datos lógicas, a raíz de que se basa en lógica matemática.

Gestión de bases de datos distribuida
La base de datos está almacenada en varias computadoras conectadas en Red. Surgen debido a la existencia física de organismos descentralizados. Esto les da la capacidad de unir las bases de datos de cada localidad y acceder así a distintas Universidades, sucursales de tiendas, etcétera.



Información Aportada por: Miguel Angel García Soto


Introducción a la seguridad informática

Las tecnologías de la información y la comunicación (TIC), y concretamente la informática, se han instalado en todos los ámbitos de la sociedad: sanidad, educación, finanzas, etc., siendo cada vez más útiles e imprescindible para el desarrollo de sus actividades cotidianas. Del mismo modo que se extiende el uso de la informática, la seguridad informática debe tener una importancia cada vez mayor, teniendo en cuenta que el funcionamiento correcto de sus sistemas depende en gran medida, de protegerlos como el mayor de sus tesoros.

La seguridad informática consiste en asegurar que los recursos del sistema de información de una organización sean utilizados de la manera en que se decidió y que el acceso a la información allí contenida, así como su modificación, solo sea posible a las personas que se encuentran acreditadas y dentro de los límites de su autorización.

Los principales objetivos de la seguridad informática por tanto son:
  • Detectar los posibles problemas y amenazas a la seguridad, minimizando los riesgos.
  • Garantizar la adecuada utilización de los recursos y de las aplicaciones de los sistemas.
  • Limitar las pérdidas y conseguir la adecuada recuperación del sistema en caso de un incidente de seguridad.
  • Cumplir con el marco legal y con los requisitos impuestos a nivel organizativo.

El conjunto de vulnerabilidades, amenazas, ataques y medidas de seguridad han ido aumentando y modificándose con el tiempo, siendo necesario estar al día en esta materia. La comunidad de usuarios y profesionales en materia de seguridad informática mantienen al día al resto de usuarios mediante noticias y post en blogs y webs especializadas. Sirva como ejemplo el blog de seguridad informática disponible en la web del Instituto Nacional de Tecnologías de la comunicación S.A. (INTECO), sociedad anónima estatal adscrita a la secretaría de Estado de Telecomunicaciones y para la Sociedad de la Información.


Información Aportada por: Miguel Angel García Soto

Fiabilidad, Confidencialidad, Integridad y Disponibilidad

Según la Real Academia de la Lengua, seguridad es la cualidad de seguro, es decir, libre y exento de todo daño, peligro o riesgo.

En informática, podemos entender como seguridad la característica de un sistema informático, (ya sean sistemas operativos, servicios o aplicaciones), que nos indica que está libre de todo peligro, daño o riesgo, y que es, en cierta manera infalible. Como esta característica, es muy difícil de conseguir (según la mayoría de los expertos, imposible), se suaviza la definición de seguridad y se pasa a hablar de fiabilidad, que es la probabilidad de que un sistema se comporte tal y como se espera de él. Por tanto, se habla de tener sistemas fiables en lugar de sistemas seguros.

De los sistemas informáticos, se dice que son seguros si cumplen las siguientes características:
  • Confidencialidad:
  • Requiere que la información sea accesible únicamente por las entidades autorizadas. De esta manera, se dice que un documento (o archivo o mensaje) es confidencial si y sólo si puede ser comprendido por la persona o entidad a quien va dirigida o esté autorizada. En el caso de un mensaje esto evita que exista una intercepción de este y que pueda ser leído por una persona no autorizada.

    Por ejemplo, si Andrea quiere enviar un mensaje a Bruno y que solo pueda leerlo Bruno, Andrea cifra el mensaje con una clave (simétrica o asimétrica), de tal modo que solo Bruno sepa la manera de descifrarlo, así ambos usuarios están seguros de que solo ellos van a poder leer el mensaje.


  • Integridad:
    Es la cualidad de un mensaje, comunicación o archivo, que permite comprobar que no se ha producido manipulación alguna en el original, es decir, que no ha sido alterado.


  • Teniendo como muestra el ejemplo anterior. El destinatario compara ambas funciones resumen, (se trata de una función que produce un valor alfanumérico que identifica cualquier cambio que se produzca en el mensaje), y si estas funciones son iguales, quiere decir que no ha existido manipulación en el mismo.

  • Disponibilidad:

  • Se trata de la capacidad de un servicio, de unos datos o de un sistema, a ser accesible y utilizable por los usuarios (o procesos) autorizados cuando estos lo requieran. Supone que la información pueda ser recuperada en el momento en que se necesite, evitando su pérdida o bloqueo.

    Hay que tener en cuenta que, tanto las amenazas como los mecanismos para contrarrestarlas, suelen afectar a estas tres características de forma conjunta. Así por ejemplo, fallos del sistema que hacen que la información no sea accesible pueden llevar consigo una pérdida de integridad. Generalmente tienen que existir los tres aspectos descritos para que haya seguridad.

    Dependiendo del entorno en que un sistema trabaje, a sus responsables les interesará dar prioridad a un cierto aspecto de seguridad. Por ejemplo, en un sistema militar se antepondrá la confidencialidad de los datos almacenados o transmitidos sobre su disponibilidad. En cambio, en un servidor de archivos en red, se priorizará la disponibilidad frente a la confidencialidad. En un entorno bancario, la faceta que más ha de preocupar a los responsables del sistema es la integridad de los datos, frente a su disponibilidad o su confidencialidad: es menos grave que un usuario consiga leer el saldo de otro que el hecho de que ese usuario pueda modificarlo.

    Junto a estos tres conceptos fundamentales se suelen estudiar conjuntamente la autenticación y el no repudio.

  • Autenticación:

  • La autenticación es la situación en la cual se puede verificar que un documento ha sido elaborado (o pertenece) a quien el documento dice.

    Aplicado a la verificación de la identidad de un usuario, la autenticación se produce cuando el usuario puede aportar algún modo de que se pueda verificar que dicha persona es quien dice ser, a partir de ese momento se considera un usuario autorizado. Se suele realizar mediante un usuario o login y una contraseña o password.

    No repudio o irrenuncibilidad: Está estrechamente relacionado con la autenticación y permite probar la participación de las partes en una comunicación. Existen dos posibilidades:
    • No repudio en origen: El emisor no puede negar el envío. La prueba la crea el propio emisor y la recibe el destinatario
    • No repudio en destino: El receptor no puede negar que recibió el mensaje porque el emisor tiene pruebas de la recepción. En este caso la prueba irrefutable la crea el receptor y la recibe el emisor.


Si la autenticidad prueba quién es el autor o el propietario de un documento y cuál es su destinatario, el no repudio prueba que el autor envió la comunicación (no repudio en origen) y que el destinatario la recibió (no repudio en destino).

Al grupo de estos tres objetivos de la seguridad se les conoce como CIDAN, nombre sacado de la inicial de cada característica. La relación de los mismos se presenta en la figura siguiente:



En la imagen superior se ilustra como se relacionan los diferentes servicios de seguridad, unos dependen de otros jerárquicamente, así si no existe el de más abajo, no puede aplicarse el superior. De esta manera, la disponibilidad se convierte en el primer requisito de seguridad, cuando existe esta, se puede disponer de confidencialidad, que es imprescindible para conseguir integridad, para poder obtener autenticación es imprescindible la integridad y por ultimo el no repudio solo se obtiene si se produce previamente la autenticación.

Alta disponibilidad:


La alta disponibilidad se refiere a la capacidad de que aplicaciones y datos se encuentren operativos para los usuarios autorizados en todo momento y sin interrupciones, debido principalmente a su carácter crítico. El objetivo de la misma es mantener nuestros sistemas funcionando las 24 horas del día, 7 días a la semana, 365 días al año, manteniéndolos a salvo de interrupciones, teniendo en cuenta que se diferencian dos tipos de interrupciones:

Las interrupciones previstas, que se realizan cuando paralizamos el sistema para realizar cambios o mejoras en nuestro software.

Las interrupciones imprevistas, que suceden por acontecimientos imprevistos (como un apagón, un error del hardware o del software, problemas de seguridad, un desastre natural, virus, accidentes, caídas involuntarias del sistema).

Las métricas comúnmente utilizadas para medir la disponibilidad y fiabilidad de un sistema son:

El tiempo medio ente fallos o MMTF (Mean Time To Failure) que mide el tiempo medio en el que se tiene alta probabilidad de que el sistema falle.

El tiempo medio de recuperación o MTTR (Mean Time To Recover) que mide el tiempo medio empleado en restablecerse la situación normal una vez que se ha producido el fallo.

Por lo tanto, podemos decir que el sistema tiene durante su vida, una media de tiempo para presentar fallas (MTTF) y un tiempo medio de reparación (MTTR). Su tiempo de la vida es una sucesión de MTTFs y MTTRs, a medida que este va fallando y siendo reparado. El tiempo de vida útil del sistema es la suma de MTTFs en ciclos MTTF + MTTR ya vividos.

En forma simplificada, se dice que la disponibilidad de un sistema es la relación entre la duración de la vida útil de este sistema y de su tiempo total de vida. Esto puede ser representado por la fórmula de abajo:

Disponibilidad = MTTF / (MTTF + MTTR)

En la evaluación de una solución de Alta Disponibilidad, es importante tener en cuenta si en la medición de MTTF son vistos como fallas las posibles paradas planificadas.

Lógicamente, nuestro principal objetivo es aumentar el MTTF y reducir el MTTR de forma que minimicemos el tiempo de no disponibilidad del servicio.

Existen distintos niveles de disponibilidad del sistema. Según el tiempo aproximado de inactividad por año se determina el porcentaje de disponibilidad. El mayor nivel de exigencia de alta disponibilidad acepta 5 minutos de inactividad al año, con lo que se obtiene una disponibilidad de 5 nueves: 99.999%.

Como ejemplos de sistemas y servicios de alta disponibilidad podemos mencionar sistemas sanitarios, control aéreo, de comercio electrónico, bancarios, transporte marítimo, militares, etc., donde la pérdida o interrupción de conectividad pueden suponer consecuencias personales y económicas.


Información Aportada por: Miguel Angel García Soto


Elementos vulnerables en el sistema informático: hardware, software y datos

La seguridad es un problema integral: los problemas de seguridad informática no pueden ser tratados aisladamente ya que la seguridad de todo el sistema es igual a la de su punto más débil. Al asegurar nuestra casa no sirve de nada ponerle una puerta blindada con una sofisticada puerta blindada si dejamos las ventanas sin protección.

La educación de los usuarios es fundamental para que la tecnología de seguridad pueda funcionar. Es evidente que por mucha tecnología de seguridad que se implante en una organización, si no existe una clara disposición por parte de los directivos de la empres y una cultura a nivel de usuarios, no se conseguirán los objetivos perseguidos con la implantación de un sistema de seguridad. Por tanto, la seguridad informática precisa de un nivel organizativo, que posibilite unas normas y pautas comunes por parte de los usuarios de sistemas dentro de una empresa, por lo que diremos que:

Sistema de seguridad = TECNOLOGÍA + ORGANIZACIÓN

Los tres elementos principales a proteger en cualquier sistema informático son el software, el hardware y los datos.

Habitualmente los datos constituyen el principal elemento de los tres a proteger, ya que es el más amenazado y seguramente el más difícil de recuperar: con toda seguridad un servidor estará ubicado en un lugar de acceso físico restringido, o al menos controlado, y además en caso de pérdida de una aplicación (o un programa del sistema, o el propio núcleo del sistema operativo) este software se puede restaurar sin problemas desde su medio original (por ejemplo el CD o DVD con el sistema operativo que se utilizó para su instalación). Sin embargo, en caso de pérdida de una base de datos o de un proyecto de un usuario, no tenemos un medio “original” desde el que restaurar, hemos de pasar obligatoriamente por un sistema de copias de seguridad, y a menos que la política de copias sea muy estricta, es difícil devolver los datos al estado en que se encontraban antes de la pérdida.

También debemos ser conscientes de que las medidas de seguridad que deberán establecerse se deben contemplar a diferentes niveles, desde aspectos más locales, personales o individuales hasta los globales que afectan a una organización, o incluso la ciudadanía y empresas en conjunto, como son las leyes.

Por tanto, la seguridad informática comprende el hardware y el sistema operativo, las comunicaciones (por ejemplo protocolos y medios de transmisión seguros), medidas de seguridad físicas (ubicación de los equipos, suministro eléctrico, etc.), los controles organizativos (políticas de seguridad de usuarios, niveles de acceso, contraseñas, normas, procedimientos, etc.) y legales (por ejemplo la Ley Orgánica de Protección de Datos, LOPD).

Así podemos hacer la siguiente división:

  1. Seguridad pasiva: Seguridad física y ambiental y copias de seguridad en los sistemas informáticos.
  2. Seguridad lógica: Control de acceso a los sistemas, gestión de sistemas operativos: usuarios, privilegios y contraseñas, software de seguridad antimalware y cifrado en la información y comunicaciones mediante el estudio de la criptografía.
  3. Seguridad en redes corporativas: estudiando protocolos y aplicaciones seguras, configuraciones seguras inalámbricas y protegiendo especialmente la seguridad perimetral mediante cortafuegos y proxy.
  4. Configuraciones de alta disponibilidad: mediante redundancia en el almacenamiento RAID, etc.
  5. Normativa legal en materia de seguridad informática.

Información Aportada por: Miguel Angel García Soto

Características y alternativas

Una aplicación web que reside en uno o varios servidores normalmente está estructurada en tres capas: servidor web, lógica de la aplicación y un sistema gestor de bases de datos (en adelante SGBD). El primero de ellos mantiene la comunicación con el navegador del usuario que es quién proporciona la interfaz de acceso al servicio web. La lógica de la aplicación está formada por los scripts o programas que se ejecutan en el servidor para atender las solicitudes del usuario, y el SGBD es el repositorio en el que se guardan los datos con los que trabaja el servicio. Las tres capas pueden estar montadas sobre una o varias máquinas dependiendo del volumen de carga que tenga que soportar el servicio, y todo corriendo sobre algún sistema operativo como GNU/Linux.

Aunque existen muchas alternativas, una de las más frecuentes está compuesta por el servidor web Apache, PHP como intérprete para la lógica de la aplicación y MySQL como SGBD, todo ello corriendo sobre GNU/Linux. A esta combinación se la llama LAMP para abreviar.


Información Aportada por: Miguel Angel García Soto

Servidor web

El servidor web se encarga la comunicación a través de la red con el navegador del usuario. Normalmente escucha en el puerto TCP 80 cuando se trata de una conexión HTTP, y en el TCP 443 cuando se trata de una HTTPS, aunque este parámetro es configurable. Cuando recibe una petición del usuario puede atenderla de manera estática cuando contesta con un fichero que está en el sistema de archivos (la descarga de una imagen, un fichero css o html) o de manera dinámica cuando se ejecuta algún programa y se envía al cliente el resultado de dicha ejecución.

El servidor web evidentemente es capaz de atender muchas peticiones de forma concurrente pudiendo realizar diferentes funciones habituales entre las que se encuentran:
  • Registro de actividad y errores
  • Control de acceso basado en la dirección del cliente, contenido o usuario/contraseña
  • Virtual Hosts, para mantener diferentes webs.
  • Proxy, para reenviar las peticiones a otro servidor
  • Reescritura de URLs
  • Alias o mapeados de rutas
Aunque existen diferentes alternativas Apache es el servidor web más utilizado en Internet. Se trata de una aplicación libre robusta y modular con una impresionante colección de funciones, pudiendo servir tanto para contenido estático como para prácticamente cualquier contenido dinámico.

Otras alternativas pueden ser:
  • Cherokee
  • Un servidor web más moderno que Apache con la pretensión de ser eficiente y fácil de configurar (tiene una interfaz web de administración). Está bajo la GPL.
  • NGINX
  • Orientado a sitios con una gran carga de trabajo en los que es necesario un gran rendimiento.
  • Tomcat
  • Contenedor de servlets para aplicaciones web escritas en Java.
  • Zope
  • Servidor de aplicaciones escrito en Python.

Información Aportada por: Miguel Angel García Soto

Capa de aplicaciones

En cualquier página web dinámica se ejecutan programas que determinan qué se debe responder a las solicitudes del usuario. Estos programas pueden estar escritos en una gran variedad de lenguajes de programación, una posible clasificación es: lenguajes compilados y lenguajes interpretados o scripts.

Los primeros obligan a compilar el código fuente antes de obtener un ejecutable, en líneas generales priman el rendimiento en tiempo de ejecución y cuando una aplicación se debe utilizar en diferentes plataformas debe ser compilada para cada una de ellas. Ejemplos típicos son los lenguajes C, C++ y Java.

Los lenguajes interpretados, o scripts, no necesitan ser compilados pues un programa llamado intérprete realiza las operaciones indicadas por el código fuente. En líneas generales permiten un desarrollo más rápido aunque no alcanzan en velocidad de ejecución a los lenguajes compilados. 
Ejemplos típicos son Bash, Perl, PHP, Python y Ruby.

SGBD - Sistema Gestor de Bases de Datos

Una aplicación sencilla puede trabajar únicamente con ficheros, pero en cuanto el servicio deja de ser trivial aparece la necesidad de utilizar un SGBD que organice la información con la que se trabaja.

La historia de las bases de datos es larga, pero en cuanto a lo que una introducción a aplicaciones web se refiere se puede resumir en diferentes modelos:
  • SGBD relacional:

  • Las más extendidas y con una larga vida por delante. Guardan la información en registros de tablas y mediante SQL se realizan consultas u operaciones para manipular los datos. Dependiendo de la herramienta utilizada hay grandes diferencies en cuanto a sus capacidades y administración, pero en general, para las aplicaciones web prima la velocidad sobre las características.

    Ejemplos de uso: MySQL y PostgreSQL
  • SGBD orientado a objetos:

  • En lugar de almacenar registros directamente guardan y recuperan objetos. De manera que cuando se utiliza un lenguaje de programación orientado a objetos nos ahorramos el trabajo de adaptar las entidades con las que trabajamos al modelo relacional.

    Ejemplos de uso: DB4O y Zope Object Database
  • SGBD NoSQL:

  • Aquí se agrupan un conjunto de técnicas diferentes que tienen en común que no cumplen con los requisitos ACID y/o no estructuran la información en tablas como las bases de datos relacionales. La ventaja es que consiguen romper algunas de las limitaciones de los sistemas relacionales en cuanto a escalabilidad y rendimiento permitiendo crear ingentes bases de datos distribuidas.

    Ejemplos de uso: Apache Cassandra y Apache CouchDB

Información Aportada por: Miguel Angel García Soto

Introducción a los sistemas operativos

Definiciones de los sistemas operativos


Un sistema operativo es un programa que actúa como intermediario entre el usuario y el hardware de un computador y su propósito es proporcionar un entorno en el cual el usuario pueda ejecutar programas. El objetivo principal de un sistema operativo es lograr que el sistema de computación se use de manera cómoda, y el objetivo secundario es que el hardware del computador se emplee de manera eficiente. Un sistema Operativo (SO) es en sí mismo un programa de computadora. Sin embargo, es un programa muy especial, quizá el más complejo e importante en una computadora. El SO despierta a la computadora y hace que reconozca a la CPU, la memoria, el teclado, el sistema de vídeo y las unidades de disco. Además, proporciona la facilidad para que los usuarios se comuniquen con la computadora y sirve de plataforma a partir de la cual se corran programas de aplicación.

Cuando enciendes una computadora, lo primero que ésta hace es llevar a cabo un autodiagnóstico llamado auto prueba de encendido (Power On Self Test, POST). Durante la POST, la computadora identifica su memoria, sus discos, su teclado, su sistema de vídeo y cualquier otro dispositivo conectado a ella. Lo siguiente que la computadora hace es buscar un SO para arrancar (boot).

Una vez que la computadora ha puesto en marcha su SO, mantiene al menos parte de éste en su memoria en todo momento. Mientras la computadora esté encendida, el SO tiene 4 tareas principales:
  • Proporcionar ya sea una interfaz de línea de comando o una interfaz gráfica al usuario, para que este último se pueda comunicar con la computadora. Interfaz de línea de comando: tú introduces palabras y símbolos desde el teclado de la computadora, ejemplo, el MS-DOS. Interfaz gráfica del Usuario (GUI), seleccionas las acciones mediante el uso de un Mouse para pulsar sobre figuras llamadas iconos o seleccionar opciones de los menús.
  • Administrar los dispositivos de hardware en la computadora. Cuando corren los programas, necesitan utilizar la memoria, el monitor, las unidades de disco, los puertos de Entrada/Salida (impresoras, módems, etc.). El SO sirve de intermediario entre los programas y el hardware.
  • Administrar y mantener los sistemas de archivo de disco. Los SO agrupan la información dentro de compartimientos lógicos para almacenarlos en el disco. Estos grupos de información son llamados archivos. Los archivos pueden contener instrucciones de programas o información creada por el usuario. El SO mantiene una lista de los archivos en un disco, y nos proporciona las herramientas necesarias para organizar y manipular estos archivos.
  • Apoyar a otros programas. Otra de las funciones importantes del SO es proporcionar servicios a otros programas. Estos servicios son similares a aquellos que el SO proporciona directamente a los usuarios. Por ejemplo, listar los archivos, grabarlos a disco, eliminar archivos, revisar espacio disponible, etc. Cuando los programadores escriben programas de computadora, incluyen en sus programas instrucciones que solicitan los servicios del SO. Estas instrucciones son conocidas como "llamadas del sistema"

¿Qué es un sistema operativo?


Un sistema operativo es el programa que oculta la verdad del hardware al programador y presenta una vista simple y agradable de los archivos nominados que pueden leerse y escribirse. El sistema operativo resguarda al programador del hardware del disco y presenta una interfaz simple orientada al archivo, también disimula mucho del trabajo concerniente a interrupciones, relojes o cronómetros, manejo de memoria y otras características de bajo nivel.

La función del sistema operativo es la de presentar al usuario con el equivalente de una máquina ampliada o máquina virtual que sea más fácil de programar que el hardware implícito.

Un sistema operativo es una parte importante de casi cualquier sistema de computación. Un sistema de computación puede dividirse en cuatro componentes: el hardware, el sistema operativo, los programas de aplicación y los usuarios.

El hardware (unidad central de procesamiento (UCP), memoria y dispositivos de entrada y salida (E/S)) proporciona los recursos de computación básicos. Los programas de aplicación (compiladores, sistemas de bases de datos, juegos de video y programas para negocios) definen la forma en que estos recursos se emplean para resolver los problemas de computación de los usuarios. Puede haber distintos usuarios (personas, máquinas, otros computadores) que intentan resolver problemas diferentes; por lo tanto es posible que haya diferentes programas de aplicación. El sistema operativo controla y coordina el uso del hardware entre los diversos programas de aplicación de los distintos usuarios Podemos ver al sistema operativo como un asignador de recursos. Un sistema de computación tiene muchos recursos (hardware y software) que pueden requerirse para resolver un problema: tiempo de la UCP, espacio de memoria, espacio de almacenamiento de archivos, dispositivos de E/S, etc. El sistema operativo actúa como el administrador de estos recursos y los asigna a usuarios y programas concretos según los necesiten las tareas de los usuarios.

Puesto que pueden surgir conflictos en las solicitudes de recursos, el sistema operativo debe decidir a que solicitudes se les asignaran para que el sistema de computación pueda funcionar de manera eficiente y justa.

En términos generales no hay una definición de sistema operativo completamente adecuada. Los sistemas operativos existen porque son una manera razonable de solucionar el problema de crear un sistema de computación utilizable.

Objetivos para la creación de los sistemas Operativos:
  • Transformar el complejo hardware de una computadora a una máquina accesible al usuario.
  • Lograr el mejor uso posible de los recursos. Hacer eficiente el uso del recurso.

El objetivo fundamental de los sistemas de computación es ejecutar los programas de los usuarios y facilitar la resolución de sus problemas. El hardware se construye con este fin, pero como este no es fácil de utilizar, se desarrollan programas de aplicación que requieren ciertas operaciones comunes, como el control de dispositivos de E/S. las funciones comunes de control y de asignación de recursos se integran para formar un solo fragmento de software: el sistema operativo.

Desarrollo histórico de los sistemas operativos:



En un principio solo existía el hardware del computador. Los primeros computadores eran (físicamente) grandes máquinas que se operaban desde una consola. El programador escribía un programa y luego lo controlaba directamente desde la consola. En primer lugar, el programa se cargaba manualmente en la memoria, desde los interruptores del tablero frontal (una instrucción en cada ocasión), desde una cinta de papel o desde tarjetas perforadas. Luego se pulsaban los botones adecuados para establecer la dirección de inicio y comenzar la ejecución del programa. Mientras este se ejecutaba, el programador operador lo podía supervisar observando las luces en la consola, si se descubrían errores, el programador podía detener el programa, examinar el contenido de la memoria y los registros y depurar el programa directamente desde la consola. La salida del programa se imprimía, o se perforaba en cintas de papel o tarjetas para su impresión posterior .

Sin embargo, con este procedimiento se presentaban ciertos problemas. Supongamos que un usuario se había registrado para usar una hora de tiempo del computador dedicada a ejecutar el programa que estaba desarrollando, pero se topaba con algún error difícil y no podía terminar en esa hora. Si alguien más había reservado el siguiente bloque de tiempo, usted debía detenerse, rescatar lo que pudiera y volver mas tarde para continuar. Por otra parte, si el programa se ejecutaba sin problemas, podría terminar en 35 minutos; pero como pensó que necesitaría la maquina durante más tiempo, se registro para usarla una hora, y permanecería inactiva durante 25 minutos. Conforme transcurrió el tiempo, se desarrollaron software y hardware adicionales; empezaron a popularizarse los lectores de tarjetas, impresoras de líneas y cintas magnéticas; se diseñaron ensambladores, cargadores y ligadores para facilitar las tareas de programación, y se crearon bibliotecas de funciones comunes, de manera que estas podían copiarse a un nuevo programa sin tener que escribirlas de nuevo.

Las rutinas que efectuaban operaciones de E/S tenían una importancia especial. Cada nuevo dispositivo de E/S poseía sus propias características, lo que requería una cuidadosa programación. Así mismo, para cada uno de ellos se escribía una subrutina especial, la cual se denominaba manejador de dispositivos. Este sabe como deben de usarse los buffers, indicadores, registros, bits de control y bits de estado para cada dispositivo. Cada tipo de dispositivo tenía su propio manejador. Una tarea sencilla, como leer un carácter de un lector de cinta de papel, podía conllevar complicadas secuencias de operaciones específicas para el dispositivo. En lugar de tener que escribir cada vez el código necesario, bastaba usar el manejador de dispositivo de la biblioteca.

Más tarde aparecieron los compiladores de FORTRAN, COBOL y otros lenguajes, lo que facilito la tarea de programación, pero hizo más complejo el funcionamiento del computador.

Por ejemplo, al preparar la ejecución de un programa en FORTRAN, el programador primero necesitaba cargar en el computador el compilador de FORTRAN, que generalmente se conservaba en una cinta magnética, por lo que había que montar la cinta adecuada en la unidad correspondiente. El programa se leía a través del lector de tarjetas y se escribía en otra cinta. El compilador de FORTRAN producía una salida en lenguaje ensamblador, que luego tenia que ensamblarse, para esto era necesario montar otra cinta con el ensamblador, y su salida debía enlazarse con las rutinas de apoyo de las bibliotecas. Finalmente, el programa objeto, en código binario, estaba listo para ejecutarse; se cargaba en memoria y se depuraba desde la consola como antes.

Los Sistemas Operativos, al igual que el Hardware de los computadores, han sufrido una serie de cambios revolucionarios llamados generaciones. En el caso del Hardware, las generaciones han sido marcadas por grandes avances en los componentes utilizados, pasando de válvulas (primera generación) a transistores (segunda generación), a circuitos integrados (tercera generación), a circuitos integrados de gran y muy gran escala (cuarta generación). Cada generación Sucesiva de hardware ha ido acompañada de reducciones substanciales en los costos, tamaño, emisión de calor y consumo de energía, y por incrementos notables en velocidad y capacidad.

Las generaciones


Generación Cero (década de 1940)
Los primeros sistemas computacionales no poseían sistemas operativos. Los usuarios tenían completo acceso al lenguaje de la maquina. Todas las instrucciones eran codificadas a mano.

Primera Generación (década de 1950)
Los sistemas operativos de los años cincuenta fueron diseñados para hacer mas fluida la transición entre trabajos. Antes de que los sistemas fueran diseñados, se perdía un tiempo considerable entre la terminación de un trabajo y el inicio del siguiente. Este fue el comienzo de los sistemas de procesamiento por lotes, donde los trabajos se reunían por grupos o lotes. Cuando el trabajo estaba en ejecución, este tenia control total de la maquina. Al terminar cada trabajo, el control era devuelto al sistema operativo, el cual limpiaba y leía e iniciaba el trabajo siguiente. Al inicio de los 50's esto había mejorado un poco con la introducción de tarjetas perforadas (las cuales servían para introducir los programas de lenguajes de máquina), puesto que ya no había necesidad de utilizar los tableros enchufables. Además el laboratorio de investigación General Motors implementó el primer sistema operativo para la IBM 701. Los sistemas de los 50's generalmente ejecutaban una sola tarea, y la transición entre tareas se suavizaba para lograr la máxima utilización del sistema. Esto se conoce como sistemas de procesamiento por lotes de un sólo flujo, ya que los programas y los datos eran sometidos en grupos o lotes. La introducción del transistor a mediados de los 50's cambió la imagen radicalmente. Se crearon máquinas suficientemente confiables las cuales se instalaban en lugares especialmente acondicionados, aunque sólo las grandes universidades y las grandes corporaciones o bien las oficinas del gobierno se podían dar el lujo de tenerlas. Para poder correr un trabajo (programa), tenían que escribirlo en papel (en FORTRAN o en lenguaje ensamblador) y después se perforaría en tarjetas. Enseguida se llevaría la pila de tarjetas al cuarto de introducción al sistema y la entregaría a uno de los operadores. Cuando la computadora terminara el trabajo, un operador se dirigiría a la impresora y desprendería la salida y la llevaría al cuarto de salida, para que la recogiera el programador.

Segunda Generación (a mitad de la década de 1960)
La característica de los sistemas operativos fue el desarrollo de los sistemas compartidos con multiprogramación, y los principios del multiprocesamiento. En los sistemas de multiprogramación, varios programas de usuario se encuentran al mismo tiempo en el almacenamiento principal, y el procesador se cambia rápidamente de un trabajo a otro. En los sistemas de multiprocesamiento se utilizan varios procesadores en un solo sistema computacional, con la finalidad de incrementar el poder de procesamiento de la maquina. La independencia de dispositivos aparece después. Un usuario que desea escribir datos en una cinta en sistemas de la primera generación tenia que hacer referencia especifica a una unidad de cinta particular. En la segunda generación, el programa del usuario especificaba tan solo que un archivo iba a ser escrito en una unidad de cinta con cierto número de pistas y cierta densidad. Se desarrollo sistemas compartidos, en la que los usuarios podían acoplarse directamente con el computador a través de terminales. Surgieron sistemas de tiempo real, en que los computadores fueron utilizados en el control de procesos industriales. Los sistemas de tiempo real se caracterizan por proveer una respuesta inmediata.

Tercera Generación (mitad de década 1960 a mitad década de 1970)
Se inicia en 1964, con la introducción de la familia de computadores Sistema/360 de IBM. Los computadores de esta generación fueron diseñados como sistemas para usos generales. Casi siempre eran sistemas grandes, voluminosos, con el propósito de serlo todo para toda la gente. Eran sistemas de modos múltiples, algunos de ellos soportaban simultáneamente procesos por lotes, tiempo compartido, procesamiento de tiempo real y multiprocesamiento. Eran grandes y costosos, nunca antes se había construido algo similar, y muchos de los esfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho después de lo que el planificador marcaba como fecha de terminación. Estos sistemas introdujeron mayor complejidad a los ambientes computacionales; una complejidad a la cual, en un principio, no estaban acostumbrados los usuarios.

Cuarta Generación (mitad de década de 1970 en adelante)
Los sistemas de la cuarta generación constituyen el estado actual de la tecnología. Muchos diseñadores y usuarios se sienten aun incómodos, después de sus experiencias con los sistemas operativos de la tercera generación.
Con la ampliación del uso de redes de computadores y del procesamiento en línea los usuarios obtienen acceso a computadores alejados geográficamente a través de varios tipos de terminales. Los sistemas de seguridad se han incrementado mucho ahora que la información pasa a través de varios tipos vulnerables de líneas de comunicación. La clave de cifrado esta recibiendo mucha atención; han sido necesario codificar los datos personales o de gran intimidad para que; aun si los datos son expuestos, no sean de utilidad a nadie mas que a los receptores adecuados.



Información Aportada por: Miguel Angel García Soto