Mobile agents are program instances (or processes) capable of moving within the network under their own control. They consist of three parts: code, data state, and execution state. Migration of mobile agents takes place between hosts. These hosts execute the agents and provide functionality to them. This functionality includes communication with other agents and users, migration to other hosts, and other services such as persistency (i.e. storing data or agent snapshots), services lookup (i.e. finding agents that offer a service), location of agents (either locally or on a larger scale), integration of legacy systems such as databases, and the like.
Being the technical basis for applications, mobile agents offer a number of advantages. These include the saving of network bandwidth and increase in the overall performance by allowing the application to process data on or near the source of data (e.g. a database), asynchronous processing, i.e. the possibility to fulfil a task without the need to have a permanent connection from the client to a host, achieving true parallel computation by employing a number of agents working on different nodes, the replacement of a fault model where network failures can interrupt every phase of the computation by one where network failures can influence only the migration of an agent (as the rest is then done locally on the same node), and so on. Additionally, mobile agents "inherit" the advantages of mobile code systems, especially the possibility to transport functionality automatically to nodes where it has not been installed before.
For mobile agents, security is a very important aspect since neither the provider of a host or an agent-based service, nor the owner of an agent wants to be harmed by employing this technology. This is a non-trivial requirement in mobile agent systems, because firstly, the executing party has no vital interest in executing a program correctly, and secondly, the employer of a program has to give away the control over its execution.