Los agentes móviles, son capaces de ejecutarse en varias máquinas sin necesidad de que en ellas se encuentre su código. Como su nombre lo indican su código es móvil. También operan sin conexión, pueden trabajar si la red no esta funcionando. Si los agentes necesitan buscar información en la red el mismo puede esperar a que esta se reanude.

Se entiende por agente móvil a aquél que no está limitado al sistema donde se ejecutó, el mismo será capaz de moverse de una máquina a otra a través de la red. De esta forma podrá interactuar con el objeto deseado de forma directa sobre el sistema donde se encuentre dicho objeto.

Un agente móvil no sólo realiza sus funciones en el ordenador que se encuentre, sino en otras que se encuentren en red, con el fin de buscar la información que se haya ordenado. Los mismos tienen la capacidad de decidir a qué servidor moverse. Estos agentes tienen la capacidad para su ejecución y cambiar hacia otro nodo sin cambiar su estado y seguir con su ejecución.

Ventajas de los agentes móviles

  • Eficiencia
  • Adaptación al cliente
  • Reduce el tráfico de la red
  • Gestiona gran volumen de información
  • Permite la comunicación en tiempo real

Para entender mejor a los agentes móviles y su comportamiento, debemos ver las arquitecturas de red tradicionales. En la siguiente imagen se ilustra el comportamiento de la red de un uso típico cliente/servidor.

agentesmoviles.jpg

Cuando el cliente necesita información que se encuentre en el servidor este les envía peticiones al mismo. Luego el servidor envía respuesta a las peticiones al cliente.

Características de los agentes

  • Movilidad: Tienen la capacidad de moverse de una máquina a otra.
  • Proacción: Toman la iniciativa para alcanzar sus propios objetivos.
  • Sociabilidad: Tienen la capacidad de comunicarse con otros agentes, personas, programas.
  • Adaptación: Se comportan según sus experiencias.

Los agentes móviles proveen una nueva forma de generar aplicaciones que se adapten mejor a problemas o tareas que tiene que ver con:

  • Redes de cómputo
  • Cómputo distribuido
  • Diferentes plataformas y arquitecturas
  • Redes de baja confiabilidad y desconexión parcial
  • Sistemas de cómputo móviles inalámbricos

Comunicación entre agentes

Los agentes que forman un sistema pueden comunicarse entre ellos. Los agentes móviles pueden rechazar peticiones de otros agentes.

Cómo se mueve un agente

Los agentes se transfieren de un sistema a otro en las siguientes fases:

Inicio de la transferencia:

El agente identifica el destino deseado, realiza una petición de viaje al sistema, si es aceptada recibe el permiso para realizar la transferencia. El sistema suspende la ejecución del agente e identifica el estado y las partes que serán enviadas. Se realiza la conversión del código y estado del agente (seriación) y se codifica según el protocolo seleccionado. El sistema realiza la autentificación del agente y se realiza la transferencia.

Recepción del agente:

El sistema destinatario acredita al cliente. Se realiza la descodificación del agente y la conversión del código y estado del agente (diseriación), el sistema crea la instancia del agente, restaura su estado y continúa su ejecución.

Transferencia de otras clases (sistemas orientados a objetos):

Este proceso se realiza cuando el agente se mueve de un sistema a otro, cuando se crea remotamente o necesita de otros objetos. Estas transferencias de las clases pueden realizarse durante la transferencia del agente o realizar peticiones cuando sea necesario.

Llamamos seriación al proceso en el que se representa el estado de un agente mediante una serie. El proceso de descodificación de esta serie en el agente se le llama: diseriación.

Lenguajes para agentes

Pueden ser lenguajes de propósito general como:

  • Java
  • C++
  • Lisp
  • Prolog

O lenguajes específicos como:

  • April
  • Prolog/C
  • CLOS/C

Lenguaje de comunicación de agente

Podemos encontrar los procedimentales:

  • Perl
  • TCL

Declarativos:

  • ACL

¿Qué es ACL?

