Los sistemas distribuidos gozan hoy de fundamental importancia entre los sistemas de información, debido a sus potenciales capacidades de tolerancia a fallos y escalabilidad, que permiten su adecuación a las aplicaciones actuales, crecientemente exigentes. Por otra parte, el desarrollo de aplicaciones distribuidas presenta también dificultades específicas, precisamente para poder ofrecer la escalabilidad, tolerancia a fallos y alta disponibilidad que constituyen sus ventajas. Por eso es de gran utilidad contar con componentes distribuidas específicamente diseñadas para proporcionar, a más bajo nivel, un conjunto de servicios bien definidos, sobre los cuales las aplicaciones de más alto nivel puedan construir su propia semántica más fácilmente. Es el caso de los servicios orientados a grupos, de uso muy extendido por las aplicaciones distribuidas, a las que permiten abstraerse de los detalles de las comunicaciones. Tales servicios proporcionan primitivas básicas para la comunicación entre dos miembros del grupo o, sobre todo, las transmisiones de mensajes a todo el grupo, con garantías concretas. Un caso particular de servicio orientado a grupos lo constituyen los servicios de pertenencia a grupos, en los cuales se centra esta tesis. Los servicios de pertenencia a grupos proporcionan a sus usuarios una imagen del conjunto de procesos o máquinas del sistema que permanecen simultáneamente conectados y correctos. Es más, los diversos participantes reciben esta información con garantías concretas de consistencia. Así pues, los servicios de pertenencia constituyen una componente fundamental para el desarrollo de sistemas de comunicación a grupos y otras aplicaciones distribuidas. El problema de pertenencia a grupos ha sido ampliamente tratado en la literatura tanto desde un punto de vista teórico como práctico, y existen múltiples realizaciones de servicios de pertenencia utilizables. A pesar de ello, la definición del problema no es única. Por el contrario, dependiendo del sistema concreto para el cual se diseñe el servicio, se requieren de este unas garantías u otras. Las especificaciones e implementaciones originales estaban enfocadas a escenarios "clásicos", donde un número de nodos reducido se interconectaban a través de redes con relativamente pocos fallos y de comportamiento bien conocido (típicamente redes de área local). Sin embargo, con el desarrollo de los sistemas modernos, la expansión de Internet, la generalización de las comunicaciones inalámbricas, etc., se ha hecho predominante otro tipo de sistemas distribuidos más dinámicos para los cuales los servicios distribuidos clásicos no resultan convenientes. Por ese motivo, se han desarrollado en los últimos años servicios de pertenencia a grupos a propósito para otro tipo de entornos. En este trabajo nos hemos centrado en la especificación y realización de servicios de pertenencia a grupos para determinados sistemas dinámicos que presentan interés de cara al desarrollod e eplicaciones altamente disponibles. En concreto, hemos estudiado tres tipos de escenarios. 1) Sistemas con topología bien conocida, y tamaño moderado, en los que las particiones son bastante probables, como podría ser el caso de un sistema compuesto por varios nodos o clusters localizados, conectados entre sí por enlaces WAN de alta velocidad. Para estos sistemas hemos definido e implementado el servicio de pertenencia a grupos particionable HMS, que proporciona las garantías de consistencia más estrictas de un servicio clásico de pertenencia, más una propiedad adicional. Esta propiedad, o "Acuerdo uniforme mayoritario" facilita la recuperación de las aplicaciones usuarias tras la reparación de fallos y particiones, gracias al mantenimiento de la historia mayoritaria de forma uniforme dentro del grupo. 2) Arquitecturas cliente--servidor a gran escala, en las cuales un reducido grupo de servidores atiende las peticiones de un gran conjunto de clientes dinámico y de identidades y tamaño no conocidos de antemano. Para este tipo de escenario hemos especificado un servicio de pertenencia de clientes, que proporciona a clientes y servidores la información más relevante respecto al grupo opuesto, para mantener las conexiones de los clientes al grupo de forma unificada y simplificar la reacción a fallos de cualquiera de los dos tipos de nodo. La especificación se ha realizado en la definición e implementación completa del protocolo HaloMS, también descrito en este trabajo. 3) Las redes móviles ad hoc o espontáneas introducen nuevos retos para el desarrollo de servicios distribuidos. En concreto el consumo de energía y ancho de banda son en este caso parámetros a tener en cuenta a la hora de diseñar protocolos. Para este tipo de sistemas, y otros con similares requisitos de ahorro de recursos, hemos especificado un Servicio de Pertenencia a Grupos Bajo Demanda, capaz de proporcionar garantías de consistencia estricta solo durante periodos de tiempo finitos, que se deciden en función de las exigencias de las aplicaciones. Esto permite evitar el gasto innecesario de recursos energéticos y de comunicaciones derivado de rondas de acuerdo y costosas reconfiguraciones cuando ningún componente está haciendo uso de de la información de pertenencia. También presentamos aquí la realización de este servicio en el protocolo MODUS, que implementa la especificación Bajo Demanda a partir de un servicio de pertenencia clásico ya existente. Específicamente para el escenario "ad hoc", además, la falta de una topología predefinida supone una dificultad añadida para el desarrollo de servicios de pertenencia, y de cualquier protocolo basado en acuerdo distribuido. Esta carencia de conocimiento inicial puede suplirse mediante un servicio de estimación de pertenencia que no proporcione consistencia estricta. Hemos analizado una propuesta de servicio de estimación de tipo epidémico, que sirve como base para el desarrollo de otros protocolos más restrictivos, de los cuales pertenencia a grupos estricta sería un ejemplo. En nuestro análisis hemos tenido en cuenta que tal servicio deberá ser utilizado conjuntamente con un servicio de encaminamiento. Basándonos en la simulación de los protocolos, hemos estudiado dos posibles arquitecturas que proporcionan ambos servicios y comparado su rendimiento en diferentes escenarios, en términos de su consumo energético y de la calidad de la información de pertenencia facilitada. Este trabajo describe la especificación de todos estos servicios, y la implementación de los correspondientes protocolos. Todos estos han sido implementados completamente y están disponibles para su descarga en la web. Puesto que el objetivo del trabajo es ofrecer un soporte de uso práctico para el desarrollo de aplicaciones distribuidas en los diferentes escenarios estudiados, todas las implementaciones encajan en una arquitectura modular más general, caracterizada por la independencia de cada uno de los servicios, implementados como componentes autónomas. Estas componentes tienen asimismo interfaces bien definidas que pueden ser utilizadas indistintamente por otros servicios del sistema o por aplicaciones de alto nivel.