ACL “Agent Communication Language” surgió con el objetivo de crear un lenguaje que permitiera la interoperabilidad entre agentes. ACL cuenta con tres componentes:

  • Vocabulario
  • Lenguaje de contenido llamado KIF “Knowledge Interchange Format”
  • Lenguaje de comunicación llamado KQML “Knowledge Query Manipulation Language”

Un mensaje de ACL es un mensaje en KQML, el mismo consiste de una directiva de comunicación y un contenido semántico en KIF expresado en términos del vocabulario.

¿Qué es KIF?

Es una versión en prefijo del cálculo de predicados de primer orden con varias extensiones para incrementar su expresividad.

¿Qué es KQML?

Fue concebido como un formato de mensajes y como un protocolo que maneja los mensajes para permitir a un programa identificar, conectarse e intercambiar información con otros programas.

Seguridad

El tener un control de la seguridad es un grave problema, ya que los agentes son programas que viajan de una máquina a otra, como lo realiza un virus. Se deben controlar los siguientes aspectos:

  • Protección de la máquina contra otros agentes
  • Protección de los agentes contra la máquina
  • Protección de la red

Ataques comunes que pueden realizarse a un agente móvil:

  • Congestionar el sistema con peticiones.
  • Escuchar por la red para obtener información privada.
  • Modificar, borrar o sustituir cualquier elemento que se transfiera por la red.
  • Grabar y retransmitir de forma no autorizada una comunicación.
  • Falsificar la identidad de un agente, para lograr tener acceso a otros agentes o servicios.
  • Utilizar algún recurso para que no pueda ser utilizado por otro usuario.
  • Colocar virus que les permitan recibir información confidencial o denegar accesos a recursos.

Estrategias para lograr la seguridad:

Es necesario que los agentes móviles refuercen su seguridad para evitar ataques como los antes mencionados. Los requisitos que se deben garantizar en cada comunicación son:

  • Confidencia: Evitar que puedan realizar escuchas.
  • Integridad: comprobar que los datos no se han modificados durante su transferencia.
  • Autentificación: Identificar a los agentes para evitar que puedan acceder a informaciones.
  • Detectar reproducción: Evitar que los agentes puedan estar duplicados en una comunicación.

Para ello son necesarias las siguientes políticas:

  • Comprobar las credenciales de los participantes en cualquier comunicación.
  • Restringir o garantizar las operaciones que puede ejecutar un agente.
  • Establecer privilegios de acceso a recursos.

Protocolos de comunicación

Estos protocolos son reglas de comunicación que permiten la comunicación entre diferentes computadoras, si las mismas utilizan diferentes protocolos estas no se podrán comunicar. Un protocolo es un patrón que se usa para llevar una conversación.

Entre los protocolos más importantes podemos encontrar:

  • MICK: Es “Marco de Inter-Comunicación” basado en KQML, en el que cada agente cuenta con un ruteador capaz de enviar y recibir mensajes en KQML, reconocer un conjunto de palabras y seguir un protocolo.
  • ATP: El “Protocolo de Transferencia de Agente” es un protocolo a nivel de aplicación para sistemas distribuidos basados en agentes, puede ser usado para transferir agentes a móviles entre redes de computadoras. Mientras los agentes móviles pueden ser programados en diferentes lenguajes y para una variedad de plataformas de agentes. Estos ofrece la oportunidad para manejar la movilidad de los agentes de una forma general y uniforme.
  • CORBA: Por sus siglas en inglés “Common Object Request Broker Architecture” es una especificación abierta de OMG para las arquitecturas de las aplicaciones que trabajan sobre redes. Su interoperabilidad proviene de dos partes principales: OMG Lenguaje de Definición de Interface “OMG DL” y los protocolos estandarizados GIOP e IIOP.
  • RMI: “Remote Method Invocation” habilita al programador para crear aplicaciones basadas en tecnología Java distribuida, en la cual los métodos de objetos en Java remotos pueden ser invocados desde otras máquinas virtuales de Java, posiblemente en diferentes servidores. RMI utiliza la serialización de objetos con parámetros oficiales y no oficiales, y no trunca los tipos, soportando un verdadero polimorfismo orientado a objetos.

Referencias